将点限制为圆周上的弧

Restricting a point to an arc on a circle's circumference

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

问题:我可以有效地检查什么条件来确保A不被移动到B和C之间原来包含它的圆弧之外?

澄清一点:我不只是想检测点是否在这条弧上(即,得到一个布尔值),而是要有一个可量化的度量(例如,距离)所以我可以防止它被移到外面。你可以想象我的设置是这样的,将 A 点限制在红色圆弧内:

以下是我目前考虑过的一些想法,但 none 成功了:

给定圆上的任意两个点,在您的例子中 BC,当然有两条可能的弧。我们在两个选项之间使用 A 到 select。你说你想阻止一个点,比如 D,移动到这个弧线之外。我将其解释为我们想要一个函数,如果 D 位于 BCA、returns D 定义的弧上,否则它 returns 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是点积函数。

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