У меня есть x1, y1 и x2, y2, которые образуют отрезок. Как я могу получить еще одну строку x3, y3 - x4, y4, которая параллельна первой строке, как на рисунке. Я могу просто добавить n в x1 и x2, чтобы получить параллельную линию, но это не то, что я хотел. Я хочу, чтобы линии были такими же параллельными на картинке.
Нарисуйте параллельную линию
Ответ 1
Что вы хотите сделать, так это смещение координат в ортогональном направлении. Если вы знаете векторную математику, умножьте вектор, созданный расстоянием между конечными точками линии, на следующую матрицу:
[ 0 -1 ]
[ 1 0 ]
Скажем, что первая строка имеет точки (x1,y1)
, (x2,y2)
, с x=x2-x1
, y=y2-y1
.
Мы также имеем L = sqrt(x*x+y*y)
, длину линии (простить обозначение). Затем следующая строка должна быть смещена на
[ 0 -1 ] [x]
[ 1 0 ] [y]
= > dx = -y / L
, dy = x / L
который является нормированным смещением для новой строки.
В С# -подобном псевдокоде:
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
Ответ 2
Вы пытались вычитать n до y1 и y2 вместе с добавлением n к x1 и x2? Я думаю, это может работать