Ejemplo n.º 1
0
def test_axis_and_angle_from_matrix():
    axis1 = normalize_vector([-0.043, -0.254, 0.617])
    angle1 = 0.1
    R = matrix_from_axis_and_angle(axis1, angle1)
    axis2, angle2 = axis_and_angle_from_matrix(R)
    assert allclose(axis1, axis2)
    assert allclose([angle1], [angle2])
Ejemplo n.º 2
0
def test_matrix_from_axis_angle_vector():
    axis1 = normalize_vector([-0.043, -0.254, 0.617])
    angle1 = 0.1
    R = matrix_from_axis_and_angle(axis1, angle1)
    r = [[0.9950248278789664, -0.09200371122722178, -0.03822183963195913, 0.0],
         [0.09224781823368366, 0.9957251324831573, 0.004669108322156158, 0.0],
         [
             0.037628871037522216, -0.008171760019527692, 0.9992583701939277,
             0.0
         ], [0.0, 0.0, 0.0, 1.0]]
    assert allclose(R, r)
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
        """
        vector = self.copy()
        vector.transform(matrix)
        return vector


# ==============================================================================
# Main
# ==============================================================================

if __name__ == '__main__':

    from compas.geometry import matrix_from_axis_and_angle

    u = Vector(0.0, 0.0, 1.0)
    v = Vector(1.0, 0.0, 0.0)

    print(u.angle(v))
    print(3.14159 / 2)

    w = Vector.from_start_end(u, v)

    print(w)

    M = matrix_from_axis_and_angle(v, pi / 4)

    u.transform(M)

    print(u)
Ejemplo n.º 5
0
        Polyline
            The transformed copy.

        """
        polyline = self.copy()
        polyline.transform(matrix)
        return polyline


# ==============================================================================
# Main
# ==============================================================================

if __name__ == '__main__':

    from math import pi

    from compas.geometry import matrix_from_axis_and_angle
    from compas_plotters import Plotter

    M = matrix_from_axis_and_angle([0, 0, 1.0], pi / 2)
    p = Polyline([[0, 0, 0], [1, 0, 0], [2, 0, 0], [3, 0, 0]])
    q = p.transformed(M)

    #plotter = Plotter(figsize=(10, 7))

    #plotter.draw_polygons([{'points': p.points}, {'points': q.points}])
    #plotter.show()

    print(p.point(.7, snap=True))
Ejemplo n.º 6
0
    from compas.geometry import matrix_from_axis_and_angle
    from compas.geometry import transform_points_numpy

    from compas_plotters import Axes3D
    from compas_plotters import Cloud3D
    from compas_plotters import Bounds
    from compas_plotters import create_axes_3d

    data = random.rand(300, 3)
    data[:, 0] *= 10.0
    data[:, 1] *= 1.0
    data[:, 2] *= 4.0

    a = 3.14159 * 30.0 / 180
    Ry = matrix_from_axis_and_angle([0, 1.0, 0.0], a, rtype='array')

    a = -3.14159 * 45.0 / 180
    Rz = matrix_from_axis_and_angle([0, 0, 1.0], a, rtype='array')

    R = Rz.dot(Ry)

    data = transform_points_numpy(data, R)

    average, vectors, values = pca_numpy(data)

    axes = create_axes_3d()

    Bounds(data).plot(axes)
    Cloud3D(data).plot(axes)
    Axes3D(average, vectors).plot(axes)
        cloud[:, 1] *= -3.0
        cloud[:, 1] -= 3.0
        d[1] = -1
    else:
        cloud[:, 1] *= 3.0
        cloud[:, 1] += 3.0

    if i in (4, 5, 6, 7):
        cloud[:, 2] *= -6.0
        cloud[:, 2] -= 3.0
        d[2] = -1
    else:
        cloud[:, 2] *= 6.0
        cloud[:, 2] += 3.0

    R = matrix_from_axis_and_angle(d, a)
    cloud[:] = transform(cloud, R)

    clouds.append(cloud.tolist())

axes = create_axes_3d()

bounds = Bounds([point for points in clouds for point in points])
bounds.plot(axes)

for cloud in clouds:
    bbox = oriented_bounding_box_numpy(cloud)

    Cloud3D(cloud).plot(axes)
    Box(bbox[1]).plot(axes)