簡體   English   中英

我的平面不是垂直的,如何將點雲的坐標更新為垂直平面

[英]my plane is not vertical, How to update coordinate of point cloud to lie on a vertical plane

我有一堆點位於垂直平面上。 實際上,該平面應該完全垂直。 但是,當我可視化點雲時,相對於垂直度會有一點傾斜(接近2度)。 目前,我只能計算此傾斜度。 關於其他錯誤,我認為沒有任何變化或類似的東西。

因此,我想更新點數據的坐標,使它們位於垂直平面上。 我認為,我應該進行某種轉變。 可能僅通過沿X軸旋轉即可。 不知道會是什么。

我想,你明白我的問題了。 老實說,我在數學方面很差。 因此,請讓我知道如何更新我的點坐標,使其位於精確的垂直平面上。

注意:由於我是用c ++實現的,因此許多程序員對這些事情都有很好的了解,所以我將這個問題發布在c ++下。

更新

如果我確切地說到目前為止我做了什么, 我有代表垂直對象及其周圍事物的點雲數據。 (數據由移動的掃描儀收集,並且可能與正確的世界坐標軸有所偏差)。 問題是,我無法確切地說出我的數據是否有錯誤。 因此,我使用垂直平面對象(這也是我數據中的主要對象)檢查了此對象。 實際上,這架飛機是真正垂直的。 但是,當我通過移除異常值來擬合平面時,該平面並不是真正的垂直,而是具有近2度的傾斜度。 因此,我懷疑我的數據有一些錯誤。 因此,我想更新我的所有點雲(包括平面上的點和代表其他對象的點),以將特定的平面點准確地放置在垂直平面上。 然后,我想所有點都將更新為實際中的正確位置。 那就是所有(x,y,z)坐標都應該更新。

例如,請參考下圖。 在此處輸入圖片說明

左邊表示原始點雲(如您所見,點本身不垂直),后線表示我擬合的垂直平面,紅色是天頂線。 如您所見,垂直平面存在一定的傾斜度。 因此,我想在正確的圖中更新整個數據。 然后,在更新之后,如果我再次適合平面(移除異常值),則它與天頂線完全平行。 請幫我。

考慮到我最近在飛機上工作,我也許可以為您提供幫助。 首先,這些點從一開始就為什么不是共面的? 我首先要使這些點共面,而不是使它們傾斜(從哪個起源?),然后必須對其進行修復。 同樣,在每次嘗試時使點共面會提高效率。

抱歉,這不是您要找的答案,但是在需要您幫助之前,我需要更多信息。 另外,3D數學很難。 如果您使用得足夠多,它就會開始沉入您的腦海,您將永遠不會忘記它,尤其是當您經歷了我不得不經歷的頭痛時。

我對此進行了一些思考,並且由於您想沿x軸旋轉,因此您的旋轉將在xz平面上完成,這意味着我們可以將其視為2D問題。 在對Wikipedia進行了一些研究之后,這可能是您的解決方案。

new z = ((x - intended x) * sin(angle)) + (z * cos(angle)) + intended x

我在這里所做的是從當前的x值中減去我們期望的x值,以便使(原為x,0)原點旋轉。 旋轉點之后,我將(打算x,0)添加回我們的坐標,以便獲得正確的結果。

取決於您從何處獲得積分(我想是某種測量方法)以及您想對它們進行什么處理,您可以對數據進行多種處理。

搜索關鍵字“回歸平面”可能會有所幫助-有幾種找到近似點雲的平面的方法,還有幾種“捕捉”點到平面的方法。

編輯 :您想圍繞由回歸平面上的法線向量和所需平面的法線的叉積定義的軸應用旋轉,並選擇一個點。 從您的插圖中,我認為您可能希望垂直平面對象的底部成為旋轉的參考點。

這樣便有了參考點,現在有了要旋轉的軸和角度。 您需要做的只是:

  1. 翻譯(以供參考)
  2. 回轉

我再次閱讀了您的問題,希望這個答案對您有所幫助。 如果還有其他需要知道的內容,請告訴我。

現在,要旋轉任何東西,必須有一個旋轉的中心點。 現在您已經能夠檢測到傾斜角度,因此現在我們需要一個公式來使點圍繞原點旋轉一定角度。 此外,由於此問題僅發生在2D平面上,因此我們可以使用此基本公式重新調整點。 對於任何兩個軸x和y:

Theta是您將沿逆時針方向旋轉的角度。 x'和y'是您的新觀點。 x.origin和y.origin是您要繞過的點的坐標。 現在我不知道我的數學對此是否100%正確,但是如果不是,那么希望您可以更改一兩件事,並且它會起作用。

暫無
暫無

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

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