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
 def construit_image (self, screen):
     """construit l'image de synthèse où screen est un objet du module pygame"""
     count   = 0
     nbpixel = int (self.dim [0] * self.dim [1] / 100)
     for y in range (0, self.dim [1]) :
         for x in range (0, self.dim [0]) :
             p = base.pixel (x,y)
             r = self.construit_rayon (p)
             c = self.rayon_couleur (r, True)
             q = (p.x,self.dim [1] - p.y - 1) 
             d = (int (c.x * 255), int (c.y * 255), int (c.z * 255))
             pygame.draw.line (screen, d, q,q)
             count += 1
             if count % 150 == 0 : pygame.display.flip ()
             if count % nbpixel == 0 : print ("avancement " , count // nbpixel , "%")
     pygame.display.flip ()
        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)
    

示例#4
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)