使用std vector優化點雲動畫顯示一例

2021-07-06 09:35:13 字數 1316 閱讀 3477

使用std::vector應該知道幾點:

(1)記憶體連續的容器,有點像陣列

(2)與std::list相比,插入和刪除元素比較慢- 因為資料遷移

(3)新增元素可能會引發記憶體分配和資料遷移。

anycad::api::pointcloudnode使用floatlist  及std::vector來儲存一些列的點[x0, y0, z0, x1, y1, z1, .....]:

void 

setpoints (const floatlist &buffer)

若想要顯示n個點,需要3n的長度:

為了在空間中模擬某個物體的運動軌跡,即一系列的點,如何才能高效的實現動態繪製呢?

最基本的辦法:

定義的變數:

pointcloudnode m_pointcoud;

std::_vectorm_points;

每次呼叫push_back新增點:

void onaddpoint(x, y, z)

「優化1」:為了減少顯示的點太多引起記憶體問題和效率問題,可以限定顯示的點的個數

int max_point3_count = max_point_count * 3;

void onaddpointv1(x, y, z)

m_points.push(x);

m_points.push(y);

m_points.push(z);

m_pointcloud.setpoints(m_points);

render();

}

onaddpointv1引入了什麼問題?

優化2:避免每次vector都重新分配記憶體,指定vector的初始記憶體大小

m_points.reserve(max_point3_count);
優化3:避免由於刪除頭元素引擎的資料遷移

新加入的點放在隊尾還是隊頭,對於顯示而言,結果都是一樣一樣的。所以可以覆蓋」過期的"的點。

int m_totalcount = 0;

void onaddpointv3(x, y, z)

else

m_pointcloud.setpoints(m_points);

render();

}

ICP點雲配準原理及優化

icp演算法簡介 根據點雲資料所包含的空間資訊,可以直接利用點雲資料進行配準。主流演算法為最近迭代演算法 icp,iterative closest point 該演算法是根據點雲資料首先構造區域性幾何特徵,然後再根據區域性幾何特徵進行點雲資料重定位。假設兩個點雲資料集合p和g,要通過p轉換到g 假...

點雲概念與點雲處理

點雲概念 點雲與三維影象的關係 三維圖像是一種特殊的資訊表達形式,其特徵是表達的空間中三個維度的資料,表現形式包括 深度圖 以灰度表達物體與相機的距離 幾何模型 由cad軟體建立 點雲模型 所有逆向工程裝置都將物體取樣成點雲 和二維影象相比,三維影象借助第三個維度的資訊,可以實現天然的物體 背景解耦...

點雲概念與點雲處理

點雲與三維影象的關係 三維圖像是一種特殊的資訊表達形式,其特徵是表達的空間中三個維度的資料,表現形式包括 深度圖 以灰度表達物體與相機的距離 幾何模型 由cad軟體建立 點雲模型 所有逆向工程裝置都將物體取樣成點雲 和二維影象相比,三維影象借助第三個維度的資訊,可以實現天然的物體 背景解耦。點雲資料...