极角排序
简单讲一下极角排序。
我们对于极角排序,就是以x轴为始边,然后到当前点所在的终边,以原点为顶点所形成的角来排序。第二关键字按照到原点的距离。
tan2极角排序
我们把坐标放入 就可以得到极角了。返回的范围是
其中c是我们想要以其为中心进行极角排序的点,下同。
inline bool cmp(point x,point y){
db ax=tan2(x.y-c.y,x.x-c.x),ay=tan2(y.y-c.y,y.x-c.x);
if(sgn(ax-ay)==0) return x.x<y.x;
return ax<ay;
}
叉积极角排序
由于我们知道叉积可以判断两向量的顺逆时针的位置关系,所以可以用于极角排序。
其中 与 的叉积若小于0,那么 一定在 的顺时针方向(右边)。
但是应当先比较象限
inline bool cmp(point x,point y){
if(((x.y - Base.y) < 0) != ((y.y - Base.y) < 0) )
return ((x.y - Base.y) < 0) < ((y.y - Base.y) < 0);
db ax = (x - Base) * (y - Base);
if(sgn(ax) == 0) return dist(x, Base) < dist (y, Base);
return ax > 0;
}
然后我们不难发现两者的区别,用tan2需要进行的运算次数少,所以相对快。而叉积拥有更加优秀的精度。视情况选择。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具