将点限制为圆圆周上的弧

时间:2021-05-08 21:21:23

标签: math geometry

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

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

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

enter image description here

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

  • 将 A 的角 alpha = [cos(alpha),sin(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 是较大的弧。

2 个答案:

答案 0 :(得分:2)

给定一个圆上的任意两点,在你的例子中 BC,当然有两个可能的弧。我们使用 A 在两个选项之间进行选择。你说你想阻止一个点,比如 D,从这个弧线之外移动。我将这解释为我们想要一个函数,如果 D 位于由 BCA 定义的弧上,则返回 D,否则返回 {{ 1}} 或 B,取决于哪个更接近 C

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

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 的中点,BC 是点积函数。

enter image description here

答案 1 :(得分:1)

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

相关问题