凸壳算法1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

离散点集多层凸壳嵌套的建立算法
任务:1。

逐步生成多层凸壳嵌套
2.用坐标比较法消去外层凸壳坐标点
算法:基于纵横坐标极值点的逐次迭代法.极值点肯定是凸点。

一、生成离散点数据:{x i,y i}
二、求横坐标极值点:A(x a,y a),B (x b,y b)
三、形成初始凸壳(二边形:退化三角形)△ABA,凸壳点数Np=3
XT(1)=Xa XT(2)=Xb XT(3)=Xa ; YT(1)=Ya YT(2)=Yb YT(3)=Ya
四、初始凸壳边数 IDO=Np-1
五、新凸壳生成过程:
新增凸壳点初值: iplus=0
DO 1000 I=1, IDO 为每条边探测其可能的新凸壳点
1.把每条边看作向量,求其右侧最远距离点
DMAX=0 IYES=0
2.DO 500 J=1,N
在其前进方向的外(右)侧查找法向最大距离点:
(1)用矢向量叉积判定点在一直线的左侧或右侧;
最大距离点的搜索范围: ((X(J)-XT(I))*(X(J)-XT(I+1))<=0
当前边前进方向右侧的判断:
S=(X(J)-XT(I))*(YT(I+1)-YT(I))-(Y(J)-YT(I))*(XT(I+1)-XT(I))
若 S>0 则计算第J 点到第I 边的距离;
IYES=1
(2) 求外侧点到一已知直线的距离,并从中取其最大者。

有六种计算离的方法:
A. 解析几何中点到直线的距离公式;
B. 将坐标原点移到当前边的起点A,并将横轴旋转使之与当前边方向重合,这
时点到该直线的距离就是该点的纵坐标值:
D=Y’=-(X(J)-Xa)SINα +(Y(J)-Ya)COSα
C. 根据矢量的点积(内积)计算点P到直线AB的距离:
ACOSα=(ax.bx+ay.by)/(|a|.|b|)
D=|AP|.SINα
D. 利用点在直线上的垂足 D:
此处 K=(ax.bx+ay.by)/(ax2+ay2)
E.利用两矢量的叉积为一平行四边形的面积S,有 d=|S/AB|
F.直线的法线式方程:
XCOSβ+YSINβ-p=0
将坐标原点移到P点:
(X-Xp)COSβ+(Y-Yp)SINβ
因为α=π/2-β
故 d=-(X-Xp)SINα+(Y-Yp)COSα
若 d > DMAX 则
JJ=J (记下最大距离点的点号)
DMAX=d
500CONTINUE
3.若存在最大距离点( IYES=1 ),则把该点记入专用数组并记下该点所相关的边号。

iplus=iplus+1
IARRAY(iplus)=I 新增凸点所在边号
XW(iplus)=X(JJ)
YW(iplus)=Y(JJ) 新增凸点坐标
1000 CONTINUE
当 iplus > 0 时,把每个新增凸壳点插入到相关边的两个坐标点之间。

DO 1100 I=1,iplus
IAD=IARRAY(I)+I 新增凸点应插入的位置:所在边号加动态新增点数
DO 1050 J=Np,IAD,-1
XT(J+1)=XT(J); YT(J+1)=YT(J) 从多边形末点起到新增点位作逐点后移
1050CONTINUE
XT(IAD)=XW(I); YT(IAD)=YW(I) ; Np=Np+1
1100 CONTINUE
GOTO 四。

相关文档
最新文档