画一条平行线

我有x1,y1和x2,y2,形成一个线段。 如何得到另一条线x3,y3-x4,y4,它与第一条线平行,如图所示。 我可以简单地将n添加到x1和x2以获得平行线,但它不是我想要的。 我希望线条在图片中平行。

在此处输入图像描述

你想要做的是偏移正交方向的坐标。 如果您知道向量数学,则将由该行的端点之间的距离创建的向量乘以以下矩阵:

[ 0 -1 ] [ 1 0 ] 

假设第一行有点(x1,y1)(x2,y2)x=x2-x1y=y2-y1
我们还有L = sqrt(x*x+y*y) ,这条线的长度(原谅符号)。 那么下一行应该被偏移

 [ 0 -1 ] [x] [ 1 0 ] [y] 

=> dx = -y / Ldy = x / L ,这是新线的标准化偏移量。

在类似C#的伪代码中:

 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 

您是否尝试将n减去y1和y2以及将n添加到x1和x2? 我想这可行