algorithm - 从三个点/角度中识别弧的起点和终点

标签 algorithm sorting geometry geometric-arc

我知道圆上有三个点,分别代表圆弧的起点、中间和终点( amb )。我还使用 atan2(y,x) 从正 X 轴沿逆时针方向计算这些点的角度。从中心到点的三个向量,所以我们有 -pi < theta < pi

我也知道哪个点是m ,我想知道的是 a 中的哪一个和b是圆弧的顺时针终点。

我可以看到点有 8 种排列方式:

"East"       "West"     "East"
0          -pi | pi        0
---------------+-------------   
       a  m  b |           
          a  m | b         
             a | m  b 
               | a  m  b


       b  m  a |
          b  m | a
             b | m  a
               | b  m  a

其中前四个有 a作为“结束”和 b因为“开始”和后四个是相反的。请记住,有关的订单可以在 0 处环绕并出现在右侧或左侧,因此符号没有帮助。

有没有一种简洁的方法来确定哪个是起点,哪个是终点?除了在一个大而密集的 if/else-if block 中费力地检查 8 个选项中每个选项之间的相对值之外,就是这样。

实现语言是Python,但这不是特定于语言的问题!

最佳答案

如果m位于从ab有向线段的左侧,则a是逆时针末端;否则为顺时针结束。

也就是说,取向量ab的左垂线,并求其与am的点积。如果点积为正,a 就是 CCW 端点。

顺便说一句,处理角度最简洁的方法是避免使用它们。一周中的任何一天,向量和线性代数都超出了角度和三角学的范畴。

关于algorithm - 从三个点/角度中识别弧的起点和终点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269089/

相关文章:

Javascript 排序 - 奇怪的行为,知道吗?

java - 对字符串中的一些单词进行排序

c - 如何在不更改 C 中原始数组的情况下对指针数组进行排序

c# - 检测鼠标是否以圆周方式移动

algorithm - 如何阻止贝塞尔样条曲线超出坐标轴?

python - 寻找更好的遗传算法评价方法

python - 如何在python中找到矩形交点?

c++ - 在 C++ 中的对角线上绘制圆圈

algorithm - 一个可以使 CPU 饱和的程序的简单想法

java - 调试 : Mergesort