1、判断斜率相同不,y2-y1/x2-x1,y4-y3/x4-x3,相同则无交点,不相同说明直线有交点则执行第二步;
2、设y=ax+b,通过斜率可求出a的值,通过坐标可以求出b的值,这样两个线段所在直线的两个方程式就得到了;
3、通过两个方程式求出交点,再判断交点是不是落在两线段交点的区域中
代码:public static Point getCrossPoint(Lseg lsegA,Lseg lsegB){
float x;
float y;
float x1=lsegA.getA().getX();
float y1=lsegA.getA().getY();
float x2=lsegA.getB().getX();
float y2=lsegA.getB().getY();
float x3=lsegB.getA().getX();
float y3=lsegB.getA().getY();
float x4=lsegB.getB().getX();
float y4=lsegB.getB().getY();
float k1=Float.MAX_VALUE;
float k2=Float.MAX_VALUE;
boolean flag1=false;
boolean flag2=false;
if((x1-x2)==0)
flag1=true;
if((x3-x4)==0)
flag2=true;
if(!flag1)
k1=(y1-y2)/(x1-x2);
if(!flag2)
k2=(y3-y4)/(x3-x4);
if(k1==k2)
return null;
if(flag1){
if(flag2)
return null;
x=x1;
if(k2==0){
y=y3;
}else{
y=k2*(x-x4)+y4;
}
}else if(flag2){
x=x3;
if(k1==0){
y=y1;
}else{
y=k1*(x-x2)+y2;
}
}else{
if(k1==0){
y=y1;
x=(y-y4)/k2+x4;
}else if(k2==0){
y=y3;
x=(y-y2)/k1+x2;
}else{
x=(k1*x2-k2*x4+y4-y2)/(k1-k2);
y=k1*(x-x2)+y2;
}
}
if(between(x1,x2,x)&&between(y1,y2,y)&&between(x3,x4,x)&&between(y3,y4,y)){
Point point=new Point();
point.setX(x);
point.setY(y);
if(point.equals(lsegA.getA())||point.equals(lsegA.getB()))
return null;
return point;
}else{
return null;
}
}
public static boolean between(float a,float b,float target){
if(target>=a-0.01&&target<=b+0.01||target<=a+0.01&&target>=b-0.01)
return true;
else
return false;
}}