【发布时间】:2019-12-13 06:44:59
【问题描述】:
我有 x1,y1 和 x2,y2 形成一条线段。我怎样才能得到另一条线 x3,y3 - x4,y4 与图片中的第一条线平行。我可以简单地将 n 添加到 x1 和 x2 以获得平行线,但这不是我想要的。我希望线条在图片中保持平行。
【问题讨论】:
标签: c# graphics geometry drawing computational-geometry
我有 x1,y1 和 x2,y2 形成一条线段。我怎样才能得到另一条线 x3,y3 - x4,y4 与图片中的第一条线平行。我可以简单地将 n 添加到 x1 和 x2 以获得平行线,但这不是我想要的。我希望线条在图片中保持平行。
【问题讨论】:
标签: c# graphics geometry drawing computational-geometry
您要做的是在正交方向上偏移坐标。如果您知道向量数学,请将线端点之间的距离创建的向量乘以以下矩阵:
[ 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
这是新行的标准化偏移量。
类似 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
【讨论】:
您是否尝试在 y1 和 y2 中减去 n,同时在 x1 和 x2 中添加 n?我想这可能有效
【讨论】: