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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

向量法计算空间点到线段的距离(python)

發布時間:2024/3/13 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 向量法计算空间点到线段的距离(python) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

中學數學告訴我們,計算點到線段的距離有兩種。

我們假設點是P,線段是AB。P和AB都由三維的笛卡爾坐標表示。現計算P到AB的距離。

第一種是,過點P向線段AB上畫垂線,判斷垂足有沒有落在線段上。如果落在線段上,ok,距離就是垂線段的長度;如果沒有,則距離轉化為點到線段兩端點的距離。

另一種方法是,獲取線段向量AB、以及點P與線段一端點組成的向量(AP或BP)。將這兩個向量做點乘AB·AP,點乘結果即為向量AP在AB上的投影。這時只需比較投影和AB的關系即可:投影小于零,說明P在A的外側,距離為AP的模長;投影大于0小于AB,說明P在AB中間,距離是垂足距離,這個距離也可以用向量算出來;投影大于AB,說明P在B的外側,距離為PB的長。

原理部分我簡單的寫寫了,不清楚的自行查閱中學數學教材。

顯然,向量法的計算量要遠小于第一種方法的。

我在做項目的時候,在網上找現成的代碼。沒有找到使用第二種向量法、用python寫出的。于是自己大概復習了下原理,寫了一個代碼。

python代碼如下:

import math import numpy as np from numpy import *#這里我給定了點P和線段AB兩端點的坐標 a = np.asarray([-1,1,0]) b = np.asarray([1,1,0]) p = np.asarray([0,0,0])#計算用到的向量 ab=b-a ap=p-a bp=p-b #計算投影長度,并做正則化處理 r = np.dot(ap,ab)/(np.linalg.norm(ab))**2 #分了三種情況 if r > 0 and r < 1:dis = math.sqrt((np.linalg.norm(ap))**2 - (r * np.linalg.norm(ab))**2) elif r >= 1:dis = np.linalg.norm(bp) else:dis = np.linalg.norm(ap) print(dis) #dis即為所求

總結

以上是生活随笔為你收集整理的向量法计算空间点到线段的距离(python)的全部內容,希望文章能夠幫你解決所遇到的問題。

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