我想找出正确的触发器。 eq./function确定以下内容: 两个方向矢量之间的角度变化(在DEGREES中)(已经确定),代表两个线段。 这用于SHAPE RECOGTNITION(由用户在屏幕上手绘)的上下文中。
基本上,
a)如果用户绘制(粗糙)形状,例如圆形,椭圆形或矩形等,则构成该形状的线被分解为20个点(x-y对)。
b)我为每个LINE SEGMENTS都有DirectionVector。
c)因此,线段(x0,y0)的BEGINNING将是前一行的END点(以便形成一个像矩形一样的闭合形状,比如说)。
所以,我的问题是,给定上下文(即确定多边形的类型),如何找到两个DIRECTION VECTORS之间的角度变化(可用作x和y的两个浮点值)? ??
我见过很多不同的触发器。方程式,我正在寻求澄清。
非常感谢大家!
答案 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)
现在你遇到这种情况:
将此三角形视为两个直角三角形。第一个角度是α角,β角度的一部分,第二个直角三角形是beta的另一个角色。
然后你可以申请:
您可以像这样计算alpha:
答案 3 :(得分:0)
如果我理解正确,你可以只评估两个向量之间的点积,并采用适当的 arccos 来检索这些向量之间的角度。