日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两线相交问题

發布時間:2024/1/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两线相交问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1、問題描述
  • 2、數學基礎
    • 2.1向量:
    • 2.2 向量的點積
      • 2.2.1 定義
      • 2.2.2 幾何意義:投影
      • 2.2.3 應用舉例
    • 2.3 向量的叉乘
      • 2.3.1 定義
      • 2.3.2 計算
      • 2.3.3 幾何意義
      • 2.3.4 應用舉例
  • 3、判斷兩個線段是否相交
    • 3.1 快速排斥
    • 3.2: 判斷兩線段是否相交
    • 3.3 python代碼實現
  • 4、參考鏈接:

1、問題描述

判斷二維平面上兩條直線是否相交。

2、數學基礎

2.1向量:

??既有方向又有大小的量
??通常情況下會將向量放到坐標系中,常用的是笛卡爾坐標系,向量起始點通常放到原點(注:沒有固定的起點,只要方向相同,大小相等,就認為兩向量是相同的,但為了用數值坐標來表示向量,將起始點放到原點),因此,三維向量可以寫成如下形式:

2.2 向量的點積

2.2.1 定義

?? 點積(對應元素相乘相加):也叫數量積。結果是一個向量在另一個向量方向上投影的長度,是一個標量。


結果是一個數。

2.2.2 幾何意義:投影

向量A到向量B上投影的長度。

2.2.3 應用舉例

??點乘用來判斷兩個向量是否垂直,因為比較好算。也可以用來計算一個向量在某個方向上的投影長度,就像定義一樣。
求角度:

2.3 向量的叉乘

2.3.1 定義

??向量積,數學中又稱外積、叉積,物理中稱矢積、叉乘,是一種在向量空間中向量的二元運算。與點積不同,它的運算結果是一個向量而不是一個標量。并且兩個向量的叉積與這兩個向量和垂直。

2.3.2 計算

a×b=c,其中|c|=|a||b|·sinθ,c的方向遵守右手定則


2.3.3 幾何意義

??c是垂直a、b所在平面,且以|b|·sinθ為高、|a|為底的平行四邊形的面積。

2.3.4 應用舉例

判斷兩個線段是否相交

可以用點乘和叉乘來進行判斷,這可以應用于星載激光高度計測高剖面進行交叉點的查找和最小二乘平差,從而降低軌道誤差,定向誤差,和計時誤差等的影響。

3、判斷兩個線段是否相交

3.1 快速排斥

??即判斷以兩線段為對角線的矩形是否相交,若不相交,則兩線段一定不相交。而判斷兩個矩形是否相交,如果任一矩形的最右端都大于另一矩形的最左端且任一矩形最高端大于另一矩形的最低端,那么矩形相交;反之,只要其中任一條件不滿足,兩矩形不相交。經過這一步之后可以將大部分不符合條件的線段排除掉。

3.2: 判斷兩線段是否相交

??如果兩線段相交,則兩線段必須互相跨立對方,即其中任一線段的兩端一定在另一線段的兩側 。

??如上圖所示:線段P1P2與線段P3P4相交,則P1和P2一定在線段P3P4的兩側,所以有(P3P1 × P3P4)· (P3P2 × P3P4)< 0;是因為根據右手法則,P3P1 × P3P4得到的新向量和P3P2 × P3P4得到的新向量方向相反,大于90°。因為計算點積時cosθ<0(θ>90°)。故叉乘后再進行點積肯定小于0。
??同理如果P3和P4在線段P1P2兩側那么有(P2P3 × P2P1)· (P2P4 × P2P1)< 0:如果同時滿足以上兩條那么就可以證明線段P1P2與線段P3P4相交。

3.3 python代碼實現

import numpy as npdef cross(array1, array2):return array1[0] * array2[1] - array2[0] * array1[1]def isLineIntersectLine(point11, point12, point21, point22):result1 = cross(point11 - point21, point12 - point21) \* cross(point11 - point22, point12 - point22)result2 = cross(point21 - point11, point22 - point11) \* cross(point21 - point12, point22 - point12)if result1 < 0 and result2 < 0:return Trueelse:return Falseif __name__ == "__main__":if isLineIntersectLine(np.array([0,2]),np.array([3,2]),np.array([0,1]),np.array([3,3])):print("有交點!")else:print("無交點!")

4、參考鏈接:

1、 判斷兩個線段相交問題(快速排斥實驗&跨立實驗) (計算幾何).
2、 點乘和叉乘的區別是什么?.
3、 計算幾何_直線求交點_線段判相交.
4、 百度百科:向量積.
5、 計算幾何——快速排斥實驗和跨立實驗.

總結

以上是生活随笔為你收集整理的两线相交问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。