簡體   English   中英

查找點到軸的距離

[英]Finding the distance of points to an axis

我在 3d 笛卡爾空間中有一組點:

P = np.random.random((10,3))

現在我想找到他們到給定軸和給定軸上的距離

Ax_support = array([3,2,1])
Ax_direction = array([1,2,3])

我找到了一個解決方案,首先從垂直於方向向量的每個點找到向量......然而,我覺得它真的很復雜,對於這樣一個標准問題,已經有一個 numpy 或 scipy 例程了那里(因為在 scipy.spatial.distance 中找到點之間的距離)

我很驚訝在numpy / scipy的標准操作中看到這樣的操作。 你要找的是你線上的投影距離。 首先減去Ax_support

P_centered = P - Ax_support

通過方向Ax_direction的線上的點與L2中意義上的最短距離對P_centered的每個元素給出的點由下式給出:

P_projected = P_centered.dot(np.linalg.pinv(
             Ax_direction[np.newaxis, :])).dot(Ax_direction[np.newaxis, :])

因此,您正在尋找的公式是

distances = np.sqrt(((P_centered - P_projected) ** 2).sum(axis=1))

是的,這正是你提出的建議,以矢量化的方式做事,所以對於相當多的數據點來說它應該非常快。

注意:如果有人知道這個的內置函數,我會非常感興趣!

不存在這樣的東西一直困擾着我,所以我將haggis.math.segment_distance添加到我維護的實用程序庫haggis中。

一個問題是這個函數需要一條由兩點定義的線,而不是支撐和方向。 只要尺寸廣播,您可以提供任意數量的點和線。 通常的格式是將許多點投影在一條線上(如您所見),或者將一個點投影在多條線上。

 distances = haggis.math.segment_distance(P, Ax_support, Ax_support + ax_direction,
                                          axis=1, segment=False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM