5

我正在尝试找出正确的触发器。eq./function 确定以下内容:两个方向向量(已确定)之间的角度变化(以 DEGREES 为单位),表示两个线段。这用于形状识别(用户在屏幕上手绘)的上下文中。

所以基本上,

a) 如果用户绘制了一个(粗略的)形状,例如圆形、椭圆形或矩形等 - 构成该形状的线条被分解为 20 个点(xy 对)。

b)我有每个线段的DirectionVector。

c) 因此,LINE SEGMENT(x0,y0) 的 BEGINNING 将是前一行的 END 点(从而形成一个像矩形一样的闭合形状,比方说)。

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

我见过很多不同的三角。方程式,我正在寻求澄清。

非常感谢各位!

4

4 回答 4

8

如果 (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

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

于 2010-11-28T00:16:55.790 回答
3

你可以试试atan2:

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

而且,正如前面的答案所提到的,

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

于 2010-11-28T02:02:57.443 回答
3

我猜你的向量是三个点(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)

现在你有这种情况:

在此处输入图像描述

把这个三角形想象成两个直角三角形。第一个具有角α和β的一部分,第二个直角三角形具有β的另一部分。

然后你可以申请:

在此处输入图像描述

您可以像这样计算 alpha:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2014-07-01T16:17:42.850 回答
0

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

于 2010-11-28T00:17:29.243 回答