예제 #1
0
def test_matrix_inverse(R, T):
    assert allclose(matrix_inverse(R.matrix),
                    [[1.0, -0.0, 0.0, -0.0],
                     [-0.0, -0.4480736161291701, 0.8939966636005579, 0.0],
                     [0.0, -0.8939966636005579, -0.4480736161291701, -0.0],
                     [-0.0, 0.0, -0.0, 1.0]])
    assert allclose(matrix_inverse(T.matrix),
                    [[1.0, -0.0, 0.0, -1.0], [-0.0, 1.0, -0.0, -2.0],
                     [0.0, -0.0, 1.0, -3.0], [-0.0, 0.0, -0.0, 1.0]])
예제 #2
0
 def __init__(self, radiusA=3, radiusB=4, k=0.1, frame=Frame.worldXY()):
     self.ra = radiusA
     self.rb = radiusB
     self.k = k
     self.frame = frame
     self.matrix = matrix_from_frame(self.frame)
     self.inversedmatrix = matrix_inverse(self.matrix)
예제 #3
0
 def __init__(self, radiusX=3, radiusY=2, radiusZ=1, frame=Frame.worldXY()):
     self.radiusX = radiusX
     self.radiusY = radiusY
     self.radiusZ = radiusZ
     self.frame = frame
     transform = matrix_from_frame(self.frame)
     self.inversetransform = matrix_inverse(transform)
예제 #4
0
 def __init__(self, radius, type=0, frame=None):
     self.radius = radius
     self.type = type
     self.frame = frame or Frame.worldXY()
     self.inversetransform = matrix_inverse(matrix_from_frame(self.frame))
     self.sqrt3 = sqrt(3)
     self.tan30 = tan(pi/6)
예제 #5
0
 def __init__(self, ltype=0, unitcell=1.0, thickness=0.1, polarnumber=6, frame=Frame.worldXY()):
     self.pointlist = self.create_points()
     self.ltypes = self.create_types()
     self._ltype = None
     self.ltype = ltype
     self.unitcell = unitcell
     self.thickness = thickness
     self.polarnumber = polarnumber
     self._frame = None
     self.frame = frame
     transform = matrix_from_frame(self.frame)
     self.inversetransform = matrix_inverse(transform)
예제 #6
0
    def get_distance(self, point):
        if not isinstance(point, Point):
            point = Point(*point)

        m = matrix_from_frame(self.frame)
        mi = matrix_inverse(m)
        point.transform(mi)

        tp = Point(point[0], point[1], 0)
        cp = closest_point_on_polyline_xy(tp, self.polyline)
        d = tp.distance_to_point(cp)
        if is_point_in_polygon_xy(tp, self.polyline):
            d = -1. * d
        d = max(d, abs(point.z) - self.height / 2.0)
        return d
예제 #7
0
    def get_distance_numpy(self, x, y, z):
        """
        vectorized distance function
        """
        from compas.geometry import matrix_inverse
        import numpy as np

        # plane = Plane(self.frame.point, self.frame.normal)
        # vp = VolPlane(plane)
        # dm = vp.get_distance_numpy(x, y, z)

        m = matrix_from_axis_and_angle(self.frame.normal, 10, self.frame.point)
        mi = matrix_inverse(m)
        p = np.array([x, y, z, 1])
        xt, yt, zt, _ = np.dot(mi, p)
        return self.obj.get_distance_numpy(xt, yt, zt)
예제 #8
0
    def get_distance(self, point):
        """
        single point distance function
        """
        if not isinstance(point, Point):
            point = Point(*point)

        frame = Frame.from_plane(self.cone.plane)
        m = matrix_from_frame(frame)
        mi = matrix_inverse(m)
        point.transform(mi)

        dxy = length_vector_xy(point)
        a = 1.1
        c = [sin(a), cos(a)]
        # dot product
        d = sum(
            [i * j for (i, j) in zip(c, [dxy, point.z - self.cone.height])])
        return d
예제 #9
0
 def __init__(self, torus):
     self.torus = torus
     frame = Frame.from_plane(self.torus.plane)
     transform = matrix_from_frame(frame)
     self.inversetransform = matrix_inverse(transform)
예제 #10
0
 def __init__(self, distobj=None, frame=Frame.worldXY()):
     self.distobj = distobj
     self.frame = frame
     transform = matrix_from_frame(self.frame)
     self.inversetransform = matrix_inverse(transform)
예제 #11
0
 def __init__(self, cylinder):
     self.cylinder = cylinder
     frame = Frame.from_plane(self.cylinder.plane)
     transform = matrix_from_frame(frame)
     self.inversetransform = matrix_inverse(transform)
예제 #12
0
 def __init__(self, cone):
     self.cone = cone
     self.frame = Frame.from_plane(self.cone.plane)
     self.matrix = matrix_from_frame(self.frame)
     self.inversedmatrix = matrix_inverse(self.matrix)
예제 #13
0
 def __init__(self, polyline, height=1.0, frame=None):
     self.polyline = polyline
     self.height = height
     self.frame = frame or Frame.worldXY()
     self.inversetransform = matrix_inverse(matrix_from_frame(self.frame))
예제 #14
0
 def __init__(self, size=3.0, frame=None):
     self.size = size
     self.frame = frame or Frame.worldXY()
     self.inversetransform = matrix_inverse(matrix_from_frame(self.frame))
예제 #15
0
 def box(self, box):
     if not isinstance(box, Box):
         raise ValueError
     self._box = box
     transform = matrix_from_frame(self.box.frame)
     self.inversetransform = matrix_inverse(transform)