我的问题是我有两个墙,在三维空间中用二维平面表示,(wallA
和{wallA.intersect(wallB)
,一个用于wallA.diff(wallB)
,一个用于wallB.diff(wallA)
。在
我想我需要做的是将它们都旋转到二维空间中,而不改变它们的重叠,执行剪切以确定差异和相交,然后将新墙旋转回原始平面。在
墙不一定是垂直的,否则问题可能更简单。在
使用pyclipper
在2D中很容易解决问题的裁剪部分。我遇到的问题是如何将墙恢复到二维
据我所知,与this question中的步骤类似但不完全相同的东西。我已经看了^{
这里有一个我想要实现的例子,用一个非常简单的例子,一对2x2的垂直曲面在一个角上有一个重叠的1x1正方形。在
import pyclipper as pc
wallA= [(0,0,2), (2,0,2), (2,0,0), (0,0,0)]
wallB = [(1,0,3), (3,0,3), (3,0,1), (1,0,1)]
expected_overlaps = [[(1,0,2), (2,0,2), (2,0,1), (1,0,1)]]
wallA_2d = transform_to_2D(wallA, <whatever else is needed>)
wallB_2d = transform_to_2D(wallB, <whatever else is needed>)
scaledA = pc.scale_to_clipper(wallA_2d)
scaledB = pc.scale_to_clipper(wallB_2d)
clipper = pc.Pyclipper()
clipper.AddPath(scaledA, poly_type=pc.PT_SUBJECT, closed=True)
clipper.AddPath(scaledB, poly_type=pc.PT_CLIP, closed=True)
# just showing the intersection - differences are handled similarly
intersections = clipper.Execute(
pc.CT_INTERSECTION, pc.PFT_NONZERO, pc.PFT_NONZERO)
intersections = [pc.scale_from_clipper(i) for i in intersections]
overlaps = [transform_to_3D(i, <whatever else is needed>) for i in intersections]
assert overlaps == expected_overlaps
我想要的是对编写transform_to_2d
和transform_to_3d
所需步骤的说明。在
而不是旋转,你可以简单地投射。关键是将三维空间映射到二维平面上,然后可以反转。(当您向后映射时,由投影产生的任何扭曲都将撤消。)为此,您应该首先找到包含两个墙的平面。下面是一些示例代码:
相关问题 更多 >
编程相关推荐