trimesh检测物体相撞
# 创建两个可能相交的物体 cube1 trimesh.creation.box(extents[1, 1, 1]) cube2 trimesh.creation.box(extents[1, 1, 1]) cube2.apply_translation([0.5, 0.5, 0.5]) # 让两个立方体部分重叠 # 进行碰撞检测 collision_manager trimesh.collision.CollisionManager() collision_manager.add_object(cube1, cube1) collision_manager.add_object(cube2, cube2) # 判断是否发生碰撞 in_collision collision_manager.in_collision_internal() print(f是否碰撞: {in_collision}) # 如果需要更详细的信息比如碰撞点 collision_data collision_manager.get_collisions() if collision_data: for name_pair, contact_points in collision_data.items(): print(f碰撞对象: {name_pair}) # contact_points 包含了碰撞相关的几何信息对于两两检测物体可以直接使用collision_result cube1.collides_with(cube2) print(collision_result) # 输出: True 或 False--------------------------------与主题无关记录一个操作之前用聚类删除小片噪声点现在发现可以用KDTree 其实之前聚类也是用KDTree计算的现在可以直接操作少了中间商from scipy import spatial # 为顶点构建KD-Tree tree spatial.KDTree(mesh.vertices) # 查询离点[0,0,0]最近的10个顶点 distances, indices tree.query([0, 0, 0], k10)mehs翻转# normalized_top, scale_factor_top, centroid_top normalize_mesh_pts(center_points_top) # normalized_bm, scale_factor_bm, centroid_bm normalize_mesh_pts(center_points_bm) # up_down_bm normalized_bm.copy() # # up_down_bm.apply_transform(trimesh.transformations.scale_and_translate(np.diag([1, -1, 1]), [0, 0, 0])) # up_down_bm[:, 1] * -1 # # up_down.vertices verts # # up_down.faces np.fliplr(up_down.faces)