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]])
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)
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)
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)
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)
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
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)
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
def __init__(self, torus): self.torus = torus frame = Frame.from_plane(self.torus.plane) transform = matrix_from_frame(frame) self.inversetransform = matrix_inverse(transform)
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)
def __init__(self, cylinder): self.cylinder = cylinder frame = Frame.from_plane(self.cylinder.plane) transform = matrix_from_frame(frame) self.inversetransform = matrix_inverse(transform)
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)
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))
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))
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)