首页 > 其他分享 >【计算几何】极角排序

【计算几何】极角排序

时间:2023-01-13 11:58:33浏览次数:36  
标签:return point double atan2 极角 几何 排序

前置知识

三角函数。

引文

给定一个中心点 \(O\) 与 \(n\) 个点,求按点与 \(O\) 的连线与 \(x\) 轴的夹角排序后的点对。

正文

显而易见,不论我们如何移动 \(O\) 点,

点对都是不变的,所以,化难为简,索性将 \(O\) 点直接移动到原点上,

然后同过三角函数,我们可以算出这个角度,

直接调用 \(tan\) 的反函数 \(atan\) (备注: \(atan\) 或许精度更加准确),求出角度,

然后根据角度进行排序。

代码

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;
}

标签:return,point,double,atan2,极角,几何,排序
From: https://www.cnblogs.com/Sengyi/p/17049173.html

相关文章

  • 【数据结构与算法】排序算法(Go实现)
    基础排序算法插入排序funcInsertSort(nums[]int){fori:=1;i<len(nums);i++{val:=nums[i]j:=iforj>0&&nums[j-1]>......
  • 用指针数组的形式来比较两个有序数组数据与排序方式是否完全相同
    1#include<iostream>2#include<vector>3usingnamespacestd;4intmain()5{6inta[5]={1,2,3,4,5};//定义两个数组7intb[5]={1,2......
  • 什么是希尔排序?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师JdreamZhang希尔排序(ShellSort),是计算机科学与技术领域中较为简单的一种排序算法。......
  • 【计算几何】基础知识
    前置知识点(1)pi=acos(-1);(2)余弦定理c^2=a^2+b^2-2abcos(t)浮点数的比较constdoubleeps=1e-8;intsign(doublex)//符号函数{if(fabs(x)......
  • Cesium 几何编辑
    最近做了个Cesium几何编辑的功能,通过鼠标画点线面等,记录一下问题感兴趣的朋友可以移步:LiZzhi/cesium-plugin(github.com)功能本身不难,无非就是封装鼠标事件,记录好数据,随......
  • Python实现希尔排序、快速排序、归并排序
    快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchangesort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都......
  • elasticsearch实现简单的脚本排序(script sort)
    目录1、背景2、分析3、构建数据3.1mapping3.2插入数据4、实现4.1根据省升序排序4.1.1dsl4.1.2运行结果4.2湖北省排第一4.2.1dsl4.2.2运行结果4.3湖北省排第一,其余......
  • Redis-独立功能-排序
    排序Redis的SORT命令可以对列表键、集合键或者有序集合键的值进行排序。如果按照选项来划分的话,一个SORT命令的执行过程可以分为以下几步:1)排序:在这一步,命令会使用ALPHA......
  • LeetCode刷题(7)~删除排序数组中的重复项
    题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用......
  • 【计算几何】浅谈凸包Andrew算法
    前置知识基础计算几何定义。引文这样一个问题,有许多个杆子,需要用绳子围住所有的杆子,然鹅没有很多的绳子,求最短需要多少绳子。整个图大概是这样的,正文我们要如何解......