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