凸包问题(果园篱笆)_第1页
凸包问题(果园篱笆)_第2页
凸包问题(果园篱笆)_第3页
凸包问题(果园篱笆)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#include定义存储struct Point /点坐标的结构举止PS x;int y;因为在struct Dj /算法执行中把中间过程的点的集合存储在链表中,所以在此定义具有另一个后续指针的点坐标的构造体。举止PS x;int y;struct Dj* next;struct Dj Phead; /最终将凸包的各顶点保存在一个链表中,在此定义该链表的开头节点结构DJ pend; /上述链表的末尾节点void fz(struct Point pmin,struct Point pmax,struct Dj* P) /分治法的反复算法函数,三个参数分别是线段的两个端点和应判断的点的集合举止PK (PS!=NULL) /判断点集是否为空举止int mid=0; /定义点距线段的最远距离struct Dj* no; /定义存储要处理的点的集合结构点pmid; /定义最远的点pmid.x=(*P).x; pmid.y=(*P).y; /初始化最远的点struct Dj* Pl=NULL,* Pr=NULL; /初始化以下迭代的两个点集struct Dj* Pln=NULL,* Prn=NULL; /初始化存储下一次迭代的两个点集的当前位置mid=-(pmax.y-pmin.y ) * pmid.x-(pmax.x-pmin.x ) * pmid.y-pmax.y * pmin.y * pmax.x; /从初始化点到线段的最远距离no=(*P).next; /初始化存储要处理点的集合int n=1;PS (否!=NULL) /更新最远距离和最远距离的点举止n;if (-(pmax.y-pmin.y ) * (* no ).x-(pmax.x-pmin.x ) * (* no ).y-pmax.y * pmin.y * pmax.x ) mid )举止mid=-(pmax.y-pmin.y ) * (* no ).x-(pmax.x-pmin.x ) * (* no ).y-pmax.y * pmin.y * pmax.x );pmid.x=(*否).x; pmid.y=(*否).y;以下no=(*no).next;以下打印( % s % d % s % s % s ,(、 pmid.x,、pmid.y,),; /输出最远距离的点no=P;struct Dj no150;int i=0;PS (否!=NULL) /将最远距离点的两侧的点分别放入点集中举止no1i=*no;no1i.next=NULL;if (pmid.y-pmin.y ) * no1 I .x-(pmid.x-pmin.x ) * no1 I .y-pmid.y * pmin.y * pmid.x0 )/在直线方程式的判定位置上带点举止PS (K=null )Pl=(no1i ); Pln=(no1i ); 以下else(*Pln).next=(no1i ); 以下以下else if (pmax.y-pmid.y ) * no1 I .x-(pmax.x-pmid.x ) * no1 I .y-pmax.y * pmid.x * pmid.y * pmax.x0 )/将点带入直线方程式的判定位置举止PS (PS=null )Pr=(no1i ); Prn=(no1i ); 以下else(*Prn).next=(no1i ); 以下以下no=(*no).next;I;以下重复以fz(pmin,pmid,Pl) /原始线段的左侧点和最远的距离点为线段的两个端点和左侧点集用线段的两个端点和右侧点集重复fz(pmid,pmax,Pr) /最远的距离点和原始线段的右侧点以下void main ()举止PS;printf (请输入点数: );扫描( % d ,n );printf (请输入各点: );结构点a 50 ; /定义大的数组,保证能安装所有的点int i=0;for(i=1; i=n; 依次输入i ) /点举止扫描( % d ,ai-1.x );扫描( % d ,ai-1.y );以下结构点pmax=a0,pmax=a0;for(i=1; ipmax.x )pmax=ai;以下Phead.x=pmin.x; Phead.y=pmin.y; Phead.next=NULL;Pend.x=pmax.x; Pend.y=pmax.y; Pend.next=NULL; /把横轴的最大和最小的点放在最终的链表中Phead.next=Pend;struct Dj* Pup=NULL,* Pdown=NULL;struct Dj* Pupn=NULL,* Pdownn=NULL; /初始化横轴的最大和最小点构成线段的上侧和下侧两个点集struct Dj mid50;for(i=0; i0) /向下方的点集添加点举止if (Pdown=NULL )举止Pdown=(midi );PDO WNN=(PS I );以下else(*Pdownn).next=(midi );PDO WNN=(PS I ); 以下以下以下printf (构成凸包的顶点分别为: );打印( % s % d % s % s % s , (.pmin.x,pmin.y,),;打印( % s % d %

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论