【问题标题】:Find the position of a point on a circle so it has a given distance to a point on another circle找到一个点在圆上的位置,使其与另一个圆上的点具有给定的距离
【发布时间】:2022-10-23 18:31:07
【问题描述】:

我在半圆上有一个点,需要一条线将它连接到黑色半圆。这条线穿过橙色圆圈的原点(垂直)。沿上圆移动时,线的长度会发生变化。有没有办法计算箭头的位置,所以绿线的长度是给定值?
没有一个圆圈一定在原点。
无需检查绿线是否与黑色圆圈相交,我已经确定是这样。

【问题讨论】:

  • 请解释这是一个编程问题,目前看来是纯数学。
  • 橙色圆圈无关紧要。您只需要一个公式来计算从橙色圆圈中心点到黑色圆圈的绿线部分的长度。要获得绿线的总长度,您只需添加橙色圆圈的半径即可。
  • @Yunnosch,抱歉,没有对数学部分进行足够的搜索,所以我认为将其标记为数学和几何可以让我到达那里。最后我想对其进行编码,但提供数学或提示应该可以。
  • @Elec1 好点,这是朝着正确方向迈出的一步。
  • 这个任务频繁吗?那么建立一个“下圆上的角度”到“线段长度”的表可能是有意义的,并通过在该表中反向查找和插值来解决任务。

标签: math geometry intersection


【解决方案1】:

对于从橙色中心到黑色圆圈的线的长度 s,您可以得到公式:

s^2 = (x + r * cos(a))^2 + (y + r * sin(a))^2

其中 x 是黑色圆圈中心的 x 分量的绝对值,y 是相应的 y 分量。 r 是黑色圆圈的半径。 a 是黑色圆圈上交点的角度(通常会有两种解)。

扩展给定的公式会导致:

s^2 = x * x + r * r * cos(a)^2 + 2* r * x * cos(a) 
      + y * y + r * r * sin(a)^2 +2 *r * y * sin(a)

作为

r * r * cos(a)^2 + r * r * sin(a)^2 = r * r

我们有

s^2 - x^2 - y^2 - r^2 = 2 *r * (x * cos(a) + y * sin(a))   (1)

除以2*r 并重命名等式 p 的左侧(p 仅包含已知值)导致

p = x * cos(a) + y * sin(a) = SQRT(x * x + y * y) * sin(a + atan(x / y)) 

==>
a = asin(p /SQRT(x*x + y*y)) + atan(x / y)   (2)

让我们举一个例子,从您的绘图中获取近似值:

x = 5
y = -8
r = 4
s = 12

那么(1)将是

144 = 25 + 16 + 64 + 8 * (5 * cos(a) - 8 * sin(a))  ==>
39 / 8 = 5 * cos(a) - 8 * sin(a) = 

SQRT(25 + 64) * sin(a + atan(5 / -8)) ==>

0.5167 = sin(a + atan(5 / -8))

asin(0.5167) = a - 212°

asin(0.5167) 有两个值,第一个是 31.11°,第二个是 148.89°。这导致了以下两种解决方案: a1 = 243.11° a2 = 360.89° 或取该值取模 360° ==> 0.89°


我刚刚使用余弦定律找到了一个更简单的解决方案:

c * c = a * a + b * b - 2ab * cos(gamma)

你得到一个由三个点定义的三角形:两个圆的中心点和黑色圆上的交点。所有三个边的长度都是已知的。

所以我们得到:

cos(gamma) = (a * a + b * b - c * c) / 2ab

如果我们选择橙色圆圈中心的角度为伽马,我们得到

  • a = sqrt(89) = 9.434(两个圆心之间的距离)

  • b = 12(橙色圆心与相交点的距离

  • c = 4(黑圈半径)

使用这个值,我们得到:

cos(gamma) = (89 + 144 - 16) / (2 * sqrt(89) * 12) = 0.9584

gamma = acos(0.9584) = +/- 16.581°

'

【讨论】:

  • 我从来没有想过要使用角度,很好的思考。我不确定究竟是什么。你说交点的角度,但用什么? y轴?
  • 角度 a 位于 x 轴和半径之间(如数学中通常定义的那样)。当 a 增加时,半径逆时针旋转。这个角度与黑色圆圈的中心一起定义了圆和线之间的交点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2017-01-18
相关资源
最近更新 更多