Skip to content
Snippets Groups Projects
Commit 796ba8a2 authored by Benjamin Koltes's avatar Benjamin Koltes
Browse files

triangles

parent 0021e603
Branches
No related tags found
No related merge requests found
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
from operation_vector import *
from scene import *
from math import atan, pi
class Intersection:
def __init__(self, position, normal, object):
......@@ -35,7 +36,38 @@ def intersect(objet, ray):
else:
return Intersection(position, -(position - centre).normalized(), objet)
elif type(objet) is Triangle:
i = (objet.v1 - objet.v0).normalized()
j = (objet.v2 - objet.v0).normalized()
n = (i^j).normalized()
if l*n == 0:
return None
px = ((objet.v0 - o)*n)/(l*n)
p = o + px*l
if not(pointInTriangle(p, objet.v0, objet.v1, objet.v2)):
return None
normal = -n*((l*n)/abs(l*n))
return Intersection(p, normal, objet)
else:
print('c',end = ' ')
def sameSide(p1, p2, a,b):
cp1 = (b-a)^(p1-a)
cp2 = (b-a)^(p2-a)
if cp1*cp2 >= 0:
return True
else:
return False
def pointInTriangle(p, a, b, c):
if sameSide(p, a, b, c) and sameSide(p, b, a, c) and sameSide(p, c, a, b):
return True
else:
return False
......@@ -45,7 +45,7 @@ class Vector:
return vector1 + (-1 * vector2)
def __repr__(self):
return 'Vector' + str(self.coord())
return 'Vector(' + str(list(self.coord())) + ')'
def __str__(self):
return '/ ' + str(self.x) + '\n| ' + str(self.y) + '\n\\ ' + str(self.z) + '\n'
......
......@@ -6,6 +6,13 @@ class Sphere:
self.radius = rayon
self.material = material
class Triangle:
def __init__(self, v0, v1, v2, material):
self.v0 = v0
self.v1 = v1
self.v2 = v2
self.material = material
class Material:
def __init__(self, color, ambiant, diffuse, specular, shininess, reflection):
self.color = color
......
File added
......@@ -14,21 +14,21 @@ materiau_sphere_rouge = Material(Vector((1,0,0)), .5, .3, .3, 100, .3)
materiau_sphere_blanche = Material(Vector((1,1,1)), .5, .3, .3, 100, 0)
materiau_sphere_verte= Material(Vector((0,1,0)), .5, .3, .3, 100, .3)
c = (8+2*(3**.5))**.5
l = 0+0*((c**2 - 4)**.5)
v0 = Vector([0,0,2+l])
v1 = Vector([0,2,2+l])
v2 = Vector([2,0,2+l])
l = ((c**2 - 4)**.5)
v3 = Vector([0,0,2])
#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
v1 = Vector([2,0,4])
v2 = Vector([-1,l,4])
v0 = Vector([-1,-l,4])
triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
#triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
lumiere = Spotlight(Vector((1,1,0)), Vector((1,1,1)))
scene = Scene()
#scene.add_object(sphere_blanche)
#scene.add_object(triangle_bleu)
#scene.add_object(triangle_rouge)
scene.add_object(triangle_blanc)
scene.add_object(triangle_vert)
scene.add_object(triangle_bleu)
scene.add_object(triangle_rouge)
#scene.add_object(triangle_blanc)
scene.add_light(lumiere)
affiche = raytracer_render(camera, scene)
imsave('try.png',affiche)
......
......@@ -25,18 +25,18 @@ c = (8+2*(3**.5))**.5
l = (c**2 - 4)**.5
v0 = Vector([0,2,2+l])
v1 = Vector([3**.5,-1,2+l])
v2 = Vector([3**.5,-1,2+l])
v2 = Vector([-3**.5,-1,2+l])
v3 = Vector([0,0,2])
#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
#triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
scene = Scene()
lumiere = Spotlight(Vector([0,0,0]), Vector([1,1,1]))
#scene.add_object(sphere_blanche)
#scene.add_object(triangle_bleu)
#scene.add_object(triangle_rouge)
scene.add_object(triangle_blanc)
scene.add_object(triangle_vert)
scene.add_object(triangle_bleu)
scene.add_object(triangle_rouge)
#scene.add_object(triangle_blanc)
scene.add_light(lumiere)
affiche = np.zeros((nx, ny, 3))
rows = list(range(nx))
......
scripts/triangle.png

1.5 KiB

scripts/try.png

1.57 KiB | W: | H:

scripts/try.png

955 B | W: | H:

scripts/try.png
scripts/try.png
scripts/try.png
scripts/try.png
  • 2-up
  • Swipe
  • Onion skin
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment