Something went wrong on our end
Select Git revision
Preprocess.java
intersection.py 1.14 KiB
from operation_vector import *
from scene import *
class Intersection:
def __init__(self, position, normal, object):
self.position = position
self.normal = normal
self.object = object
def intersect(objet, ray):
o = ray.starting_point
l = ray.direction
if type(objet) is Sphere:
centre = objet.centre
r = objet.radius
a = l*l
diff = o-centre
b = 2*(l*diff)
c = diff*diff - r**2
delta = b**2 - 4*a*c
if delta > 0:
intersection = [(-b - delta**0.5)/(2*a), (-b + delta**0.5)/(2*a)]
elif delta == 0:
intersection = [-b/(2*a)]
else:
intersection = []
if len(intersection) == 0 or max(intersection) < 0:
return None
elif min(intersection) < 0:
position = o + l*max(intersection)
else:
position = o + l*min(intersection)
if diff.norm() >= r:
return Intersection(position, (position - centre).normalized(), objet)
else:
return Intersection(position, -(position - centre).normalized(), objet)