zoukankan      html  css  js  c++  java
  • Javis March算法

    学堂在线课程《计算几何》

    模板:

     Jarvis March算法算法的复杂度更准确的表示为O(nh)h又由最终输出结果,即凸包本身来决定,输出结果决定了构造过程的复杂度,这就是所谓的“输出敏感性”。这种类型的算法又被称为output sensitive algorithm。这种特性在其它凸包算法中也会体现

     1 struct Point{
     2     double x,y;
     3     bool extreme;
     4     int succ;
     5 }P[maxn];
     6 int ltl;
     7 
     8 bool Toleft(Point p, Point q, Point s){
     9     int area2 = p.x*q.y - p.y*q.x
    10                 + q.x*s.y - q.y*s.x
    11                 + s.x*p.y - s.y*p.x;
    12     return area2>0;///左侧为真
    13 }
    14 
    15 int LTL(Point P[], int n){///LTL:lowest-then-leftmost point,找到第一个极点
    16     int ltl=0;
    17     for(int k=1;k<n;k++){
    18         if( P[k].y<P[ltl].y || (P[k].y==P[ltl].y && P[k].x<P[ltl].x)){
    19             ltl=k;
    20         }
    21     }
    22     return ltl;
    23 }
    24 
    25 double dis(int i,int j){
    26     double xx=P[i].x-P[j].x;
    27     double yy=P[i].y-P[j].y;
    28     return sqrt(xx*xx+yy*yy);
    29 }
    30 
    31 void Jarvis(Point P[], int n){
    32     for(int k=0;k<n; k++){
    33         P[k].extreme = false;    ///首先将所有点标记为非极点
    34     }
    35     ltl=LTL(P,n);               ///找到tlt
    36     int k=ltl;                  ///将tlt作为第一个极点
    37     do{
    38         P[k].extreme=true;      ///判定为极点
    39         int s=-1;
    40         
    41         ///选取下一个极点,每次比较两个点s,t
    42         ///做点t和有向边ks 的to_left_test,最终找到s
    43         for(int t=0;t<n;t++){
    44             ///除了k和s外每个点,如果t在s右边
    45             if( t!=k && t!=s && (s==-1 || Toleft(P[k],P[s],P[t]))){
    46                 s=t;
    47             }
    48         }
    49         ///k点的后继为s
    50         ///s变为下一次查找的起点
    51         P[k].succ = s;
    52         k=s;
    53     }while(ltl!=k);
    54 }
  • 相关阅读:
    Redis原理篇
    Redis基础
    CentOS7 Redis5.0.5环境搭建
    通用后台管理系统(10)项目打包、修改配置文件、项目开源地址
    通用后台管理系统(9)-编写首页接口、实现、控制器
    通用后台管理系统(8)-编写登入控制器
    生成常用的msf
    badusb资料收集
    后渗透之meterpreter攻略
    linux命令备忘录
  • 原文地址:https://www.cnblogs.com/wsy107316/p/12256852.html
Copyright © 2011-2022 走看看