//计算点到线段的距离
public double pointToLine(Vector2 point,LineBase line)
{
//距离
double distance =0;
//线段的起点与终点
Vector2 start = new Vector2(line.startpoint.x,line.startpoint.z);
Vector2 end = new Vector2(line.endpoint.x,line.endpoint.z);
//点到起点的距离
double startlength = Vector2.Distance(point,start);
//点到终点的距离
double endlength = Vector2.Distance(point,enf);
//线段的长度
double length = Vector2.Distance(start,end);
//点到线端两端的距离很小
if(startlength <= 0.00001 || endlength < 0.00001 )
{
distance =0;
return distance;
}
//如果线段很短
if(length < 0.00001)
{
distance = startlength;
return distance;
}
//如果在线段延长线的两边
if(startlength *startlength >= length*length + endlength *endlength )
{
distance = endlength;
return distance;
}
if(length*length +startlength *startlength <= endlength *endlength )
{
distance = startlength ;
return distance;
}
//最后利用三角形的面积求高(点到垂足的距离)
double p = (length+startlength+endlength )/2;
//求三角形面积
double area = Math.Sqrt(p*(p-endlength)*(p-startlength)*(p-length));
distance = 2*area/length;
return distance;
}
c# 计算点到线段的距离
最新推荐文章于 2022-11-25 10:15:37 发布