def test_halfspace_halfspace_same(self): hs_1 = HalfSpace(Vector3D(0, 0, 0), Vector3D(0, 1, 0)) hs_2 = HalfSpace(Vector3D(0, 0, 0), Vector3D(0, 1, 0)) it = intersect(hs_1, hs_2) self.assertTrue(isinstance(it, ConvexPolyhedron)) self.assertTrue(contains_point(hs_1, Vector3D(*it.hsi.interior_point))) self.assertTrue(contains_point(hs_2, Vector3D(*it.hsi.interior_point)))
def hs_from_pos(s: Object, pos: Vector3D, offset_normal: Vector3D, axis_index: int, min_amount: float, max_amount: float) -> PointInRegionDistribution: dist: float = max_amount - min_amount origin: Vector3D = pos + (0.5 * s.dimensions[axis_index] + min_amount) * offset_normal return PointInRegionDistribution(HalfSpace(origin, offset_normal, dist))
def test_halfspace_convpolyh_noIntersection(self): hs = HalfSpace(Vector3D(0, 4, 0), Vector3D(0, 1, 0)) cp = ConvexPolyhedron( to_hsi(Cuboid(Vector3D(0.0, 0.0, 0.0), Vector3D(0, 0, 0), 1, 1, 1))) it = intersect(hs, cp) self.assertTrue(isinstance(it, Empty))
def test_halfspace_convpolyh_intersection(self): hs = HalfSpace(Vector3D(0, 1, 0), Vector3D(0, 1, 0)) cp = ConvexPolyhedron( to_hsi(Cuboid(Vector3D(0.0, 0.0, 0.0), Vector3D(0, 0, 0), 5, 5, 5))) it = intersect(hs, cp) self.assertTrue(isinstance(it, ConvexPolyhedron)) self.assertTrue(contains_point(hs, Vector3D(*it.hsi.interior_point))) self.assertTrue(contains_point(cp, Vector3D(*it.hsi.interior_point)))
def test_halfspace_convpg_noIntersection(self): hs = HalfSpace(Vector3D(0, 4, 0), Vector3D(0, 1, 0)) hsi = HalfspaceIntersection( np.array([[1, 0, -3], [0, 1, -3], [-1, 0, 0], [0, -1, 0]]), np.array([1.0, 1.0])) cp = ConvexPolygon3D(hsi=hsi, origin=Vector3D(0, 0, 0), rot=Vector3D(0, 0, 0)) it = intersect(hs, cp) self.assertTrue(isinstance(it, Empty))
def hs_from_obj(s: Object, ref_obj: Object, offset_normal: Vector3D, axis_index: int, min_amount: float, max_amount: float) -> PointInRegionDistribution: dist: float = max_amount - min_amount unrotated_offset: Vector3D = (0.5 * s.dimensions[axis_index] + min_amount) * offset_normal origin: Vector3D = ref_obj.position + rotate_euler_v3d( unrotated_offset, ref_obj.orientation) normal = rotate_euler_v3d(offset_normal, ref_obj.orientation) return PointInRegionDistribution( HalfSpace(origin, normal, max_amount - min_amount))
def test_halfspace_convpg_intersection(self): hs = HalfSpace(Vector3D(0, 2, 0), Vector3D(0, 1, 0)) hsi = HalfspaceIntersection( np.array([[1, 0, -3], [0, 1, -3], [-1, 0, 0], [0, -1, 0]]), np.array([1.0, 1.0])) cp = ConvexPolygon3D(hsi=hsi, origin=Vector3D(0, 0, 0), rot=Vector3D(0, 0, 0)) it = intersect(hs, cp) int_point_3d: Vector3D = rotate_euler_v3d( Vector3D(*it.hsi.interior_point, 0.0), it.rot) + it.origin self.assertTrue(isinstance(it, ConvexPolygon3D)) self.assertTrue(contains_point(hs, int_point_3d)) self.assertTrue(contains_point(cp, int_point_3d))
def test_halfspace_halfspace_noIntersectionByDistance(self): hs_1 = HalfSpace(Vector3D(0, 1, 0), Vector3D(0, 1, 0)) hs_2 = HalfSpace(Vector3D(0, 10000, 0), Vector3D(0, 1, 0)) it = intersect(hs_1, hs_2) self.assertTrue(isinstance(it, Empty))