giudy
Messages postés4Date d'inscriptiondimanche 2 mars 2008StatutMembreDernière intervention 6 octobre 2008
-
6 oct. 2008 à 13:37
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 2016
-
9 oct. 2008 à 20:17
Bonjour ,
Je suis entrain d'écrire un programme qui trace un cercle (sans utiliser de fonctions trigonométriques , en tracé continu et les points calculés doivent être contigüs) .
J'ai illustré mon algorithme avec l'exemple suivant : je veux tracer un cercle de centre (10,10) et de rayon R=5 . On part du pixel de coordonnées (15,10) (qui appartient forcément au cercle) . Je commence par tracé le quart du cercle nord-est , sachant que le prochain pixel sera forcément soit celui qui se trouve immédiatement au nord (15,9) (ici d^2 qui est la distance au centre = 26) soit celui se trouvant à l'ouest (14,10)(pour celui là d^2=16) , soit celui au nord-ouest (14,9) ( pour celui ci d^2=17) .
Sachant que R^2=25 , on sélectionne le point dont la distance (au carré) au centre est la plus proche de 25 : j'ai pris le point de coordonnées (15,9). On répète cette opération jusqu'au point correspndant à pi/2 .
Je commence par écrire le programme C qui créé une fenêtre de 400*400 puis y trace un cercle de 100 pixels de rayon dont le centre se trouve aux coordonnées (200,200) :
#include <stdio.h>
#include <graphics.h>
int main ( ) {
int i ; int R = 5
creer_fenetre (400 , 400 , "white" , "black")
for (i=100 ; i<=300 ; i++)
afficher_point (100 , i) ;
/* Là ou je bloque , c'est que je voudrais utiliser la distance euclidienne pour calculer à chaque fois la distance d (distance au centre) mais je ne vois pas l'algorithme que je peux écrire pour utiliser cette formule ? (si on prend par ex deux points P1(x1,y1) et P2(x2,y2) et que d(P1,P2) = sqrt { (x1-x2)^2 + (y1-y2)^2 } */
cs_genko
Messages postés1Date d'inscriptionlundi 6 octobre 2008StatutMembreDernière intervention 6 octobre 2008 6 oct. 2008 à 14:31
Bonjour Giudy,
Si je comprends bien, tu veux implémenter /* (x1,y1) et P2(x2,y2) et que d(P1,P2) = sqrt { (x1-x2)^2 + (y1-y2)^2 } */.
Alors sers toi du fichier d'entête "math.h" et utilise la fonction "pow" qui traite les puissances qu'elles soient entières ou réelles. Au fait avec la fonction pow, si x et y sont deux réels, x^y = pow(x,y). Et comme sqrt(x) est encore x^(0.5)
Tu peux donc faire comme ceci:
# include<math>
d = pow(pow(x1 - x2,2) + pow(y1 - y2,2), 0.5);
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 9 oct. 2008 à 20:17
Salut, si ça peut t'aider,
_virtuel = la zone mémoire ou dessiner (surface DDraw par exemple)
cx = centre x horizontal
cy = centre y vertical
r = rayon
ECRAN_X = résolution horizontale
void circle(UCHAR* _virtuel, int cx, int cy, int r, unsigned char coul)
{
int x, y;