【问题标题】:Restricting a point to an arc on a circle's circumference将点限制为圆周上的弧
【发布时间】:2021-05-08 21:21:23
【问题描述】:

这个问题有点具体。为简单起见,假设我有一个单位圆,即以原点 (0,0) 为中心,半径为 1 的圆。在这个圆上,我有三个点:A、B 和 C。假设 B 和 C 是固定的,并且A 可以沿圆的圆周移动。

问题:我可以有效检查哪些条件以确保 A 不会移出 B 和 C 之间最初包含它的弧?

澄清一点:我不仅希望检测该点是否在此弧上(即,得到一个布尔值),而且希望有一个可量化的度量(例如,距离),这样我就可以防止它不会被移到外面。你可以想象我的设置是这样的,将 A 点限制为红色弧线:

以下是我迄今为止思考过的一些想法,但没有一个成功:

  • 将 A = [cos(alpha),sin(alpha)] 的角度 alpha 限制在 B=[cos(beta),sin(beta)] 和 C=[cos( gamma),sin(gamma)],其中 alpha、beta 和 gamma 是以弧度为单位的角度。不幸的是,这种幼稚的案例仅适用于上述情况(a)。如果 A 被限制的弧与 +pi/-pi 的(在我的情况下是西方的)不连续点相交,那么简单的上限和下限将无法实现。
  • 计算 A 到 B 和 A 到 C 之间的弧的长度,然后确保随着 A 的移动,这个总和不会改变。不幸的是,我只找到this solution 来计算两点之间的弧线,而且它总是计算较短的弧线。然而,在场景 (c) 中,正确的弧 A 到 B 是较大的弧。

【问题讨论】:

  • 错误的论坛,这应该属于 math.stackexchange :) 我也不明白你的问题,试着真正指出你所追求的。你有两点 B 和 C,它们是固定的。那你想对A做什么?它是给定的,还是你试图计算一个有效的 A,我不明白。

标签: math geometry


【解决方案1】:

给定圆上的任意两个点,在您的情况下BC,当然有两个可能的弧。我们使用A 在两个选项之间进行选择。你说你想阻止一个点,比如D,移动到这个弧之外。我将此解释为我们想要一个函数,如果D 位于BCA 定义的弧上,则返回D,否则返回BC,具体取决于更接近D

我们可以定义如下函数来实现这个方案:

def contstrainPoint(A, B, C, D)
  M = midpoint(B, C)
  If dot(MA, MD) >= 0 
    return D
  else if(dot(MB, MD) >= 0 
    return B
  else
    return C

其中M 是和弦的中点BCdot 是点积函数。

【讨论】:

    【解决方案2】:

    取叉积 (A-B)x(A-C)。这将有一个非零分量,垂直于平面。该分量将平滑变化,当 A 在一个弧上时为正,在另一弧上时为负,当它穿过 BC 时为零>.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2017-12-06
      • 1970-01-01
      相关资源
      最近更新 更多