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], k=10)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)