c# - 画一条平行线

标签 c# graphics geometry drawing computational-geometry

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

enter image description here

最佳答案

你要做的是在正交方向上偏移坐标。如果您了解矢量数学,请将由直线端点之间的距离创建的矢量乘以以下矩阵:

[ 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

关于c# - 画一条平行线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825412/

相关文章:

C# 如何在命令行应用程序中接收系统关闭或退出事件

c# - 如何创建不比较两个单独继承类的抽象基类 IComparable?

java - 使用Keylistener后如何重新绘制图形?

C#,访问类中不同列表的通用方法

c# - 使用 linq 返回值不为空的单元格 - Epplus

Android - 如何使用自定义 SurfaceView 为移动形状制作动画?

c# - GDI 整体剪裁范围

html - 使用与文本不同的背景颜色绘制 HTML5 Canvas?

java - 如何使用多线程进行多圆动画?

在球体上计算 Voronoi 图的算法?