簡體   English   中英

如何根據距已知點的4個距離查找點的3D坐標

[英]How to find 3D coordinate of point based on 4 distances from known points

經過一周的搜索和試驗,很明顯我被困住了。 我在空間中有4個已知點[A,B,C,D]以及它們到未知點X距離。 我的數學知識充其量是基礎知識,所以在嘗試理解其中的某些3D數學時遇到了很多挫折,所以有人可以通過c ++中分步示例來解釋所需的算法來找到該點X嗎? 謝謝。

例如:點A {-39, 24.9062, -0.65625} ,點B {-13.5, 25.2812, -4}和點C {-11.5625, 43.8125, 11.625 } 距離AX = 21.5116BX = 43.8125CX = 11.625

正如人們指出的那樣,存在解決與球體的X點相交的解決方案,但是正如我所說的,我的數學並不是真的那么好,因此可以得到一個可行的示例。

我認為另一種可能的解決方案是首先找出ABC三角形所在的平面的底部與X點之間的距離。 該距離實質上是ABCX的ABCX的高度。 然后從那里使用三角函數算出AXBXCX頂點的仰角,以算出y = mx + b線中的m 再次,這是我的數學技巧失敗的地方。

指出Matlab / Mathematica示例很好,但由於它使用了自己的數學函數庫,並且假定具備很好的數學技能才能解決問題,所以恐怕這根本沒有用。 我正在尋找針對C ++(或C)中這個確切問題的逐步解決方案。

我看過的地方(包括SO)都沒有人全面地解釋過從絕對起點到終點的三維問題的解決方案。 並不是每個人都擅長數學,這就是為什么我希望有一個可行的例子,以便我能更好地理解。

謝謝大家過去和將來的各種聯系和建議。

您要問的問題稱為Trilateration 基本上,您可以選擇三個錨點,並使用第四個錨點消除歧義。 這篇Wiki文章假定這三個點位於z = 0平面中,試圖簡化計算。

一般情況將需要更復雜的計算,因此您需要將本文中討論的三個錨點映射到案例,然后找到解決方案,然后使用逆變換將它們映射回去。

您可以使用搜索字符串“ trilateration C ++”輕松找到該問題的C ++代碼。

首先,寫出以三個已知點為中心,半徑已知的三個球體的方程。

(X-Xi)² + (Y-Yi)² + (Z-Zi)² = Ri²

從其他兩個中減去第一個,則消失,剩下兩個平面方程,它們定義一條直線。

沿這條線找到兩個不同的點P0P1 (例如,使用兩個平面之間的相交線 ),並形成該線的參數方程式

P = P0 + t (P1 - P0).

將其插入第一個球面的方程將產生一個二次方程,該二次方程將為您提供t兩個解。

[(P0 - C0) + t (P1 - P0)]² = (P0 - C0)² - 2 (P0 - C0).(P1 - P0) t + (P1 - P0)²t² = R0²

計算兩個P ,然后使用第四個點保持與該距離最匹配的解。

暫無
暫無

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

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