標籤:java 兩線段交點
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;elsereturn false;}}
java計算兩條線段交點