给定一个封闭图形的点坐标,如何判断这些点的顺序是顺时针还是逆时针,可以通过编程实现。

如题所述

1点坐标顺序存储,每个点横坐标x,纵坐标y
2选择头一个点坐标A
3选择后面的一个坐标,计算与A的坐标差,x坐标相差X1,y坐标相差Y1
4如果得到的|X1|>0且|Y1|>0,也就是说X和Y都不等于0时进行第5步,否则返回第3步。通过这步找到A后面距离A足够远,并与A不在同一条水平线或同一条垂直线上的后续点B。
判断B与A的关系,即B处在以A为原点坐标系的哪个象限:第I象限=X1>0且Y1<0,第II象限=X1<0且Y1<0,第III象限=X1<0且Y1>0,第VI象限=X1>0且Y1>0,得到象限号P1
7判断C与B的关系,得到象限号P2
5再找到B后面的相似条件的后续点C,得到X2和Y2,即C是B后面与B坐标均不在同一水平或垂直线上的点,并求P2
6如果P2=P1,即象限相同则返回5再找到新的C,直到P2不等于P1进行第7步
7比较P1和P2的关系得到结果:
-顺时针:P1=1且P2=4,或者,P1=2且P2=1,或者,P1=3且P2=2,或者,P1=4且P2=3
-否则即逆时针:P1=1且P2=2,或者,P1=2且P2=3,或者,P1=3且P2=4,或者,P1=4且P2=1
简单描述这个算法,就是找到坐标中不在直线上的顺序3个点,然后判断第3点向左拐弯还是向右拐弯,向左拐逆时针,向右拐顺时针
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-22

如下代码(C)判断从A到B是否是逆时针方向,顺时针同理。

bool Left(Point A, Point B) {
  return A.x * B.y - A.y * B.x >= 0;
}

参考资料:《算法竞赛入门经典》

相似回答