convexHull实现

convexHull实现convexHull介绍思路代码convexHull介绍凸包(Convex Hull)是一个计算几何(图形学)中的概念。在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造.在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。用不严谨的话来讲,给定二维平面上的点集,凸包就是...
摘要由CSDN通过智能技术生成

convexHull实现

convexHull介绍

凸包(Convex Hull)问题表示如下:
在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造。
比较常用,也是实验中遇到的是二维平面上的凸包:给定平面上一个点集,凸包就是将最外围的点连接起来构成的凸多边形,它能包含点集中所有的点。可以想象成一条刚好包着所有点的橡皮圈。
在这里插入图片描述
注:这里对于边界的处理方法是舍弃位于边界(不包括顶点)上的点,如上图中的点9我们这里舍去,它不属于凸包,但它被凸包包围。

思路

首先选取横坐标最小的一个点,若有多个这样的点,选纵坐标最小(上图的红点)。然后对其余点进行遍历,以红点为极点,y轴正半轴方向为极轴,按照顺时针方向,计算其余点的角度。选取角度最小的点,加入一个点集。若有多个点角度相同,则计算红点到这些点的距离,选取距离最小的点加入该点集(9、10号点选10号),重复上述步骤,直到即将加入凸包的点为红点时结束循环,此时得到的点集即为凸包。

代码

calculateBearingToPoint

// 计算转向角度,以y轴正向为极坐标顺时针转动,角度限制在0~360°之间
public static double calculateBearingToPoint(double currentBearing, int currentX, int currentY,
                                                 int targetX, int targetY) {
   
        double X = targetX - currentX, Y = targetY - currentY , targetAngle ;
        
        if( X == 0 ) {
   
        	if( Y >= 0 )
        		targetAngle = - currentBearing;
        	else 
        		targetAngle =  180 - currentBearing;
        }
        else {
   
			if( X > 0 ) {
    
				if( Y >= 0 ) 
					targetAngle = 90 - currentBearing - 180 * Math.atan( Y/X ) / Math.PI ;
				
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值