def test_s3(self): D_tet = xyz_volume((D, D, D, D, D, D)) a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) R_cube = 6 * make_tet(a, b, c)[1] self.assertAlmostEqual(D_tet * Syn3, R_cube, 4)
def test_phi_tet(self): "edges from common vertex: phi, 1/phi, 1" p = Vector((1, 0, 0)) q = Vector((1, 0, 0)).rotz(60) * PHI r = Vector((0.5, root3 / 6, root6 / 3)) * 1 / PHI result = make_tet(p, q, r) self.assertAlmostEqual(result[0], 1, 7)
def test_360(self): rV = Quaternion(0, 1, 0, 0) one_deg = radians(1) rQ = rotator(Vector((0, 1, 0)), one_deg) for _ in range(360): rV = rQ * rV * ~rQ self.assertTrue(rV.vector() == Vector((1, 0, 0)))
def test_s3(self): D_tet = Tetrahedron(D, D, D, D, D, D) a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) R_cube = 6 * make_tet(a, b, c)[1] self.assertAlmostEqual(D_tet.xyz_volume() * S3, R_cube, 4)
def test_xyz_cube(self): a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) R_octa = Tetrahedron(a.length(), b.length(), c.length(), (a - b).length(), (b - c).length(), (c - a).length()).xyz_volume() self.assertAlmostEqual(6 * R_octa, Decimal(1), 4) # good to 4 places
def test_quarter_octahedron(self): a = Vector((1, 0, 0)) b = Vector((0, 1, 0)) c = Vector((0.5, 0.5, root2 / 2)) tet = Tetrahedron(a.length(), b.length(), c.length(), (a - b).length(), (b - c).length(), (c - a).length()) self.assertAlmostEqual(tet.ivm_volume(), Decimal(1), 5) # good to 5 places
def test_octant(self): x = Vector((0.5, 0, 0)) y = Vector((0, 0.5, 0)) z = Vector((0, 0, 0.5)) tet = Tetrahedron(x.length(), y.length(), z.length(), (x - y).length(), (x - z).length(), (y - z).length()) self.assertAlmostEqual(tet.xyz_volume(), Decimal(1) / Decimal(6), 5) # good to 5 places
def test_s3(self): D_tet = Tetrahedron(D, D, D, D, D, D) a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) R_cube = 6 * Tetrahedron(a.length(), b.length(), c.length(), (a - b).length(), (b - c).length(), (c - a).length()).xyz_volume() self.assertAlmostEqual(D_tet.xyz_volume() * S3, R_cube, 4)
def __init__(self): # POV-Ray self.edge_color = "rgb <255/255, 20/255, 147/255>" self.edge_radius = 0.03 self.vert_color = "rgb <255/255, 20/255, 147/255>" self.vert_radius = 0.03 self.face_color = "rgb <0, 0, 0>" verts = {} verts['A'] = Vector((1, 0.5, math.sqrt(2) / 2)) verts['B'] = Vector((1, -0.5, math.sqrt(2) / 2)) verts['C'] = Vector((1, -0.5, -math.sqrt(2) / 2)) verts['D'] = Vector((1, 0.5, -math.sqrt(2) / 2)) verts['E'] = Vector((-1, 0.5, math.sqrt(2) / 2)) verts['F'] = Vector((-1, -0.5, math.sqrt(2) / 2)) verts['G'] = Vector((-1, -0.5, -math.sqrt(2) / 2)) verts['H'] = Vector((-1, 0.5, -math.sqrt(2) / 2)) self.name = "Cuboid" self.volume = 8 # per Concentric Hierarchy self.center = ORIGIN # 8 vertices self.vertexes = verts # 6 faces self.faces = (('A', 'B', 'C', 'D'), ('E', 'F', 'G', 'H'), ('A', 'E', 'F', 'B'), ('D', 'H', 'G', 'C'), ('A', 'E', 'H', 'D'), ('B', 'F', 'G', 'C')) self.edges = self._distill()
def test_octant(self): x = Vector((1/2,0,0)) y = Vector((0,1/2,0)) z = Vector((0,0,1/2)) tet = Tetrahedron(x.length(), y.length(), z.length(), (x-y).length(), (x-z).length(), (y-z).length()) self.assertAlmostEqual(tet.xyz_volume(), 1/6, 5) # good to 5 places
def test_xyz_cube(self): a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) tet = Tetrahedron(a.length(), b.length(), c.length(), (a-b).length(), (b-c).length(), (c-a).length()) self.assertAlmostEqual(6*tet.xyz_volume(), 1.0, 4) # good to 4 places
def test_octahedron(self): a = Vector((1,0,0)) b = Vector((0,1,0)) c = Vector((0.5,0.5,sqrt(2)/2)) tet = Tetrahedron(a.length(), b.length(), c.length(), (a-b).length(), (b-c).length(), (c-a).length()) self.assertAlmostEqual(tet.ivm_volume(), 1.0, 5) # good to 5 places
def test_s3(self): D_tet = Tetrahedron(D, D, D, D, D, D) a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) R_cube = 6 * Tetrahedron(a.length(), b.length(), c.length(), (a-b).length(), (b-c).length(), (c-a).length()).xyz_volume() self.assertAlmostEqual(D_tet.xyz_volume() * sqrt(9/8), R_cube, 4)
def test_xyz_area4(self): v1 = Vector((D, 0, 0)) v2 = Vector((0, D, 0)) xyz_area = make_tri(v1, v2)[1] self.assertAlmostEqual(xyz_area, 2)
def test_xyz_cube(self): a = Vector((0.5, 0.0, 0.0)) b = Vector((0.0, 0.5, 0.0)) c = Vector((0.0, 0.0, 0.5)) R_octa = make_tet(a, b, c) self.assertAlmostEqual(6 * R_octa[1], 1, 4) # good to 4 places
def test_quarter_octahedron(self): a = Vector((1, 0, 0)) b = Vector((0, 1, 0)) c = Vector((0.5, 0.5, root2 / 2)) tet = make_tet(a, b, c) self.assertAlmostEqual(tet[0], 1, 5) # good to 5 places
def test_octant(self): x = Vector((0.5, 0, 0)) y = Vector((0, 0.5, 0)) z = Vector((0, 0, 0.5)) tet = make_tet(x, y, z) self.assertAlmostEqual(tet[1], 1 / 6, 5) # good to 5 places
def test_area_martian3(self): qx = Vector((D,0,0)).quadray() qy = Vector((R,rt2(3)/2,0)).quadray() result = qx.area(qy) self.assertAlmostEqual(result, 1, 7)
def test_x(self): rV = Quaternion(0, 1, 0, 0) rQ = rotator(Vector((0, 1, 0)), pi) newQ = rQ * rV * ~rQ self.assertTrue(newQ.vector() == Vector((-1, 0, 0)))
def vector(self): return Vector((self.x, self.y, self.z))
def test_area_earthling1(self): vx = Vector((1,0,0)) vy = Vector((0,1,0)) result = vx.area(vy) self.assertAlmostEqual(result, 1)
def test_area_earthling2(self): vx = Vector((2,0,0)) vy = Vector((1,rt2(3),0)) result = vx.area(vy) self.assertAlmostEqual(result, 2*rt2(3))