我有一个 2D 点列表 (x1,y1),(x2,y2)......(Xn,Yn) 代表一个曲线段,是否有任何公式可以确定绘制该段的方向是顺时针还是逆时针?

任何帮助表示赞赏

最佳答案

一种可能的方法。如果由您的点列表表示的线的采样足够均匀和平滑,并且线足够简单,它应该可以很好地工作。

  • 减去平均值以“居中”线。
  • 转换为极坐标得到角度。
  • 展开角度,以确保其增量有意义。
  • 检查总增量是正还是负。

  • 我假设你有 xy 向量中的数据。
    theta = cart2pol(x-mean(x), y-mean(y)); %// steps 1 and 2
    theta = unwrap(theta); %// step 3
    clockwise = theta(end)<theta(1); %// step 4. Gives 1 if CW, 0 if ACW
    

    这仅考虑了所有点的综合作用。它不会告诉您是否存在“扭结”或沿途转弯方向不同的部分。

    一种可能的改进是用某种积分替换 xy 的平均值。原因是:如果一个区域中的采样更密集,则平均值将偏向于此,而积分则不会。

    关于algorithm - 判断线段的方向是顺时针还是逆时针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25252664/

    10-11 11:01