java 点与线的距离_点与线段之间的最短距离

这是为有限线段而做的实现,而不是像这里的大多数其他函数那样的无限行(这就是我做这个的原因)。

Python:def dist(x1, y1, x2, y2, x3, y3): # x3,y3 is the point

px = x2-x1

py = y2-y1

norm = px*px + py*py

u =  ((x3 - x1) * px + (y3 - y1) * py) / float(norm)

if u > 1:

u = 1

elif u 

u = 0

x = x1 + u * px

y = y1 + u * py

dx = x - x3

dy = y - y3    # Note: If the actual distance does not matter,

# if you only want to compare what this function

# returns to other results of this function, you

# can just return the squared distance instead

# (i.e. remove the sqrt) to gain a little performance

dist = (dx*dx + dy*dy)**.5

return dist

AS 3:public static function segmentDistToPoint(segA:Point, segB:Point, p:Point):Number{

var p2:Point = new Point(segB.x - segA.x, segB.y - segA.y);

var something:Number = p2.x*p2.x + p2.y*p2.y;

var u:Number = ((p.x - segA.x) * p2.x + (p.y - segA.y) * p2.y) / something;

if (u > 1)

u = 1;

else if (u 

u = 0;

var x:Number = segA.x + u * p2.x;

var y:Number = segA.y + u * p2.y;

var dx:Number = x - p.x;

var dy:Number = y - p.y;

var dist:Number = Math.sqrt(dx*dx + dy*dy);

return dist;}

爪哇private double shortestDistance(float x1,float y1,float x2,float y2,float x3,float y3)

{

float px=x2-x1;

float py=y2-y1;

float temp=(px*px)+(py*py);

float u=((x3 - x1) * px + (y3 - y1) * py) / (temp);

if(u>1){

u=1;

}

else if(u<0){

u=0;

}

float x = x1 + u * px;

float y = y1 + u * py;

float dx = x - x3;

float dy = y - y3;

double dist = Math.sqrt(dx*dx + dy*dy);

return dist;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值