判断两条线是否相交

//判断两条线段是否相交,线段1的两端坐标:point、point2 线段2的两端坐标:linePoint1、linePoint2
function isPointInLine(point,point2,linePoint1,linePoint2){
//判断两条线是否平行或者共线
var denominator = (point.y-point2.y)*(linePoint1.x-linePoint2.x)-(point2.x-point.x)*(linePoint2.y-linePoint1.y);
if(denominator==0)
return false;
//获取两条线延伸后的交点坐标
var x = ((point.x-point2.x)*(linePoint1.x-linePoint2.x)*(linePoint2.y-point2.y)+
(point.y-point2.y)*(linePoint1.x-linePoint2.x)*point2.x-(linePoint1.y-linePoint2.y)*(point.x-point2.x)*linePoint2.x)/denominator;
var y = -((point.y-point2.y)*(linePoint1.y-linePoint2.y)*(linePoint2.x-point2.x)+
(point.x-point2.x)*(linePoint1.y-linePoint2.y)*point2.y-(linePoint1.x-linePoint2.x)*(point.y-point2.y)*linePoint2.y)/denominator;
//判断交点是否在线段上
if((x-point2.x)*(x-point.x)<=0 && (y-point2.y)*(y-point.y)<=0 && (x-linePoint2.x)*(x-linePoint1.x)<=0 && (y-linePoint2.y)*(y-linePoint1.y)<=0)
return {x:x,y:y}
return false;
}
function isPointInPolygon(point,poly1){
var temppoly = poly1.split(",");
var poly = new Array();
for(var i = 0;i<temppoly.length/2;i++){
poly[i] = {x:temppoly[i*2],y:temppoly[i*2+1]};
}
//是否点在多边形里
var re=true;
if(poly.length>3){
var crossNum=0;
var point2 = {x:(poly[0].x-poly[1].x)/2,y:(poly[0].y-poly[1].y)/2}
for(var i=1;i<poly.length;i++){
if(i==poly.length-1){
if(isPointInLine(point,point2,poly[i],poly[0])){
crossNum++;
}
}else{
if(isPointInLine(point,point2,poly[i],poly[i+1])){
crossNum++;
}
}
}
if((crossNum % 2)==0){
re=false;
}
}
return re;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值