




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、兩條線段是否相交,計算交點公式。A 本身無限長,假設(shè)B 也無限長,直接求得AB 的交點坐標,然后再判斷該坐標是否在定長線段B 的內(nèi)部就可以了啊 AB 本身就是兩條直線, 知道兩端點就可以知道其直線方程, B 也是一樣,兩個方程聯(lián)立,得到一個坐標, 再看該坐標是否在B 的定義域內(nèi)就可以啊A 的兩點為 (x1,y1),(x2,y2)則 A 的直線方程為 l1:y-y1=(y2-y1)(x-x1)/(x2-x1)B 的兩點為 (x3,y3),(x4,y4)則 B 的直線方程為 l2:y-y3=(y4-y3)(x-x3)/(x4-x3)聯(lián)立解出交點坐標為的橫坐標為:x=(k2x3-y3-k1x1+y1
2、)/(k2-k1)其中 k1=(y2-y1)/(x2-x1)k2=(y4-y3)/(x4-x3)可以推導出來x = (x2 - x1) * (x3 - x4) * (y3 - y1) -x3 * (x2 - x1) * (y3 - y4) + x1 * (y2 - y1) * (x3 -x4) /(y2 - y1) * (x3 - x4) - (x2 - x1) * (y3 - y4); 同理也可以推導出 y 的值:y = (y2 - y1) * (y3 - y4) * (x3 - x1) -y3 * (y2 - y1) * (x3 - x4) + y1 * (x2 - x1) * (y3 -
3、y4) /(y2 - y1) * (y3 - y4) - (y2 - y1) * (x3 - x4);總結(jié):/第一條直線double x1 = 10, y1 = 20, x2 = 100, y2 = 200;double a = (y1 - y2) / (x1 - x2);double b = (x1 * y2 - x2 * y1)/ (x1 - x2);System.out.println( 求出該直線方程為 : y= + a +x + + b);/第二條double x3 = 50, y3 = 20, x4 = 20, y4= 100;double c = (y3 - y4) / (x3
4、- x4);double d = (x3 * y4 -x4 * y3) / (x3 - x4);System.out.println( 求出該直線方程為 :y= + c + x + + d);double x = (x1 - x2) * (x3 * y4 - x4 *y3) - (x3- x4) * (x1* y2 - x2 * y1)/ (x3 - x4) * (y1 -y2) - (x1- x2) * (y3- y4);double y = (y1 - y2) * (x3 * y4- x4 * y3) - (x1 * y2- x2 * y1) * (y3 - y4)/ (y1 - y2)
5、*(x3 - x4)- (x1 - x2) * (y3 - y4);System.out.println( 他們的交點為 : ( + x + , + y + );*下面附上 java 的實現(xiàn),前提是: a 線段 1 起點坐標b 線段 1 終點坐標c 線段 2 起點坐標d 線段 2 終點坐標Java 代碼import java.awt.Point;public classAlgorithmUtil public static void main(String args)AlgorithmUtil.GetIntersection(new Point(1, 2),new Point(1, 2),ne
6、w Point(1, 2), newPoint(1, 2);AlgorithmUtil.GetIntersection(newPoint(1, 2), new Point(1, 2),new Point(1,4), new Point(1, 4);AlgorithmUtil.GetIntersection(new Point(100, 1), newPoint(100, 100),new Point(100, 101), newPoint(100, 400);AlgorithmUtil.GetIntersection(new Point(5, 5), new Point(100,100),ne
7、w Point(100, 5), new Point(5,100);/* 判斷兩條線是否相交 a線段 1 起點坐標 b 線段 1 終點坐標 c 線段 2 起點坐標d 線段 2終點坐標intersection 相交點坐標* reutrn是否相交:0: 兩線平行 -1: 不平行且未相交1 : 兩線相交*/private static int GetIntersection(Point a, Point b,Point c, Point d) Point intersection = new Point(0,0);if (Math.abs(b.y - a.y) + Math.abs(b.x - a.
8、x) +Math.abs(d.y - c.y)+ Math.abs(d.x - c.x)=0)if (c.x - a.x) + (c.y - a.y) = 0)System.out.println(ABCD 是同一個點! ); elseSystem.out.println(AB 是一個點, CD是一個點,且AC 不同! );return 0;if (Math.abs(b.y - a.y) +Math.abs(b.x - a.x) = 0) if (a.x - d.x) * (c.y- d.y) - (a.y - d.y) * (c.x - d.x) = 0)System.out.println
9、(A 、B 是一個點, 且在 CD 線段上! ); elseSystem.out.println(A 、B 是一個點, 且不在 CD 線段上! );return0;if (Math.abs(d.y - c.y) +Math.abs(d.x - c.x) = 0) if (d.x - b.x) * (a.y- b.y) - (d.y - b.y) * (a.x - b.x) = 0)System.out.println(C 、D 是一個點, 且在 AB 線段上! ); elseSystem.out.println(C 、D 是一個點, 且不在 AB 線段上! );return0;if (b.y
10、- a.y) * (c.x - d.x) - (b.x -a.x) * (c.y - d.y) = 0) System.out.println(線段平行,無交點! );return 0;intersection.x = (b.x - a.x) * (c.x - d.x) * (c.y - a.y) -c.x * (b.x - a.x) * (c.y - d.y) + a.x * (b.y - a.y) * (c.x - d.x) / (b.y - a.y) * (c.x - d.x) - (b.x - a.x) * (c.y - d.y); intersection.y = (b.y - a.
11、y) * (c.y - d.y) * (c.x - a.x) - c.y* (b.y - a.y) * (c.x - d.x) + a.y * (b.x - a.x) * (c.y - d.y) / (b.x - a.x) * (c.y - d.y) - (b.y - a.y) * (c.x - d.x);if (intersection.x - a.x) * (intersection.x - b.x) <= 0 && (intersection.x - c.x) * (intersection.x - d.x) <=0&& (intersecti
12、on.y - a.y) *(intersection.y - b.y) <= 0&&(intersection.y - c.y) * (intersection.y - d.y) <= 0)System.out.println( 線段相交于點 ( + intersection.x + , + intersection.y + )! );return 1; / 相交 elseSystem.out.println(線段相交于虛交點( +intersection.x + , + intersection.y + )! );return -1; / 相交但不在線段上=下面是
13、找到的另外的一種方法=第二種方法 : 利用斜率公式 , 直線方程為ax+bx+c=0,先求出 a,b,c, 然后再求出交點 Java 代碼public static void main(String args) Point2D p1 = new Point2D.Double(10, 20); Point2D p2 = new Point2D.Double(100, 200); Point2D p3 = new Point2D.Double(50, 20); Point2D p4 = new Point2D.Double(20, 100); Param pm1 = CalParam(p1, p2
14、); Param pm2 = CalParam(p3, p4);System.out.println( 他們的交點為 : ( + rp.getX() + , +rp.getY() + );/* 計算兩點的直線方程的參數(shù)a,b,c* param p1* param p2* return*/publicstatic Param CalParam(Point2D p1, Point2D p2)doublea,b,c;double x1 = p1.getX(), y1 = p1.getY(), x2 =p2.getX(), y2 = p2.getY();a = y2 - y1;b = x1 - x2;
15、c = (x2 - x1) * y1 - (y2 - y1) * x1;if (b < 0)a *= -1; b *= -1; c *= -1;else if (b = 0&& a < 0) a *= -1; c *= -1;return new Param(a, b, c);/*計算兩條直線的交點 * param pm1* param pm2* return*/publicstatic Point2D getIntersectPoint(Param pm1, Parampm2)return getIntersectPoint(pm1.a, pm1.b, pm1.c,pm2.a, pm2.b, pm2.c);public static Point2DgetIntersectPoint(double a1, double b1, double c1, double a2,double b2, double c2)Point2D p = null;double m= a1 * b2 - a2 * b1;if (m = 0) returnnull;double x = (c2 * b1 - c1 * b2) / m;double
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司股權(quán)轉(zhuǎn)讓代持協(xié)議
- 餐飲行業(yè)食品安全承諾免責協(xié)議
- 養(yǎng)殖場土地租賃合同
- 建設(shè)工程三方合同
- 軟件著作權(quán)授權(quán)許可及合作合同
- 股份制企業(yè)的合作與發(fā)展策略方案
- 單位職工聘用合同
- 電影拍攝合作合同
- 聘請電影導演合同書
- 物業(yè)意向性合作協(xié)議
- 2025年中考語文模擬試卷(含答案解析)
- 2025版校園樂器銷售代理與服務(wù)協(xié)議3篇
- 2024-2025年天津河西區(qū)七年級上學期期末道德與法治試題(含答案)
- 預制板粘貼碳纖維加固計算表格
- 2025年海南農(nóng)墾自然資源開發(fā)集團有限公司筆試題
- 醫(yī)療垃圾轉(zhuǎn)運流程
- 礦棉板模板施工合同
- DB31∕T 1148-2019 水量計量差錯的退補水量核算方法
- 2025蛇年元旦晚會
- 延長石油社招筆試題庫
- 高中化學教材(人教版)課本實驗(回歸課本)
評論
0/150
提交評論