예제 #1
0
def test_reflect():
    """Test the Plane reflect method."""
    pt = Point3D(2, 2, 2)
    vec = Vector3D(0, 2, 0)
    plane = Plane(vec, pt)

    origin_1 = Point3D(0, 1, 2)
    origin_2 = Point3D(1, 1, 2)
    normal_1 = Vector3D(0, 1, 0)
    normal_2 = Vector3D(-1, 1, 0).normalize()

    assert plane.reflect(normal_1, origin_1).o == Point3D(2, 0, 2)
    assert plane.reflect(normal_1, origin_1).n == Vector3D(0, -1, 0)
    assert plane.reflect(normal_1, origin_2).o == Point3D(2, 0, 2)
    assert plane.reflect(normal_1, origin_2).n == Vector3D(0, -1, 0)

    test_1 = plane.reflect(normal_2, origin_2)
    assert test_1.o == Point3D(2, 2, 2)
    assert test_1.n.x == pytest.approx(1, rel=1e-3)
    assert test_1.n.y == pytest.approx(0, rel=1e-3)
    assert test_1.n.z == pytest.approx(0, rel=1e-3)

    test_2 = plane.reflect(normal_2, origin_1)
    assert test_2.o.x == pytest.approx(1, rel=1e-3)
    assert test_2.o.y == pytest.approx(3, rel=1e-3)
    assert test_2.o.z == pytest.approx(2, rel=1e-3)
    assert test_2.n.x == pytest.approx(1, rel=1e-3)
    assert test_2.n.y == pytest.approx(0, rel=1e-3)
    assert test_2.n.z == pytest.approx(0, rel=1e-3)
예제 #2
0
    def reflect(self, plane):
        """Reflect this view across a plane.

        Args:
            plane: A ladybug_geometry Plane across which the object will
                be reflected.
        """
        view_up_vector = pv.Vector3D(*self.up_vector)
        view_position = pv.Point3D(*self.position)
        view_direction = pv.Vector3D(*self.direction)
        view_plane = Plane(n=view_up_vector, o=view_position, x=view_direction)

        ref_plane = view_plane.reflect(plane.n, plane.o)
        self._apply_plane_properties(ref_plane, view_direction, view_up_vector)