pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud 在VTK中染色显示
时间: 2023-07-02 08:18:05 浏览: 237
pcl点云显示
}
if (valid) {
result.push_back(queue); // 如果当前排队顺序满足条件,则将其加入结果集
}
return;
}
queue.push_back(index); // 将当前人放到排队顺序要在VTK中染色显示PCL中的点云,可以使用VTK的颜色映射器(color mapper)的末尾
int sum = 0; // 当前售货员手中的钱数
bool valid = true来实现。具体步骤如下:
1. 将PCL中的点云转换为VTK中的点云; // 当前排队顺序是否满足条件
for (int i = 0; i <= index; i++)。
```C++
pcl::PointCloud<pcl::PointXYZRGB>::Ptr pclCloud;
vtkSmartPointer<vtkPoints> vtkPoints = vtkSmartPointer<v {
sum += money[queue[i]]; // 将购买商品的人的钱数加入售货员手中的钱tkPoints>::New();
vtkSmartPointer<vtkUnsignedCharArray> vtkColors = vtkSmartPointer<vtkUnsignedCharArray>::New();
vtkColors->SetNumberOf数
if (sum < 5 * (i + 1)) { // 如果售货员手中的钱数不Components(3);
for (pcl::PointCloud<pcl::PointXYZRGB>::iterator it = pclCloud->begin(); it != pclCloud->end();足以找零,则将该人从排队顺序中删除
valid = false;
break;
}
}
it++) {
vtkPoints->InsertNextPoint(it->x, it->y, it->z);
vtkColors->InsertNextTuple if (valid) {
backtrack(index + 1); // 如果当前排队顺序满足条件,则继续考虑下3(it->r, it->g, it->b);
}
vtkSmartPointer<vtkPolyData> vtkPolyData = vtkSmartPointer<vtk一个人的选择
}
queue.pop_back(); // 将当前人从排队顺序中删除
backtrack(index +PolyData>::New();
vtkPolyData->SetPoints(vtkPoints);
vtkPolyData->GetPointData()->SetScalars(vtkColors);
1); // 继续考虑下一个人的选择
}
int main() {
for (int i = 0;```
2. 创建一个颜色映射器。
```C++
vtkSmartPointer<vtkColorTransferFunction> colorTransferFunction = vtkSmartPointer i < 5; i++) {
money[i] = 5; // 前5个人带5元钱
}
for (int i = 5; i < 10; i++) {
money[i] = 10; // 后5<vtkColorTransferFunction>::New();
colorTransferFunction->AddRGBPoint(0, 1.0, 0.0, 个人带10元钱
}
backtrack(0); // 计算所有满足条件的排队方案
0.0);
colorTransferFunction->AddRGBPoint(255, 0.0, 1.0, 0.0);
// 输出所有满足条件的排队方案
cout << "所有满足条件的排队方案:" << endl;
```
3. 创建一个颜色映射器的映射器(mapper)。
```C++
vtkSmartPointer<vtkPolyDataMapper for (const vector<int>& queue : result) {
for (int i : queue) {
cout << i << " ";
> polyDataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
polyDataMapper->SetInputData(vtkPolyData);
polyData }
cout << endl;
}
return 0;
}
```
### 分支限界法实现
分支限界Mapper->SetLookupTable(colorTransferFunction);
polyDataMapper->SetScalarRange(0, 255);
```
4. 创建一个Actor并将映射器附加到Actor上。
```C++
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New法的思路是:将购买商品的人按照钱数从少到多排序,然后依次考虑每();
actor->SetMapper(polyDataMapper);
```
5. 将Actor添加到Renderer中,并将Renderer添加到RenderWindow中。
```C个人的选择,如果售货员手中的钱数不足以找零,则剪枝,否则,继续考++
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
vtkSmartPointer<vtkRenderWindow>虑下一个人的选择。
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct Node renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
```
6. 显示RenderWindow。
```C++
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow {
int index; // 当前考虑的人的编号
int sum; // 当前售货员手中(renderWindow);
renderWindowInteractor->Start();
```
阅读全文