# 创建两个可能相交的物体
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)

263

被折叠的 条评论
为什么被折叠?



