예제 #1
0
def main(filename, second):
    lst = []
    count = 0
    with open(filename) as f:
        num = 1
        ll = [[], [], []]
        for l in f.readlines():
            print "-----%s----" % l.strip()
            if not second:
                print l
                t = Triangle(l.strip())

                if t.isValid():
                    count += 1
            else:
                splitz = l.strip().split()
                for i in range(3):
                    ll[i].append(splitz[i])
                if num != 0 and num % 3 == 0:
                    print ll
                    for i in range(3):
                        t = Triangle(" ".join(ll[i]))
                        if t.isValid():
                            count += 1
                    ll = [[], [], []]
            num += 1

    print "\nFirst Answer: %d" % count
	def add_edges(self, triangle, point):
		def index_of_other_triangle_in_its_side_edges(line, triangle):
			if line.triangle1 == triangle : return 1
			return 2
		l1, l2, l3 = triangle.sort_lines()

		line1 = Line(l1.point1, point)
		line2 = Line(l2.point1, point)
		line3 = Line(l3.point1, point)

		tri1 = Triangle(triangle.line1, line1, line2)
		tri2 = Triangle(triangle.line2, line3, line2)
		tri3 = Triangle(triangle.line3, line1, line3)

		line1.set_triangles(tri1, 1)
		line1.set_triangles(tri3, 2)

		line2.set_triangles(tri1, 1)
		line2.set_triangles(tri2, 2)

		line3.set_triangles(tri3, 1)
		line3.set_triangles(tri2, 2)

		triangle.line1.set_triangles(tri1, index_of_other_triangle_in_its_side_edges(triangle.line1, triangle))
		triangle.line2.set_triangles(tri2, index_of_other_triangle_in_its_side_edges(triangle.line2, triangle))
		triangle.line3.set_triangles(tri3, index_of_other_triangle_in_its_side_edges(triangle.line3, triangle))

		triangle.triangles += [tri1, tri2, tri3]

		point.neighbours += [l1.point1, l2.point1, l3.point1]
		l1.point1.neighbours.append(point)
		l2.point1.neighbours.append(point)
		l3.point1.neighbours.append(point)
예제 #3
0
	def __init__(self, screen2D=[256, 256], primitives=[] , lights=[] , camerapos=Vector(0, 0, 0), O=Vector(0, 0, 0), U=Vector(0, 0, 0), V=Vector(0, 0, 0)):
		self.lights = lights
		self.camerapos = camerapos
		self.viewportpos = Viewport(O=O, U=U, V=V)
		self.list_of_primitives = []
		self.primitives = primitives 
		self.screen2D = Screen2D(screen2D[0], screen2D[1])
		self.size = self.screen2D.image.size

		
		# cornell box components
		triangle_back_1 = Triangle(a= Vector(0, 0, 10), b= Vector(20, 0, 10), c= Vector(0, 20, 10), color= Vector(247, 195, 49))
		triangle_right_1 = Triangle(a= Vector(10, 20, 0), b= Vector(10, 0, 20), c= Vector(10, 0, 0), color= Vector(70, 130, 180))
		triangle_top_1 = Triangle(a= Vector(0, 10, 0), b= Vector(20, 10, 0), c= Vector(0, 10, 20), color= Vector(176, 224, 230))
		triangle_left_1 = Triangle(a= Vector(0, 0, 0), b= Vector(0, 0, 20), c= Vector(0, 20, 0), color= Vector(215, 57, 37))
		triangle_bottom_1 = Triangle(a= Vector(0, 0, 0), b= Vector(20, 0, 0), c= Vector(0, 0, 20), color= Vector(205, 205, 201))
		


		for prim in self.primitives:
			print "prim", prim
			self.list_of_primitives.append(prim)


		# appending cornell box componenet to the list_of_primitives  
		self.list_of_primitives.append(triangle_back_1)
		self.list_of_primitives.append(triangle_right_1)
		self.list_of_primitives.append(triangle_top_1)
		self.list_of_primitives.append(triangle_left_1)
		self.list_of_primitives.append(triangle_bottom_1)
	
		#calculate ambient illumination for the point_light
		self.ambient = self.lights[0].ambient_illumination()
예제 #4
0
def test_point_reference():
    """
    Fonction de test de la methode point de reference
    """
    triangle = Triangle((2, 0, 0), (4, 0, 0), (2, 0, 3))
    print(triangle.point_reference(2))
    triangle = Triangle((2, 1, -1), (4, 3, -1), (2, 5, 8))
    print(triangle.point_reference(-1))
예제 #5
0
파일: VillaEmo.py 프로젝트: romatre/ggpl
 def __init__(self):
     self.planimetry = Factory.create_planimetry()
     self.column = Factory.create_column()
     self.gorgeous_column = GorgeousColumn(5, 18)
     self.top_triangle = Triangle(42, 10)
     self.lateral_roof = Triangle(52, 201)
     self.main_roof = Roof(72, 65.16, 16)
     self.arch = Arch(4, 15, 1.5)
예제 #6
0
 def test_classify_triangle(self):
     t1 = Triangle(1, 2, 3)
     t2 = Triangle(3, 4, 5)
     t3 = Triangle(3, 3, 3)
     t4 = Triangle(4, 4, 5)
     assert t1.classify_triangle().lower() == "scalene"
     assert t2.classify_triangle().lower() == "scalene"
     assert t3.classify_triangle().lower() == "equilateral"
     assert t4.classify_triangle().lower() == "isosceles"
예제 #7
0
 def test_isRightTriangle(self):
     t1 = Triangle(1, 2, 3)
     t2 = Triangle(3, 4, 5)
     t3 = Triangle(3, 3, 3)
     t4 = Triangle(4, 4, 5)
     assert t1.isRightTriangle() == False
     assert t2.isRightTriangle() == True
     assert t3.isRightTriangle() == False
     assert t4.isRightTriangle() == False
예제 #8
0
    def createObjects(self):
        #self.objects = importObjects("objects.txt")

        v = Vector3(-100,0,0)
        self.objects =[
            Triangle(Vector3(0,0,0)+v, Vector3(40,0,0)+v, Vector3(20,140,-10)+v, ['red']),
            Triangle(Vector3(-40,20,-10)+v, Vector3(100,0,0)+v, Vector3(100,40,0)+v, ['green']),
            Triangle(Vector3(60,100,0)+v, Vector3(80,-40,-10)+v, Vector3(100,100,0)+v, ['blue']),
            Triangle(Vector3(0,100,0)+v, Vector3(0,60,0)+v, Vector3(140,80,-10)+v, ['orange']),
        ]
예제 #9
0
파일: VillaEmo.py 프로젝트: romatre/ggpl
 def get_top_triangle(self):
     height_base = 9
     return T([1, 2, 3])([230, 108, 41])((STRUCT([
         T(2)(-26)(self.texture("intonaco.jpg", 5,
                                5)(CUBOID([42, 5, height_base]))),
         self.texture("tegole.jpg", 1,
                      2)(T(3)(height_base)(Triangle(42, 27).render())),
         T([2, 3])([-26.5,
                    height_base])(self.texture("fronte.jpg", 35.,
                                               31.)(Triangle(42,
                                                             1).render())),
     ])))
예제 #10
0
def intersection():
    """
    fonction de test d'intersection sur un tetraedre simple
    """
    #pylint: disable=C0103
    t1 = Triangle((0, 0, 0), (1, 0, 0), (0, 0, 1))
    t2 = Triangle((0, 0, 0), (0, 1, 0), (0, 0, 1))
    t3 = Triangle((1, 0, 0), (0, 0, 1), (0, 1, 0))
    tranche = Tranche(0.5)
    tranche.intersection_tranche([t1, t2, t3])
    print(tranche.segments)
    tranche.dessine_svg("tetraedre.svg", 1000, 1000)
예제 #11
0
def main():

    first = Triangle()

    print("\nTest if default is properly created\n")
    print("Default should be 3, 4 5 triangle and both scalene and right")
    print(" for default a is " + str(first.getA()) + " b is " +
          str(first.getB()) + " c is " + str(first.getC()))
    print("First is: ", end="")
    if first.isEquilateral():
        print(" equilateral ", end="")
    if first.isIsosceles():
        print(" isosceles ", end="")
    if first.isScalene():
        print(" scalene ", end="")
    if first.isRight():
        print(" right ", end="")

    print("\n\nTest setter methods\n")
    first.setA(2)
    first.setB(2)
    first.setC(3)
    print("Modified first should be 2, 2, 3 triangle and isoosceles")
    print(" for modified a is " + str(first.getA()) + " b is " +
          str(first.getB()) + " c is " + str(first.getC()))
    print("First now is: ", end="")
    if first.isEquilateral():
        print(" equilateral ", end="")
    if first.isIsosceles():
        print(" isosceles ", end="")
    if first.isScalene():
        print(" scalene ", end="")
    if first.isRight():
        print(" right ", end="")

    print("\n\nTest overloaded constructor\n")
    second = Triangle(4, 4, 4)
    print(
        "Second should be 4, 4, 4, triangle and should be both equilateral and isosceles"
    )
    print(" for second a is " + str(second.getA()) + " b is " +
          str(second.getB()) + " c is " + str(second.getC()))
    print("Second is: ", end="")
    if second.isEquilateral():
        print(" equilateral ", end="")
    if second.isIsosceles():
        print(" isosceles ", end="")
    if second.isScalene():
        print(" scalene ", end="")
    if second.isRight():
        print(" right ", end="")
예제 #12
0
def test_fonction_intersection_plan():
    """
    test la fonction, sachant que tri1 et tri2 sont en intersections, mais pas tri3.
    Le test doit renvoyer True True False
    """
    tri1 = Triangle((1, 2, 3), (4, 5, 6), (4, 5, 2))
    tri2 = Triangle((5, 2, 3), (4, 8, 6), (2, 5, 2))
    tri3 = Triangle((5, 2, 5), (4, 8, 6), (2, 5, 5))
    tri4 = Triangle((5, 2, 3), (4, 8, 3), (2, 5, 3))
    tranche = Tranche(4)
    print(tranche.intersecte_avec(tri1))
    print(tranche.intersecte_avec(tri2))
    print(tranche.intersecte_avec(tri3))
    print(tranche.intersecte_avec(tri4))
예제 #13
0
def main():
    rect = Rectangle()
    sq = square(6)
    tri = Triangle()
    rect.breadth = 5
    rect.length = 30

    sq.length = 6
    tri = Triangle()
    result1 = rect.area()
    result2 = tri.area()
    result3 = sq.area()
    #always observe the object used
    final = result3 + result2 + result1
    print("behold... the reuslt", final)
예제 #14
0
class Playground():
    Circle=Circle(6)
    Polygon=Polygon(3)
    Square=Square(5,2)
    Triangle=Triangle(1,4,2)
    Shape=Shape()
    
    # Implement __init__() for this class

    def __init__(self):
        print("The instances you created")

    # Call Method find_area of each class 

    print(f"{Circle} and area = {Circle.find_area()}")
    print(f"{Square} and area = {Square.find_area()}")
    print(f"{Triangle} and area = {Triangle.find_area()}")

    #find_circumference
    #find_perimeter
    # Call Methods find_circumference and find_perimeter of each class
    print(f"{Circle} and circumference = {Circle.find_circumference()}")
    print(f"{Square} and perimeter = {Square.find_perimeter()}")
    print(f"{Triangle} and perimeter = {Triangle.find_perimeter()}")

    def __str__(self):
        print("Playground...Shapes")
예제 #15
0
    def create_triangle_objects(self):
        """
        Yielded to save memory instead of adding each obj to memory(in a list)
        Create some checks on the file while looping through it
        Let user know
        :return:
        """
        with open(self._file, "r") as csv_file:
            csv_reader = csv.reader(csv_file)

            # Skip Headers
            next(csv_reader)
            c = 0
            for data in csv_reader:
                c += 1
                try:
                    if len(data) != 4:
                        print("Your file contains an error on line - ", c + 1,
                              " - ", data)
                        print("Only the first four indexes will be used.")
                        print("\n")
                    # product, origin_year, development_year, incremental_value
                    yield Triangle(data[0], data[1], data[2], data[3])
                except Exception as e:
                    print(e)
예제 #16
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_minimum_size(400, 300)
        glClearColor(0.2, 0.3, 0.2, 1.0)

        # Create object
        self.triangle = Triangle()
예제 #17
0
 def loadModel(self, path, mtl):
     """
     Loads a model from a obj and mtl file.
     Parmeters:
         path: String. The path to the obj file
         mtl: String. The path to the mtl file
     """
     mat = None
     if mtl is not None:
         for line in open(mtl):
             if "newmtl" in line:
                 # update current material
                 mat = line[7:].strip()
             elif line[0:2] == "Kd":
                 # add material colour
                 self.materials[mat] = (
                     Vec3(*(map(float, line[3:].strip().split()))))
     verts = []
     for line in open(path):
         # If line is a vertex
         if line[0] == "v":
             # Add vertex
             verts.append(
                 Vec3(*(map(float, line[1:].strip().split(" ")))))
         # If line is a face
         if line[0] == "f":
             # add face
             a = line[1:].strip().split(" ")
             self.addPrimitive(
                 Triangle(*[Copy(verts[int(i) - 1]) for i in a], mat))
         # if line is a material declaration
         if "usemtl" in line:
             mat = line[7:].strip()  # Update material
예제 #18
0
def read_msh_file(name, **kwargs):
    print 'Reading MSH file'
    d = {}
    lmsh = open(name + '.msh', 'r').readlines()
    d['faces'] = {}
    physical_correspondance = {}
    for i, l in enumerate(lmsh):
        if '$PhysicalNames' in l:
            N = int(lmsh[i + 1])
            for j in range(N):
                il = i + j + 2
                lpn = lmsh[il].split()
                number = int(lpn[1])
                name = str(lpn[2].replace('\"', ''))
                d['faces'][name] = []
                physical_correspondance[name] = number
            i = i + N + 2
            break
    i0 = i
    print physical_correspondance
    for i, l in enumerate(lmsh):
        if '$Nodes' in l:
            d['vertices'] = []
            N = int(lmsh[i + 1])
            for j in range(N):
                il = i + j + 2
                lpn = lmsh[il].split()
                pt = Point([float(lpn[1]), float(lpn[2]), float(lpn[3])])
                d['vertices'].append(pt)
            i = i + N + 2
            break
    i0 = i
    flog = open('logFMS', 'w')
    for i, l in enumerate(lmsh):
        if '$Elements' in l:
            N = int(lmsh[i + 1])
            for j in range(N):
                il = i + j + 2
                lpn = lmsh[il].split()
                if int(lpn[1]) == 2:
                    print lpn
                    flog.write('triangle :' + str(int(lpn[0])) + '\n')
                    tags = int(lpn[2])
                    phys = int(lpn[1 + tags])
                    flog.write('physical :' + str(phys) + '\n')
                    p0 = int(lpn[2 + tags + 1]) + 1
                    p1 = int(lpn[2 + tags + 2]) + 1
                    p2 = int(lpn[2 + tags + 3]) + 1
                    for group in d['faces']:
                        if phys == physical_correspondance[group]:
                            flog.write('triangle belongs to ' + group + '\n')
                            # why is this triangle written reversed ?
                            tri = (p2 - 1, p1 - 1, p0 - 1)
                            #pt = ((p2-1,p1-1,p0-1),k[0]-1)
                            d['faces'][group].append(Triangle(tri))
                            break
            i = i + N + 2
            break
    i0 = i
    return Triangulation(**d)
예제 #19
0
def objRead(fn):

    vertices = []
    indices = []
    with open(fn, "r") as f:
        for line in f:
            if line[0] == "#":
                continue
            if line[-1] == "\n" or line[-1] == "\r":
                line = line[:-1]
            temp = line.split(" ")
            if temp[0] == "v":
                vertices.append(
                    np.array([
                        float(temp[1]) * 30 + 8.0,
                        float(temp[2]) * 30,
                        float(temp[3]) * 30 - 30
                    ]))
            elif temp[0] == "f":
                indices.append((int(temp[1]), int(temp[2]), int(temp[3])))
    iteml = []

    print len(vertices)
    print len(indices)
    for item in indices:
        p1 = vertices[item[0] - 1]
        p2 = vertices[item[1] - 1]
        p3 = vertices[item[2] - 1]
        tri = Triangle(p1, p2, p3, np.array([0.5, 1.0, 0.8]), 0.02, 0.75, 1,
                       30, 0.0)
        iteml.append(tri)

    return iteml
예제 #20
0
    def __init__(self, triangles):
        triLst = []
        self.adjLst = [] # triangles
        if isinstance(triangles, Triangulator):
            # get the full list of triangles because we can't search a partial list
            for i in range(0, triangles.getNumTriangles()):
                v0 = triangles.getVertex(triangles.getTriangleV0(i))
                v1 = triangles.getVertex(triangles.getTriangleV1(i))
                v2 = triangles.getVertex(triangles.getTriangleV2(i))
                self.adjLst.append(AdjLstElement(Triangle(Point3(v0.x, v0.y, 0),
                                                      Point3(v1.x, v1.y, 0),
                                                      Point3(v2.x, v2.y, 0)), i))
        elif isinstance(triangles, AdjacencyList):
            for i in range(0, len(triangles.adjLst)):
                self.adjLst.append(AdjLstElement(triangles.adjLst[i].tri, i))
        else:  # should be a list or a Triangulator
            for i in range(0, len(triangles)):
                self.adjLst.append(AdjLstElement(triangles[i].tri, i))

        # adjLst in the form [(triangle, n12, n23, n13)] i.e. n12 is the triInd across verts 1 & 2
        # find the neighbours
        for j in range(0, len(self.adjLst)):
            for k in range(0, len(self.adjLst)):
                if j != k:
                    nayb = getSharedEdgeStr(self.adjLst[j], self.adjLst[k])
                    if nayb == '12':
                        self.adjLst[j].n12 = k
                    if nayb == '23':
                        self.adjLst[j].n23 = k
                    if nayb == '13':
                        self.adjLst[j].n13 = k
def get_rand_area(c):
    p1 = c.random_point_on_circumference()
    p2 = c.random_point_inside()
    p3 = c.random_point_inside()
    t = Triangle(p1, p2, p3)
    print('{0} with area {1:.2f}'.format(t, t.area()))
    return t.area()
예제 #22
0
def initializeT(points):
    # Create array of points T
    t = []
    d = {}

    # Find the extreme coordinates in points
    extremes = getExtremes(points)
    minx = extremes[0]
    maxx = extremes[1]
    miny = extremes[2]
    maxy = extremes[3]

    # Add three points for the bounding triangle
    midx = (minx + maxx) / 2
    midy = (miny + maxy) / 2
    dx = maxx - minx
    dy = maxy - miny
    p0 = Point(-100000, -100000, -1)
    p1 = Point(100000, -100000, -1)
    p2 = Point(0, 100000, -1)
    tr = Triangle(p0, p1, p2)
    t.append(tr)

    # Update the dictionary
    d[(p0, p1)] = [tr]
    d[(p1, p2)] = [tr]
    d[(p2, p0)] = [tr]

    # Return T
    return t, d
예제 #23
0
파일: main.py 프로젝트: 18jreid/MyProjects
def drawObject(mesh, xOffset=0, yOffset=0, zOffset=0, vCamera=Vec3d(0, 0, 0)):
    trianglesToRaster: list[Triangle] = []
    for tri in mesh.getMesh():
        triTranslated = Triangle(Vec3d(1, 1, 1), Vec3d(1, 1, 1),
                                 Vec3d(1, 1, 1))
        triRotatedZ = Triangle(Vec3d(1, 1, 1), Vec3d(1, 1, 1), Vec3d(1, 1, 1))
        triRotatedZX = Triangle(Vec3d(1, 1, 1), Vec3d(1, 1, 1), Vec3d(1, 1, 1))

        # Rotate object
        multiplyMatrixVector(tri.getV0(), triRotatedZ.getV0(), matRotZ)
        multiplyMatrixVector(tri.getV1(), triRotatedZ.getV1(), matRotZ)
        multiplyMatrixVector(tri.getV2(), triRotatedZ.getV2(), matRotZ)
        multiplyMatrixVector(triRotatedZ.getV0(), triRotatedZX.getV0(),
                             matRotY)
        multiplyMatrixVector(triRotatedZ.getV1(), triRotatedZX.getV1(),
                             matRotY)
        multiplyMatrixVector(triRotatedZ.getV2(), triRotatedZX.getV2(),
                             matRotY)

        # Add coordinate offset
        triTranslated = triRotatedZX
        triTranslated.getV0().setZ(triRotatedZX.getV0().getZ() + zOffset +
                                   vCamera.getZ())
        triTranslated.getV1().setZ(triRotatedZX.getV1().getZ() + zOffset +
                                   vCamera.getZ())
        triTranslated.getV2().setZ(triRotatedZX.getV2().getZ() + zOffset +
                                   vCamera.getZ())
        triTranslated.getV0().setY(triRotatedZX.getV0().getY() + yOffset +
                                   vCamera.getY())
        triTranslated.getV1().setY(triRotatedZX.getV1().getY() + yOffset +
                                   vCamera.getY())
        triTranslated.getV2().setY(triRotatedZX.getV2().getY() + yOffset +
                                   vCamera.getY())
        triTranslated.getV0().setX(triRotatedZX.getV0().getX() + xOffset +
                                   vCamera.getX())
        triTranslated.getV1().setX(triRotatedZX.getV1().getX() + xOffset +
                                   vCamera.getX())
        triTranslated.getV2().setX(triRotatedZX.getV2().getX() + xOffset +
                                   vCamera.getX())

        trianglesToRaster.append(triTranslated)

    trianglesToRaster.sort(key=lambda x: (
        (x.getV0().getZ() + x.getV1().getZ() + x.getV2().getZ()) / 3),
                           reverse=True)

    rasterTriangles(trianglesToRaster)
예제 #24
0
    def test_get_intersect(self):

        T = Triangle()
        result = T.get_intersect(Vector(0.0, 0.0, 0.0), Vector(1.0, 1.0, -0.5))
        self.assertEqual(result, False)

        result = T.get_intersect(Vector(0.0, 0.0, 0.0),
                                 Vector(-1.0, -1.0, 1.0))
        self.assertEqual(result, False)

        result = T.get_intersect(Vector(2.0, 0.0, 0.0), Vector(-2.0, 2.0, 0.0))
        self.assertEqual(result, False)

        T = Triangle(Vector(1.0, 0.0, 0.0), Vector(0.0, 0.0, 1.0),
                     Vector(0.0, 1.0, 0.0))
        result = T.get_intersect(Vector(0.0, 0.0, 0.0), Vector(1.0, 1.0, 1.0))
        self.assertEqual(result, True)
예제 #25
0
 def test_triangle_positive_init(self):
     """Positive test of Triangle.__init__ method."""
     t = Triangle(Point(1, 1), Point(2, 3), Point(4, 5))
     self.assertEqual(
         str(t), '((1.0, 1.0), (2.0, 3.0), (4.0, 5.0))',
         "Test of Triangle(Point(0, 0), Point(8, 0), Point(4, 5)) failed,\
                       returned value != ((1.0, 1.0), (2.0, 3.0), (4.0, 5.0))."
     )
예제 #26
0
    def test_triangle_negative_init_wrong_argument_type(self):
        """Negative test of Triangle.__init__ method. Wrong type of arguments."""
        with self.assertRaises(ValueError) as err:
            Triangle('foo', Point(1, 3), 'bar')
            self.assertEqual(
                err.args[0],
                "Given points belong to one line and can not define triangle.",
                "Triangle('foo', Point(1, 3), 'bar') failed, no ValueError was raised."
            )

        with self.assertRaises(ValueError) as err:
            Triangle(42, Point(1, 3), 21)
            self.assertEqual(
                err.args[0],
                "Given points belong to one line and can not define triangle.",
                "Triangle(42, Point(1, 3), 21) failed, no ValueError was raised."
            )
예제 #27
0
def test_calcul_intersection():
    """
    Fonction de test sur la formule du caclul d'intersection
    """
    tranche = Tranche(2)
    segment = tranche.calcul_intersection(
        Triangle((2, 0, 0), (4, 0, 0), (2, 0, 3)))
    print(segment)
예제 #28
0
def triangle():
	if request.method == "GET":
		return jsonify({"area":"undefined"})
	elif request.method == "POST":
		amazing = request.json["amazing"]
		height = request.json["height"]
		this_triangle = Triangle(amazing, height)
		area = this_triangle.area()
		return jsonify({"triangle_area":area})
예제 #29
0
 def test_triangle_positive_is_equilateral_property(self):
     """Positive test of Triangle.is_equilateral property."""
     a = Point(-9, 10)
     b = Point(-1, 4)
     c = Point(3 * 3**0.5 - 5, 4 * 3**0.5 + 7)
     t = Triangle(a, b, c)
     self.assertTrue(
         t.is_equilateral,
         "Test of Triangle(Point(-9, 10), Point(-1, 4), Point(3 * 3 ** 0.5 - 5, 4 * 3 ** 0.5 + 7))\
                       failed, returned value != True.")
     a = Point(-9, 21)
     b = Point(-1, 4)
     c = Point(3 * 3**0.5 - 5, 4 * 3**0.5 + 7)
     t = Triangle(a, b, c)
     self.assertFalse(
         t.is_equilateral,
         "Test of Triangle(Point(-9, 21), Point(-1, 4), Point(3 * 3 ** 0.5 - 5, 4 * 3 ** 0.5 + 7))\
                       failed, returned value != False.")
예제 #30
0
 def triangle_list(self):
     _triangles = []
     for f in self['faces']:
         p0 = Point(self['vertices'][f[0] - 1])
         p1 = Point(self['vertices'][f[1] - 1])
         p2 = Point(self['vertices'][f[2] - 1])
         tr = Triangle((p0, p1, p2))
         _triangles.append(tr)
     return _triangles