Ich habe x1, y1 und x2, y2, die ein Liniensegment bildet. Wie bekomme ich eine andere Zeile x3, y3 - x4, y4, die parallel zur ersten Zeile ist wie im Bild. Ich kann einfach n zu x1 und x2 hinzufügen, um eine parallele Linie zu bekommen, aber es ist nicht das, was ich wollte. Ich möchte, dass die Linien im Bild parallel sind.Zeichnen Sie eine parallele Linie
Antwort
Was Sie tun möchten, ist, die Koordinaten in der orthogonalen Richtung zu versetzen. Wenn Sie Vektor-Mathematik kennen, multiplizieren Sie den Vektor durch den Abstand zwischen den Endpunkten der Linie durch die folgende Matrix erstellt:
[ 0 -1 ]
[ 1 0 ]
sagen, dass die erste Linie, die die Punkte hat (x1,y1)
, (x2,y2)
, mit x=x2-x1
, y=y2-y1
.
Wir haben auch L = sqrt(x*x+y*y)
, die Länge der Zeile (verzeihen Sie die Notation). Dann wird die nächste Zeile sollte durch
[ 0 -1 ] [x]
[ 1 0 ] [y]
=>dx = -y/L
, dy = x/L
kompensiert werden, die für die neue Linie Offset normiert wird.
In C# -ähnliche Pseudo-Code:
var x1 = ..., x2 = ..., y1 = ..., y2 = ... // The original line
var L = Math.Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
var offsetPixels = 10.0
// This is the second line
var x1p = x1 + offsetPixels * (y2-y1)/L
var x2p = x2 + offsetPixels * (y2-y1)/L
var y1p = y1 + offsetPixels * (x1-x2)/L
var y2p = y2 + offsetPixels * (x1-x2)/L
g.MoveTo(x1p,y1p) // I don't remember if this is the way
g.LineTo(x2p,y2p) // to draw a line in GDI+ but you get the idea
eigentlich, ich weiß nicht Vektor Mathe. Könnten Sie bitte eine C# - oder Pseudo-Funktion schreiben, um zu erreichen, was Sie sagen? – VOX
Habe es funktioniert. Aber noch eine Frage, wenn ich 10 Pixel von der ursprünglichen Linie entfernen möchte, sollte ich dx * 10 multiplizieren? – VOX
Danke @Krumelur. – VOX
Haben Sie versucht, mit dem Hinzufügen von n zu x1 und x2 n y1 und y2 subtrahieren entlang? Ich denke, das kann funktionieren
Ist es ein Hausaufgaben ?? – Arman
nein ist es nicht. fällt es dir so leicht, als Hausaufgabe zu denken? dann antworte mir bitte. :) – VOX