Partage
  • Partager sur Facebook
  • Partager sur Twitter

créer un disque

SDL C++

29 mai 2007 à 13:44:59

Bonjour,
Quelqu'un aurrait il une astuce pour dessiner un disque avec avec la SDL ?

Merci de vos réponses :)
  • Partager sur Facebook
  • Partager sur Twitter
29 mai 2007 à 14:37:58

Si tu connais les équations de cercle c'est très simple et même si tu ne les connais pas c'est simple aussi :p je t'explique le principe ^^ :
Une équation de cercle est défini de la façon suivante : (x-a)^2 + (y-b)^2 = R^2, avec (a,b) les coordonnées du centre du cercle et R le rayon du cercle. On va prendre un exemple tout bête imaginons le cercle de centre O(10,10) et de rayon 5.
Ca donne la chose suivante : (x-10)^2 +(y-10)^2 = 25
donc : x^2 + y^2 -20x -20y +200 = 25
donc : x^2 + y^2 -20x -20y +175 = 0
Après quoi tu calcules les coordonnées des points avec l'abscisse la plus petite et la plus grande ici donc ca va nous donner :
Lorsque y = 10 : x^2 -20x +75 =0 à ce moment là tu résouds un bête polynôme : delta = 400 - 300 = 100
x1 = (20 + racine de 100)/2 = 15
x2 = (20 - racine de 100)/2 = 5
Ce qui nous donne les points de coordonnées (15,10) et (5,10).
Ensuite tu n'as plus qu'as utilisé le tuto du site qui t'explique comment dessiner pixel par pixel et après quoi tu n'as plus qu'à incrémenter la valeur de x en partant de 5 jusqu'à 15 et à chaque fois à résoudre un polynôme pour trouver les y correspondant.

En conclusion : crée d'abord une fonction qui te permettra de calculer un polynôme puis une fonction qui te calculera les coordonnées des points d'un cercle.
Ca peut sembler barbare mais c'est comme cela que j'aurais procédé, sinon passe à OpenGl tu as des fonctions toutes faites pour ça.
En espérant avoir pu t'aider ;) .

Edit : Je viens de me rendre compte que tu voulais dessiner un disque et non pas un cercle. Le principe est le même une fois que tu as obtenu ton cercle tu part d'un point du cercle par exemple (5,10) puis après tu crées une fonction qui te permettra de faire les choses suivantes :
D'abord d'augmenter la valeur du x.
Ensuite de récupérer les ordonnées correspondantes à cette abscisse (Cf ton polynôme)
Ensuite de colorer le segment entre ces deux points (pas bien compliquer tu pars d'un des deux points et tu augmentes la valeur de l'ordonnée jusqu'à ce qu'elle atteigne l'autre ordonnée et à chaque fois tu dessines pixel par pixel)
Puis tu réhitères ces étapes jusqu'à aariver à l'autre bout du cercle.
C'est encore plus barbare que pour le cercle mais je pense que ça devrait marcher :p .
Bonne chance à toi ^^ .
  • Partager sur Facebook
  • Partager sur Twitter
29 mai 2007 à 14:47:39

OK merci

Mais dans le tuto "SDL : modifier une image pixel par pixel", Piwaï fait lui même sa fonction pour changer la couleur d'un pixel (je ne me trompe pas, hein....).

Donc il n'existe pas de fonction pour cela en SDL ????
  • Partager sur Facebook
  • Partager sur Twitter
30 mai 2007 à 14:09:59

Alors tu n'as qu'à binder que des tout petit carré de taille |2 2|
  • Partager sur Facebook
  • Partager sur Twitter