【VTK】VTK计算A点在B点切平面上的投影点

VTK计算A点在B点切平面上的投影点


求模型上某点的切平面,不需要用到该点的切向量,只需要该点的法向量。使用vtkPolyDataNormals计算模型的法向量,然后用vtkPlane求某点的切平面。vtkPlane中提供投影的函数ProjectPoint。

重点:ProjectPoint是vtkPlane的静态方法,可以直接调用,不需要为每个顶点创建切平面对象

  • 函数介绍:
static void ProjectPoint(
    const double x[3], const double origin[3], const double normal[3], double xproj[3]);
    //x: 被投影的A点 
    //origin: B点坐标
    //normal: B点法向量
    //xproj: A点投影结果
  • 核心代码:
	//计算法向量
	vtkNew<vtkPolyDataNormals> normalFilter;
	normalFilter->SetInputData(polyData);
	normalFilter->SetComputePointNormals(true);
	normalFilter->Update();
	normals = normalFilter->GetOutput()->GetPointData()->GetNormals();

	//顶点A和顶点B,计算顶点A在B切平面上的投影点
	vtkIdType aid = 0, bid = 1;
	double a[3],b[3];
	polyData->GetPoint(aid, a);
	polyData->GetPoint(bid, b);
	double normal_b[3];
	normals->GetTuple(bid, normal_b);
	//此时已经获得顶点A和B的坐标值和法向量
	double xproj[3];	//投影结果
	vtkPlane::ProjectPoint(a, b, normal_b, xporj);
	

猜你喜欢

转载自blog.csdn.net/qq_37366618/article/details/129944510
今日推荐