根据旋转角度计算新的点偏移量?

问题描述:

我正在研究过去几周涉及一些三角形的应用程序,目前我被卡住了。如下图所示,我知道中心点(我们称X1,Y1)为圆形项目(位置#1处为绿色圆圈)。该圆圈还有一点(橙色圆圈)偏离了中心位置 - 在另外两个标记(蓝色圆圈)之间。这些标记可以移动。计算橙色点的坐标(我们称之为X2,Y2),并计算蓝色线的角度(称为角度)与圆的水平线的关系。根据旋转角度计算新的点偏移量?

Diagram

我可以计算出圆的中心和由所述点之间的差值:

DELTAX = X2-X1

移动deltaY = Y2-Y1

我需要将其起始位置(位置1)的绿色圆圈(顺时针或逆时针 - 无论哪个较短)移动并移动到位置2.这意味着角度可能是负值或正值。蓝线必须垂直,位置2(红色方块)中心的橙色圆点。我知道位置2的中心坐标(我们称之为X3,Y3)。位置#1和位置#2彼此正好是90度。

我想我可以使用一些TRIG身份的公式计算一个点的旋转,因为这样的:

OFFSETX = DELTAX * COS(90角) - 移动deltaY *罪(90角)

offsetY = deltaX * sin(90-角度)+ deltaY * cos(90-角度)

我希望这些偏移量是我需要调整圆到它的新中心,当它移动/旋转到位置2.

X3 = X3 + offsetX

Y3 = Y3 + OFFSETY

然而,当我尝试用这个数学,它不是放置圆的橙色标志在广场的中心。根据旋转角度(正向或负向,CW或CCW)或我正确使用角度(从90度减去已知角度),我不知道我的公式和计算是否正确。我如何正确计算最终的点/位置?任何帮助和例子将不胜感激!

非常感谢您的时间!

所以你需要旋转你的圆圈90 - Angle,然后将橙色点移动到(X3,Y3)?
首先,你需要找到旋转后的橙色点坐标:

newX = X2 * cos(90 - Angle) - Y2 * sin(90 - Angle); 
newY = X2 * sin(90 - Angle) + Y2 * cos(90 - Angle); 

newXnewY是橙色旋转后点的坐标。为了找到举动根本转变。减去:

moveX = X3 - newX; 
moveY = Y3 - newY; 

现在,如果你通过90 - Angle旋转圈和(MOVEX,moveY)橙色点移动,它移动到(X3,Y3)。那就是如果你围绕(0,0)点旋转圆圈。如果围绕某个(X,Y)点旋转,首先需要从X2中减去X,Y2中减去Y,然后将X加到newX,Y中加到newY上。该减法将您的旋转基点“移动”到(0,0),因此旋转后需要将其移回:

newX = (X2 - X) * cos(90 - Angle) - (Y2 - Y) * sin(90 - Angle) + X; 
newY = (X2 - X) * sin(90 - Angle) + (Y2 - Y) * cos(90 - Angle) + Y; 
+0

谢谢。我会试试这个。我想我应该澄清一下,我正在将圈子从位置1移动到位置2,然后在那里进行旋转。所以,我需要将该橙色点(X2,Y2)居中在红色正方形的中心(已知点X3,Y3)。角度根据蓝色圆圈计算,有时可能为负数(介于-1和-180之间)。不知道这是否影响公式? – DataCrypt 2014-09-24 16:21:15

+0

@DataCrypt如果旋转基点随着橙色点移动,那么出于计算目的,移动或旋转并不重要。如果您将橙色点移动到(X3,Y3),但答案将会错误,因为您可能围绕它的中心旋转了圆圈,而不是围绕橙色点(旋转的点,它在旋转后不会改变其坐标)。当然,只有当(X3,Y3)不随圆旋转时。 – Atomosk 2014-09-25 02:36:09

+0

@DataCrypt任何值都可以用于'sin'和'cos',那些公式甚至是-9000。唯一让我困惑的是'90-角度',因为我看到的所有罪与cos实现都是以角度的弧度值而不是度数。但我很确定你知道这一点。 – Atomosk 2014-09-25 02:46:28