如何计算形成闭合/开放形状的两个方向矢量之间的角度?

时间:2010-11-28 00:12:37

标签: geometry shape pattern-recognition

我想找出正确的触发器。 eq./function确定以下内容: 两个方向矢量之间的角度变化(在DEGREES中)(已经确定),代表两个线段。 这用于SHAPE RECOGTNITION(由用户在屏幕上手绘)的上下文中。

基本上,

a)如果用户绘制(粗糙)形状,例如圆形,椭圆形或矩形等,则构成该形状的线被分解为20个点(x-y对)。

b)我为每个LINE SEGMENTS都有DirectionVector。

c)因此,线段(x0,y0)的BEGINNING将是前一行的END点(以便形成一个像矩形一样的闭合形状,比如说)。

所以,我的问题是,给定上下文(即确定多边形的类型),如何找到两个DIRECTION VECTORS之间的角度变化(可用作x和y的两个浮点值)? ??

我见过很多不同的触发器。方程式,我正在寻求澄清。

非常感谢大家!

4 个答案:

答案 0 :(得分:6)

如果(x1,y1)是第一个方向向量而(x2,y2)是第二个方向向量,则它成立:

cos(alpha)=(x1 * x2 + y1 * y2)/(sqrt(x1 * x1 + y1 * y1)* sqrt(x2 * x2 + y2 * y2))

sqrt表示平方根。

查找http://en.wikipedia.org/wiki/Dot_product

特别是“几何表示”部分。

答案 1 :(得分:3)

你可以试试atan2:

float angle = atan2(previousY-currentY, previousX-currentY);

但是,正如前面提到的答案所提到的那样,

两个verctors之间的角度= acos(first.dotProduct(second))

答案 2 :(得分:2)

我猜你有三个点(x_1,y_1),(x_2,y_2)和(x_3,y_3)。

然后你可以移动点,以便(x_1,y_1)==(0,0)

(x_1,y_1)=(x_2,y_2) - (x_1,y_1) (x_2,y_2)=(x_3,y_3) - (x_1,y_1)

现在你遇到这种情况:

enter image description here

将此三角形视为两个直角三角形。第一个角度是α角,β角度的一部分,第二个直角三角形是beta的另一个角色。

然后你可以申请:

enter image description here

您可以像这样计算alpha:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

答案 3 :(得分:0)

如果我理解正确,你可以只评估两个向量之间的点积,并采用适当的 arccos 来检索这些向量之间的角度。