java計算兩條線段交點

來源:互聯網
上載者:User

標籤: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計算兩條線段交點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.