点到线段的垂足距离

/**
	 * 获取已知点到线段的垂足距离
	 * @param x 已知点X坐标
	 * @param y 已知点Y坐标
	 * @param startx 线段开始点X坐标
	 * @param starty 线段开始点Y坐标
	 * @param endx 线段结束点X坐标
	 * @param endy 线段结束点Y坐标
	 * @param outx
	 * @param outy
	 * @return
	 */
	public double getVerticalDistance(double x, double y, double startx, double starty, double endx, double endy, double outx, double outy)
	{
	
		//PS: 点到线段的最短距离则需要比较垂足是否在线段上or线段的延长线上

		double minx = startx > endx ? endx:startx;
		double maxx = startx > endx ? startx:endx;
		double miny = starty > endy ? endy:starty;
		double maxy = starty > endy ? starty:endy;
		if( outx<maxx && outx>minx && outy<maxy && outy>miny )
		{
			return (x-outx)*(x-outx)+(y-outy)*(y-outy);
		}
		else
		{
			double ds = (startx -x)*(startx - x)+(starty - y)*(starty-y);
			double de = (endx - x)*(endx -x)+(endy - y)*(endy-y);
			if( ds < de )
			{
				outx = startx;
				outy = starty;
				return ds;
			}
			else
			{
				outx = endx;
				outy = endy;
				return de;
			}
		}
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值