首先,您需要处理vtkpolydata对象(即几何体),而不是vtkactor。您可能需要使用vtktransformpolydatafilter输出作为vtkpolydata(正如您在else语句中所做的那样-示例
here
)而不是调用setusermatrix。
你可以使用
vtkBooleanOperationPolyDataFilter
可以找到一个例子
here
(在C++中,但我确信它可以帮助)
here
(在python中)。如果生成的几何图形不是空的,则圆柱体相交。
如果它不适合你的需要,你可以使用VTKMyPysiMeDeleLeLink将圆柱体从多数据转换成Image DATA(图像体积,体素);然后计算交叉体体积更容易和更准确(你可以使用)。
vtkImageLogic
)还可以将交集转换为VTKPoDeDATA。
vtkFlyingEdges3D
(快速版本的
vtkMarchingCubes
)
编辑:如评论中所述,因为有许多气缸执行时间是一个问题。您可以通过计算每对圆柱体的轴之间的距离来尝试优化过程,以检测它们是否相交,如果相交,则按本答案第一部分所述计算相交。我的想法如下:计算线段之间的最短距离(描述了一种方法
here
,还有段到段距离的c++代码,这是您需要的)。将距离与两个圆柱体的半径之和进行比较,如果距离较短,则计算交点。