コード例 #1
0
 def construit_rayon (self, pixel) :
     """construit le rayon correspondant au pixel pixel"""
     x = (pixel.x - self.dim [0] / 2) * math.tan (self.alpha / 2) / min (self.dim)
     y = (pixel.y - self.dim [1] / 2) * math.tan (self.alpha / 2) / min (self.dim)
     v = base.vecteur (x,y,1)
     r = base.rayon (self.repere.origine, self.repere.coordonnees (v), \
                         pixel, base.couleur (1,1,1))
     return r
コード例 #2
0
 def rayon_reflechi(self, rayon, p):
     """retourne le rayon réfléchi au point p de la surface,
     si aucune, retourne None"""
     if p == rayon.origine: return None
     n = self.normale(p, rayon)
     n = n.renorme()
     y = n.scalaire(rayon.direction)
     d = rayon.direction - n * y * 2
     r = base.rayon(p, d, rayon.pixel, rayon.couleur * self.reflet)
     return r
コード例 #3
0
 def rayon_reflechi (self, rayon, p) :
     """retourne le rayon réfléchi au point p de la surface,
     si aucune, retourne None"""
     if p == rayon.origine : return None
     n = self.normale (p, rayon)
     n = n.renorme ()
     y = n.scalaire (rayon.direction)
     d = rayon.direction - n * y * 2
     r = base.rayon (p, d, rayon.pixel, rayon.couleur * self.reflet)
     return r
コード例 #4
0
 def sources_atteintes (self, p) : 
     """retourne la liste des sources atteintes depuis une position p de l'espace,
     vérifie qu'aucun objet ne fait obstacle"""
     res = []
     for s in self.sources:
         r   = base.rayon (s.origine, p - s.origine, base.pixel (0,0), s.couleur)
         o,i = self.intersection (r)
         if i == None : continue
         if (i - p).norme2 () < 1e-10 :   # possible problème d'arrondi
             res.append (s)
             continue
     return res
コード例 #5
0
        return v
        
    def normale (self, p, rayon) :
        """retourne la normale au point de coordonnée p"""
        v = (p - self.centre) / self.rayon
        return v     
        
    def couleur_point (self, p) :
        """retourne la couleur au point de coordonnée p"""
        return self.couleur
        
    def __str__ (self):
        """affichage"""
        s  = "sphère --- centre : " + str (self.centre)
        s += " rayon : " + str (self.rayon)
        s += " couleur : " + str (self.couleur)
        return s
        
        
        
if __name__ == "__main__" :
    s = sphere (base.vecteur (0,0,0), 5, base.couleur (0,1,0))
    r = base.rayon (    base.vecteur (10,0,0), base.vecteur (1,0,0), \
                        base.pixel (0,0), base.couleur (0,0,0))
    print (s)
    print (r)
    p = s.intersection (r)
    print (p)
    

コード例 #6
0
        if l == None: return None

        v = r.origine + r.direction * l
        return v

    def normale(self, p, rayon):
        """retourne la normale au point de coordonnée p"""
        v = (p - self.centre) / self.rayon
        return v

    def couleur_point(self, p):
        """retourne la couleur au point de coordonnée p"""
        return self.couleur

    def __str__(self):
        """affichage"""
        s = "sphère --- centre : " + str(self.centre)
        s += " rayon : " + str(self.rayon)
        s += " couleur : " + str(self.couleur)
        return s


if __name__ == "__main__":
    s = sphere(base.vecteur(0, 0, 0), 5, base.couleur(0, 1, 0))
    r = base.rayon (    base.vecteur (10,0,0), base.vecteur (1,0,0), \
                        base.pixel (0,0), base.couleur (0,0,0))
    print(s)
    print(r)
    p = s.intersection(r)
    print(p)