【问题标题】:How to calculate point on circle from angle between middle and other point on the circle如何从圆上的中间点和其他点之间的角度计算圆上的点
【发布时间】:2020-02-18 10:19:10
【问题描述】:

我有一个直径为 256px 的圆,中点在 xy[128,128] 上。我在圆上有第一个点,例如 X=0,Y=128。坐标原点在左上角。第一点和中间之间的线,连同这条线上的角度(从中间开始)创建在第三点与圆相交的三角形。我该如何计算这个点?

输入变量是:

  1. 圆上的点 xy
  2. 中间点
  3. 角度

预期输出为 x1,y1

【问题讨论】:

  • 在几何中,您通常说的是“中心”,而不是“中间”...
  • 所以你有一个圆心 C 和圆上的一个点 A 并且你想找到点 B 在圆上使 AC 和 CB 之间的角度具有给定值?
  • @MOehm 猜得好。这是有道理的。
  • 基于@MOehm 的怀疑(我分享):首先转换您的坐标,使中心位于{0, 0}(简单减法)。然后旋转有问题的点是通过与{ {cos(angle), -sin(angle)}, {sin(angle), cos(angle)} } 的矩阵乘法来实现的。然后将坐标转换回您想要的系统(简单添加)。详情请见wikipedia
  • @MOehm 是的,完全正确

标签: c++ algorithm geometry point angle


【解决方案1】:

初始点绕中心点旋转角度的公式:

 x1 = middle.x + (x - middle.x) * cos(angle) - (y - middle.y) * sin(angle)
 y1 = middle.y + (x - middle.x) * sin(angle) + (y - middle.y) * cos(angle)

(这是仿射变换 - 中间到原点的平移、围绕原点的旋转和向后平移的组合)

不要忘记用弧度而不是度数来表示 cos 和 sin 参数:

 cos(angle * M_PI / 180) 

【讨论】:

  • 谢谢,但我认为它不起作用,希望我没有错字。对于输入参数 xy[0,128] 和角度 90,我期望输出 x1y1[128,0] 顺时针方向。我现在得到 x1=185.353423,y1=13.568427。我有什么问题吗?
  • cos(90) 的值是多少?也许您忘记了度数/弧度?
  • cos[90]=-0.448074
  • cos(90 * M_PI / 180) = 0,sine应该使用相同的系数
  • @Jabberwocky 我不确定 M_PI 是否适用于任何地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多