目的:求出三個點或者以上。包含這三個點的坐標
uj5u.com熱心網友回復:
太模糊的問題,不知道怎么回答點云是個什么東西,一堆二維或者三維的離散點嗎?
點云的拓撲結構是怎樣的,也就是如何區分內外的?
資料量有多大, 范圍是怎樣的
uj5u.com熱心網友回復:
點云就是三維坐標,構成的點云。沒有拓撲結構,散亂點,找最近距離要全部遍歷,點的個數大約在3千左右。范圍就是一個點到一堆點之間距離最小的三個點,uj5u.com熱心網友回復:
這要看這個計算是偶爾一次,還是經常要用點云的資料是經常變化,還是基本不變了
如果只是偶爾一次,無所謂了, 大不了挨個計算距離唄, 邊計算邊保留距離最小的三個或者幾個點, 全算一遍就有結果了
如果經常要用,就需要對這些點建立起來空間結構的管理機制,把他們分組或者排序
比如,先x排序,同x再排y,同y再排z
有了排序,知道要計算的點都位置,就可以在排序當中尋找距離它近的,減少比對的范圍
也可以把他們網格化, 先定位要計算的點在哪個網格,然后再和網格當中以及周邊網格內的點做距離比較
uj5u.com熱心網友回復:
經常要用的,點云資料不變。個人感覺這個可以呼叫PCL中現有的庫,前人一定寫好了類,直接呼叫。PCL中有K_D tree創建拓撲關系,包含大量的可呼叫檔案和其他第三方庫,自己一個人寫想法是有了,但是寫出的代碼時間復雜度和空間利用率都不好,知道點云外一點的三維坐標,如果能求出距離他最近的三個點或者多點,就可以把求出來的點轉換成一個平面,再求點到面的距離,就是點到點云的距離,這個是思路。你說是想法,但是變成代碼實作才算完成了呀。謝謝uj5u.com熱心網友回復:
可以分別求出該點到每個點的歐氏距離存入陣列中,冒泡回圈三次就求出最小的三個了,3000個點只需要15000次加減、9000次乘、3000次開方,比較次數3n-6,應該很快uj5u.com熱心網友回復:
是個方法,這樣寫。感覺好難受,一個點就這么多次,那在求下一個點,有事這么多次,時間復雜度是N的二次,沒辦法推廣呀!最好是線性增加,指數增加太恐怖了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113084.html
標籤:C++ 語言
上一篇:C++ 界面求教
下一篇:QT的NMAKE問題
