【计算几何】极角排序
前置知识
三角函数。
引文
给定一个中心点 与 个点,求按点与 的连线与 轴的夹角排序后的点对。
正文
显而易见,不论我们如何移动 点,
点对都是不变的,所以,化难为简,索性将 点直接移动到原点上,
然后同过三角函数,我们可以算出这个角度,
直接调用 的反函数 (备注: 或许精度更加准确),求出角度,
然后根据角度进行排序。
代码
struct point { // 存储点
double x,y;
};
double cross(double x1,double y1,double x2,double y2){ // 计算叉积
return (x1 * y2 - x2 * y1);
}
double compare(point a,point b,point c){ // 计算极角
return cross((b.x - a.x), (b.y - a.y), (c.x - a.x), (c.y - a.y));
}
bool cmp1(point a,point b) {
if (atan2(a.y, a.x) != atan2(b.y, b.x)) {
return atan2(a.y, a.x) < atan2(b.y, b.x);
}
else return a.x<b.x;
}
本文作者:SenGYiの小屋
本文链接:https://www.cnblogs.com/Sengyi/p/17049173.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步