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)
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()
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))
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)
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"
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
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']), ]
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())), ])))
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)
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="")
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))
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)
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")
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)
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()
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
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)
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
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()
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
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)
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)
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))." )
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." )
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)
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})
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.")
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