/*!\file drawGeo.c * * \author SOUPLET Antoine * \version 1.0 * \date 10-01-2012 * * \brief Fichier contenant les fonctions de dessin ou de forme géométrique * */ #include #include #include #include #include #include "point.h" #include "drawGeo.h" #include "functionSdl.h" //Dessine un pixel void drawPixel(SDL_Surface *surf_screen, int i_x, int i_y, uint32_t uint_color) { SDL_Surface *surf_pixel;//Pointeur vers une surface correspondant au pixel à dessiner SDL_Rect rect_coord;//SDL rectangle correspondant à la position du pixel à dessiner rect_coord.x=i_x; rect_coord.y=i_y; surf_pixel = SDL_CreateRGBSurface(SDL_HWSURFACE,1,1,32,0,0,0,0); SDL_FillRect(surf_pixel,NULL,SDL_MapRGB(surf_pixel->format,0,255,0)); SDL_BlitSurface(surf_pixel,NULL,surf_screen,&rect_coord); SDL_FreeSurface(surf_pixel);//Libération mémoire du pointeur vers le pixel } //Dessine une ligne en association avec la fonction drawLine2 void drawLine(SDL_Surface* surf_screen, int i_x1, int i_y1, int i_x2, int i_y2) { int i_dx;//Entier représentant l'écart en abscisse int i_dy;//Entier représentant l'écart en ordonnée int i_xincr;//Entier représentant l'abscisse du point suivant int i_yincr;//Entier représentant l'ordonnée du point suivant uint32_t uint_color;//Couleur de la ligne à dessiner uint_color = SDL_MapRGB(surf_screen->format, 255, 255, 255); i_dx = abs(i_x2-i_x1); i_dy = abs(i_y2-i_y1); if(i_x1i_dy) { i_error = i_dx/2; for(i=0;ii_dx) { i_error -= i_x; i_y += i_yincr; } drawPixel(surf_screen, i_x, i_y, uint_color); } } else { i_error = i_dy/2; for(i=0;ii_dy) { i_error -= i_dy; i_x += i_xincr; } drawPixel(surf_screen, i_x, i_y,uint_color); } } } //Arroundit un réel double roundFunction(double d_num, double d_coeffRound ) { return (floor(d_num*(1/d_coeffRound)+0.5)/(1/d_coeffRound)); }