Skip to content
Snippets Groups Projects
Select Git revision
  • b93032f94daa334a369b9a5fccf0a8c2ba04a808
  • master default
2 results

Preprocess.java

Blame
  • 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)