这个问题有点具体。为简单起见,假设我有一个单位圆,即一个以原点 (0,0) 为中心、半径为 1 的圆。在这个圆上我有三个点:A、B 和 C。假设 B 和 C 是固定的,并且A 可以沿着圆的圆周移动。
问题:我可以有效检查哪些条件以确保 A 不会移出 B 和 C 之间最初包含它的弧线?
作为一个澄清点:我不只是希望检测该点是否在这条弧上(即获得一个布尔值),而是希望有一个可量化的度量(例如距离),这样我就可以防止它不会被移到外面。你可以想象我的设置是这样的,将 A 点限制在红色弧线上:
以下是我迄今为止思考过的一些想法,但都没有成功:
答案 0 :(得分:2)
给定一个圆上的任意两点,在你的例子中 B
和 C
,当然有两个可能的弧。我们使用 A
在两个选项之间进行选择。你说你想阻止一个点,比如 D
,从这个弧线之外移动。我将这解释为我们想要一个函数,如果 D
位于由 BC
和 A
定义的弧上,则返回 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
是点积函数。
答案 1 :(得分:1)
取叉积 (A-B)x(A-C)。这将有一个非零分量,垂直于平面。该分量将平滑变化,当 A 在一个弧上时为正,在另一个弧上时为负,当它与 B 或 C 交叉时为零>.