/**
* 获取已知点到线段的垂足距离
* @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;
}
}
}
点到线段的垂足距离
最新推荐文章于 2023-06-19 21:38:52 发布