我正在开发图形应用程序。在应用程序窗口中,有由边连接的顶点。用户可以移动顶点,当他这样做时,边也会移动。我有问题找到模式,以绘制箭头表示的边缘方向取决于两个顶点的位置。
下面是一个例子。
假设顶点有width/height = 20px;边是从Vertex1的中心绘制到Vertex2的中心。
Vertex1.position = new Point(0,0);
Vertex2.position = new Point(100,0);
Edge.point1 = new Point(10,10);
Edge.point2 = new Point(110,10);
//Arrow representing direction from Vertex1 to Vertex2
Arrow.point1 = new Point(100,10);
Arrow.point2 = new Point(90,20);
Arrow.point3 = new Point(90,0);问题是:知道边的起点/终点的位置,如何计算箭头点?
发布于 2011-12-19 03:58:33
假设边的起点坐标为(ax, ay),终点为(bx, by),顶点半径为w,箭头的指针长度为l,箭头边之间的角度为alpha,然后在伪代码中:
ex := (bx - ax)
ey := (by - ay)
ex := ex / sqrt(ex^2 + ey^2)
ey := ey / sqrt(ex^2 + ey^2)箭头的第一个点:
a1x := bx - w * ex
a1y := by - w * ey箭头的第二个点:
a2x := bx - (w + l) * ex + l * tg(alpha/2) * ey
a2y := by - (w + l) * ey - l * tg(alpha/2) * ex箭头的第三个点:
a3x := bx - (w + l) * ex - l * tg(alpha/2) * ey
a3y := by - (w + l) * ey + l * tg(alpha/2) * ex很抱歉这么差的格式,我不知道如何在这里使用数学标记。我希望我在计算中没有犯任何错误。
发布于 2011-12-19 03:58:27
编辑:您没有指向您的应用程序类型。如果你使用WinForms,this可能会很有用。Here是一篇关于LineCap的文章。
https://stackoverflow.com/questions/8554211
复制相似问题