首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >边方向的绘制算法

边方向的绘制算法
EN

Stack Overflow用户
提问于 2011-12-19 03:29:55
回答 2查看 440关注 0票数 3

我正在开发图形应用程序。在应用程序窗口中,有由边连接的顶点。用户可以移动顶点,当他这样做时,边也会移动。我有问题找到模式,以绘制箭头表示的边缘方向取决于两个顶点的位置。

下面是一个例子。

假设顶点有width/height = 20px;边是从Vertex1的中心绘制到Vertex2的中心。

代码语言:javascript
复制
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);

问题是:知道边的起点/终点的位置,如何计算箭头点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-19 03:58:33

假设边的起点坐标为(ax, ay),终点为(bx, by),顶点半径为w,箭头的指针长度为l,箭头边之间的角度为alpha,然后在伪代码中:

代码语言:javascript
复制
ex := (bx - ax) 
ey := (by - ay) 
ex := ex / sqrt(ex^2 + ey^2)
ey := ey / sqrt(ex^2 + ey^2)

箭头的第一个点:

代码语言:javascript
复制
a1x := bx - w * ex
a1y := by - w * ey

箭头的第二个点:

代码语言:javascript
复制
a2x := bx - (w + l) * ex + l * tg(alpha/2) * ey
a2y := by - (w + l) * ey - l * tg(alpha/2) * ex

箭头的第三个点:

代码语言:javascript
复制
a3x := bx - (w + l) * ex - l * tg(alpha/2) * ey
a3y := by - (w + l) * ey + l * tg(alpha/2) * ex

很抱歉这么差的格式,我不知道如何在这里使用数学标记。我希望我在计算中没有犯任何错误。

票数 3
EN

Stack Overflow用户

发布于 2011-12-19 03:58:27

编辑:您没有指向您的应用程序类型。如果你使用WinForms,this可能会很有用。Here是一篇关于LineCap的文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8554211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档