Example #1
0
def test_inverse_trans():
    t = m3d.Transform()
    t.pos.x = 1
    t.orient.rotate_zb(np.pi / 2)
    t.orient.rotate_yb(np.pi / 2)
    v = m3d.Vector(2, 0, 0)
    assert t * v == m3d.Vector(1, 2, 0)
Example #2
0
def test_rotation_t():
    t = m3d.Transform()
    t.pos.x = 1
    t.orient.rotate_zt(np.pi / 2)
    t.orient.rotate_yt(np.pi / 2)
    v = m3d.Vector(2, 0, 0)
    assert t * v == m3d.Vector(1, 0, -2)
Example #3
0
def test_transform():
    t = m3d.Transform()
    t.orient.rotate_zb(np.pi / 2)
    t.pos.y = 2
    v = m3d.Vector(1, 0, 0)
    r = t * v
    assert r == m3d.Vector(0, 3, 0)
Example #4
0
def test_vect_div():
    v1 = m3d.Vector(10, 10, 10)
    const_val = 2
    const_val_2 = -5
    v_res = v1 / const_val
    v_res_2 = v1 / const_val_2
    assert v_res == m3d.Vector(5, 5, 5)
    assert v_res_2 == m3d.Vector(-2, -2, -2)
Example #5
0
def test_vector_dot():
    d1 = np.array([1, 2, -3])
    d2 = np.array([2, 2, 2])
    v1 = m3d.Vector(d1)
    v2 = m3d.Vector(d2)
    assert np.dot(d1, d2) == v1.dot(v2)
    assert v1.dot(v2) == v1 @ v2
    assert v1 @ v1 == v1.length**2
Example #6
0
def test_vector_except():
    with pytest.raises(ValueError):
        o = m3d.Vector(np.identity(4))
    with pytest.raises(ValueError):
        o = m3d.Vector("whatever")
    with pytest.raises(ValueError):
        o = m3d.Vector([1, 2, 3, 4])
    o = m3d.Vector([1, 2, 3])
Example #7
0
def test_vect_mul():
    v1 = m3d.Vector(10, 10, 10)
    const_val = 2
    const_val_2 = -5
    v_res = v1 * const_val
    v_res_2 = v1 * const_val_2
    assert v_res == m3d.Vector(20, 20, 20)
    assert v_res_2 == m3d.Vector(-50, -50, -50)
Example #8
0
def test_multiplication_orient():
    o = m3d.Orientation()
    o.rotate_zb(np.pi / 2)
    v = m3d.Vector(1, 0, 0)
    r = o * v
    assert r == m3d.Vector(0, 1, 0)
    o.rotate_zb(-np.pi)
    v = m3d.Vector(2, 0, 0)
    r = o * v
    assert r == m3d.Vector(0, -2, 0)
Example #9
0
def test_unit_vectors():
    assert m3d.vector.e0 == m3d.Vector(1, 0, 0)
    assert m3d.vector.e1 == m3d.Vector(0, 1, 0)
    assert m3d.vector.e2 == m3d.Vector(0, 0, 1)
    t = m3d.Transform()
    assert m3d.vector.ex == t.orient.vec_x
    assert m3d.vector.ey == t.orient.vec_y
    assert m3d.vector.ez == t.orient.vec_z
    t.orient.rotate_zb(1)
    assert m3d.vector.ex != t.orient.vec_x
    assert m3d.vector.ey != t.orient.vec_y
    assert m3d.vector.ez == t.orient.vec_z
Example #10
0
def test_construct():
    o = m3d.Orientation()
    o.rotate_zb(1)
    v = m3d.Vector()
    v[0] = 1
    v[2] = 2
    t = m3d.Transform(o, v)
    assert t.pos.x == 1
    assert t.pos.z == 2
    t.pos = m3d.Vector()
    t.orient.rotate_zb(-1)
    assert t == m3d.Transform()
    t.orient = o
    assert t != m3d.Transform()
Example #11
0
def test_from_xz():
    x = m3d.Vector(1, 0, 0)
    z = m3d.Vector(0, 0, 1)
    orient = m3d.Orientation.from_xz(x, z)
    assert _are_equals(orient.data, np.identity(3))

    x = m3d.Vector(2, 0, 0.1)
    z = m3d.Vector(0.1, -0.1, 3)
    o = m3d.Orientation()
    o.rotate_yb(1)
    o.rotate_zb(1)
    x = o @ x
    z = o @ z
    orient = m3d.Orientation.from_xz(x, z)
    assert _are_equals(o, orient, eps=0.1)
Example #12
0
def test_vector_project():

    v1 = m3d.Vector(1, 1, 1)
    v2 = m3d.Vector(2, 2, 2)

    vx = m3d.Vector(1, 0, 0)
    vy = m3d.Vector(0, 1, 0)
    vz = m3d.Vector(0, 0, 1)

    assert v1.project(vx) == vx
    assert v1.project(vy) == vy
    assert v1.project(vz) == vz

    assert v1.project(v2) == v1
    assert v2.project(v1) == v2
Example #13
0
def test_vector_angle():

    v1 = m3d.Vector(1, 1, 1)
    v2 = m3d.Vector(2, 2, 2)

    vx = m3d.Vector(1, 0, 0)
    vy = m3d.Vector(0, 1, 0)
    vz = m3d.Vector(0, 0, 1)

    assert vx.angle(vx) == 0
    assert vx.angle(vy) == np.pi / 2
    assert vx.angle(vz) == np.pi / 2

    assert v1.angle(v2) == 0
    assert v2.angle(v1) == 0
Example #14
0
def test_eq():
    t = m3d.Transform()
    t.orient.rotate_yb(1)
    t.orient.rotate_zb(1)
    t.pos.x = 1
    v = m3d.Vector()
    o = m3d.Orientation()
    with pytest.raises(ValueError):
        assert t != v
    with pytest.raises(ValueError):
        assert v != t
    with pytest.raises(ValueError):
        assert o != v
    t2 = t.copy()
    assert t == t2
    assert t.pos == t2.pos
    assert t.orient == t2.orient
    t2.pos.y = 2
    assert t != t2
    assert t.pos != t2.pos
    assert t.orient == t2.orient
    t3 = t.copy()
    t3.orient.rotate_xb(1)
    assert t2.pos != t3.pos
    assert t2.orient != t3.orient
    assert t != t3
Example #15
0
def test_transform_init_ref():
    v = m3d.Vector(1, 2, 3)
    o = m3d.Orientation()
    o.rotate_zb(1)
    t = m3d.Transform(o, v)
    assert t.orient == o
    o.rotate_xb(1)
    assert t.orient != o
Example #16
0
def test_from_axis_angle():
    axis_tuple = (1, 2, 3)
    axis_normalized = m3d.Vector(axis_tuple).normalized()
    angle = 10

    o1 = m3d.Orientation.from_axis_angle(axis_tuple, angle)
    o2 = m3d.Orientation.from_axis_angle(axis_normalized, angle)
    assert o1.similar(o2, CONVERTION_ERROR)
Example #17
0
def test_rotation():
    t = m3d.Transform()
    t.pos.x = 1
    t.orient.rotate_yb(1)
    res = m3d.Transform(
        m3d.Orientation([[0.54030228, 0, 0.84147096], [0., 1, 0.],
                         [-0.84147096, 0., 0.54030228]]), m3d.Vector(1, 0, 0))
    assert _are_equals(res.data, t.data)
Example #18
0
def test_inverse_orient():
    o = m3d.Orientation()
    o.rotate_xb(3)
    o.rotate_yb(1)
    o.rotate_xb(1)
    v = m3d.Vector(-1, -2, -3)
    assert o * v != v
    assert o.inverse() * o * v == v
    assert o * o.inverse() * v == v
    assert o * o.inverse() * o == o
Example #19
0
def test_init():
    t = m3d.Transform()
    assert t.pos.x == 0
    assert t.pos.y == 0
    t.pos.x = 2
    assert t.pos.x == 2

    i = t.inverse()
    assert m3d.Vector(-2, 0, 0) == i.pos
    assert m3d.Orientation() == i.orient
Example #20
0
def test_inverse_2():
    t = m3d.Transform()
    t.pos.x = 1
    t.pos.z = 3
    t.orient.rotate_yb(1)
    t.orient.rotate_zb(1)
    v = m3d.Vector(2, 3, 4)
    assert v != t * v
    assert v == t.inverse() * t * v
    assert v == t * t.inverse() * v
    assert v != t @ v
    assert v == t.inverse() @ t @ v
    assert v == t @ t.inverse() @ v
Example #21
0
def test_rotation_seq_2():
    t = m3d.Transform()
    t.pos.x = 1
    t.pos.z = 3
    t.orient.rotate_xb(1)
    t.orient.rotate_yb(2)
    t.orient.rotate_zb(3)

    b = m3d.Transform()
    b.orient.rotate_zb(-3)
    b.orient.rotate_yb(-2)
    b.orient.rotate_xb(-1)
    b.pos = b.orient * m3d.Vector(1, 0, 3) * -1

    assert _are_equals(t.inverse().data, b.data)
Example #22
0
def test_transform_init():
    v = m3d.Vector(1, 2, 3)
    o = m3d.Orientation()
    o.rotate_zb(1)
    t = m3d.Transform(o, v)
    assert t.pos == v
    assert t.orient == o
    t2 = m3d.Transform(o.data, v.data)
    assert t2.pos == v
    assert t2.orient == o
    assert t == t2
    with pytest.raises(ValueError):
        m3d.Transform(np.array([1, 2, 3]), np.array([1, 2, 3]))
    with pytest.raises(ValueError):
        m3d.Transform(o.data, np.array([1, 2]))
Example #23
0
def test_inverse():
    t1 = m3d.Transform()
    t1.orient.rotate_xb(np.pi / 3)
    t1.pos.x = 1

    t2 = m3d.Transform()
    t2.orient.rotate_xb(-13 * np.pi / 6)
    t2.pos.x = 2.3

    v = m3d.Vector(0.1, -4.5, 3.0)

    tr = m3d.Transform()
    tr.orient.rotate_xb(np.pi)
    tr.pos.x = 3

    assert (t1 * t1.inverse()) == m3d.Transform(matrix=np.identity(4))
    assert (t1 * t1.inverse()) == m3d.Transform()
    assert (t2 * t2.inverse()) == m3d.Transform(matrix=np.identity(4))
    assert (t2 * t2.inverse()) == m3d.Transform()
    assert (t1 * t2 * t1.inverse() * t2.inverse()).similar(
        m3d.Transform(matrix=np.identity(4)), CONVERTION_ERROR)
    assert t1.inverse() * (t1 * v) == v
Example #24
0
def test_mult_trans():
    t1 = m3d.Transform()
    t1.orient.rotate_xb(np.pi / 2)
    t1.pos.x = 1

    t2 = m3d.Transform()
    t2.orient.rotate_xb(np.pi / 2)
    t2.pos.x = 2

    v = m3d.Vector(0, 0, 3)

    tr = m3d.Transform()
    tr.orient.rotate_xb(np.pi)
    tr.pos.x = 3

    tm = math3d.Transform()
    tm.orient.rotate_xb(np.pi / 2)
    tm.pos.x = 2
    vm = math3d.Vector(0, 0, 3)

    assert t1 * t2 * v == tr * v
    assert t1 @ t2 @ v == tr @ v
    assert _are_equals((t2 * v).data, (tm * vm)._data)
Example #25
0
def test_vector_angle_perp():

    v1 = m3d.Vector(1, 0, 0)
    v2 = m3d.Vector(1, 1, 0)
    v3 = m3d.Vector(1, -1, 0)

    vx = m3d.Vector(1, 0, 0)
    vy = m3d.Vector(0, 1, 0)
    vz = m3d.Vector(0, 0, 1)

    assert vx.angle(vx, vz) == 0
    assert vx.angle(vy, vz) == np.pi / 2
    assert vx.angle(vz, vy) == -np.pi / 2

    # Flip nominal direction for perpendicular vector
    assert vx.angle(vx, -vz) == 0
    assert vx.angle(vy, -vz) == -np.pi / 2
    assert vx.angle(vz, -vy) == np.pi / 2

    assert v1.angle(v2, vz) == -v1.angle(v2, -vz)
    assert v1.angle(v2, vz) == v1.angle(v3, -vz)
Example #26
0
def test_dist():
    v1 = m3d.Vector(1, 1, 1)
    v2 = m3d.Vector(2, 2, 2)
    v_res = v2.dist(v1)
    assert v_res == m3d.Vector(1, 1, 1).length
Example #27
0
def test_trans_init_except():
    with pytest.raises(ValueError):
        o = m3d.Vector(np.identity(5))
Example #28
0
def test_norm():
    v = m3d.Vector(1, 2, 3)
    v.normalize()
    assert abs(v.length - 1) <= m3d.float_eps
Example #29
0
def test_from_xy():
    x = m3d.Vector(1, 0, 0)
    y = m3d.Vector(0.01, 2.1, 0)
    orient = m3d.Orientation.from_xy(x, y)
    assert _are_equals(orient.data, np.identity(3), eps=0.1)
Example #30
0
def test_from_yz():
    y = m3d.Vector(0, 1, 0)
    z = m3d.Vector(0, 0.01, 0.1)
    orient = m3d.Orientation.from_yz(y, z)
    assert _are_equals(orient.data, np.identity(3), eps=0.1)