Dat*_*ypt 6 .net c# math robotics trigonometry
我正在处理一个过去几周的申请,涉及一些三角学,目前我被困住了.如下图所示,我有一个圆形项目(位置#1的绿色圆圈),我知道中心点(让我们称之为X1,Y1).圆圈有另一个点(橙色圆圈)偏离中心位置 - 在另外两个标记(蓝色圆圈)之间.这些标记可以四处移动.计算橙色点的坐标(我们称之为X2,Y2),并计算蓝色线相对于圆的水平线的角度(称之为角度).

我可以通过以下方式计算圆心和点之间的差异:
deltaX = X2-X1
deltaY = Y2-Y1
我需要移动并旋转绿色圆圈(CW或CCW - 以较短者为准)从它的起始位置(位置1)到位置2.这意味着角度可以是负的或正的.蓝线必须以垂直方向结束,橙色点位于位置2的中心(红色方块).我知道位置2中心的坐标(让我们称之为X3,Y3).位置#1和位置#2彼此正好相差90度.
我以为我可以使用一些计算点的旋转的trig标识公式,如下所示:
offsetX = deltaX*cos(90-Angle) - deltaY*sin(90-Angle)
offsetY = deltaX*sin(90-Angle)+ deltaY*cos(90-Angle)
当我移动/旋转到位置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);
Run Code Online (Sandbox Code Playgroud)
newX和newY是旋转后的橙色点坐标。要找到移动变换,只需减去:
moveX = X3 - newX;
moveY = Y3 - newY;
Run Code Online (Sandbox Code Playgroud)
现在,如果将圆旋转并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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4484 次 |
| 最近记录: |