2014-09-19 128 views
0

给定圆心:vectorA和另一个圆的圆周上的Vector:vectorB,如何确定vectorB的较短路径以转换为圆的周长上的另一个点:vectorC?较短的路线是顺时针还是逆时针旋转?确定圆上的旋转方向/朝向/可变点

如果它有助于想到一个时钟。如果时间是时钟周边的随机点,例如。 6,并且分针位置是已知的,例如, 4.手是否需要顺时针或逆时针在时钟中心点旋转到达随机点(6)?

参见:
Vec1 = Circle centre, Vec2 = mousepos, find the point on the circle between Vec1, Vec2

回答

2

只需计算三角形的卷绕方向ABC

circle point dir

因此,如果计算出正常n=(B-A)x(C-B)其中x是叉积然后n.z符号确定的方向。

n.z = ((B.x-A.x)*(C.y-B.y)) - ((B.y-A.y)*(C.x-B.x)) 
if (n.z<0.0) dir=CW else dir=CCW; 

这是所有你需要(CW意味着顺时针和CCW逆时针)粗的,如果你的坐标系不同,那么旋转可以被否定

[注意事项]

if (n.z==0)然后点B,C要么相反或相同,所以方向并不重要,因为两种方式的角距离是相同的

+0

我不确定n或z是什么,或者你为什么使用点符号。你的图表上也没有。 – 2014-09-21 23:50:04

+0

当你说计算'绕线方向'时,我不确定你的意思。什么是缠绕方向,你如何计算?你在旋转三角形吗? – 2014-09-21 23:55:16

+0

@CodeHard_or_HardCode你明显缺乏矢量CG知识中的矢量数学应用。多边形绕线是二维多边形顺时针或逆时针的点的顺序,所以如果您处理2点并将圆心作为三角形并计算绕组,则您知道下一个点是圆形还是顺时针旋转,这正是您想要的。通过将法向量(定义为多边形顺序的2个多边形的角度的交叉积)作为多边形并取其z坐标的符号来简单地计算绕组。 'nz'符号可以简单地访问矢量'n'上的'z'坐标。 – Spektre 2014-09-22 08:04:39