小编典典

如何根据箭头计算箭头的坐标?

algorithm

我有一条线基于我知道的两个(x,y)坐标。这条线有一个起点和一个终点。现在,我想在该行的终点添加一个箭头。

我知道箭头是等边三角形,因此每个角度均为60度。另外,我知道一侧的长度为20。我也没有三角形的任何一条边(即线的终点)。

如何计算三角形的其他两个点?我知道我应该使用三角函数,但是怎么做?

Ps该线的端点应为箭头的尖端。


阅读 405

收藏
2020-07-28

共1个答案

小编典典

您不需要Trig。,只需执行一些矢量算法…

假设线从A到B,箭头的前顶点在B。箭头的长度为h = 10(√3),其半角宽度为w =10。我们将表示从A到B的U =(B-A)/ | B-A |
(即,差异除以差异的长度),垂直于此的单位向量为V = [-U y,U x ]。

根据这些量,可以将箭头的两个后顶点计算为B-hU±wV。

在C ++中:

struct vec { float x, y; /* … */ };

void arrowhead(vec A, vec B, vec& v1, vec& v2) {
    float h = 10*sqrtf(3), w = 10;
    vec U = (B - A)/(B - A).length();
    vec V = vec(-U.y, U.x);
    v1 = B - h*U + w*V;
    v2 = B - h*U - w*V;
}

如果要指定不同的角度,则将需要一些触发。计算的不同的值hw。假设您要使用长度为h且顶角为θ的箭头,则w = h tan(θ/
2)。然而在实践中,这是最简单的指定hw直接。

2020-07-28