1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
| #include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
//#include "mylib.h"
void pause();
//void create_RPC(int X, int Y, int r, int g, int b, SDL_Surface *ecran, SDL_Surface *surface);
int main(int argc, char *argv[])
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// MISE EN MEMOIRE DES SURFACES ALLOUEES POUR DES SURFACES //
//////////////////////////////////////////////////////////////////////////////////////////////////////////
SDL_Init(SDL_INIT_VIDEO); // Chargement de la vidéo
SDL_Surface *ecran=SDL_SetVideoMode(300, 300, 32, SDL_HWSURFACE); // On met en mémoire dans la variable ecran la surface pour la fenêtre principale
//SDL_Surface *rectangle=SDL_CreateRGBSurface(SDL_SWSURFACE, 100, 100, 32,0, 0, 0, 0);
SDL_Surface *pixel[300][300]={NULL}; // On met en mémoire dans le tableau à deux dimensions les (X-1)*(Y-1) pixels nécessaires pour recouvrir la surface totale de la fenêtre principale
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// MISE EN MEMOIRE DES SURFACES ALLOUEES POUR LES PIXELS //
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int i,j;
for ( i=0 ; i<=299 ; i++ )
{
for ( j=0 ; j<=299 ; j++ )
{
pixel[i][j]=SDL_CreateRGBSurface(SDL_SWSURFACE, 1, 1, 32,0, 0, 0, 0); // Boucle permettant de créer les (X-1)*(Y-1) pixels en tant que surface rectangulaire de 1*1
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// SIMULATION D'UN CHAMPS ELECTRIQUE //
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int m,n,o,p;
float E[300][300];
float E_NORM[300][300];
for ( m=0 ; m<=299 ; m++ )
{
for ( n=0 ; n<=299 ; n++ )
{
E[m][n]=m*m/(n*n+1);
}
}
for ( o=0 ; o<=299 ; o++ )
{
for ( p=0 ; p<=299 ; p++ )
{
E_NORM[o][p]= ( E[o][p]/(2*E[299][299]) + 0.5 ); // Normalisation de E sur un intervalle de 0 à 1
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// ASSOCIATION DES COULEURS //
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//int a,b;
//int c=0;
Uint32 couleur[300][300];
//float pas=1/255;
//float intervalle0=0;
//float intervalle1=pas;
//
//for ( a=0 ; a <= 299 ; a++ )
// {
// for ( b=0 ; b <= 299 ; b++ )
// {
//
// while ( intervalle1 <= 1 )
// {
//
// if ( ( E_NORM[a][b] >= intervalle0 )&&( E_NORM[a][b] <= intervalle1 ) ) // On test les valeur de E_NORM à des intervalles prédéfinis (0 à 1/255) pour lui associer une couleur
//
// {
// couleur[a][b]= SDL_MapRGB ( ecran -> format, 1, 5, 65 ); // Si E_NORM appartient à l'intervalle, on lui associe un code couleur
//
// }
//
// else {
// pas=(pas+1/255);
// intervalle0 = (intervalle0 + pas ); // Si E_NORM n'appartient pas à l'intervalle, on incrémente les bornes de l'intervalle et le pas
// intervalle1 = (intervalle1 + pas );
// }
//
// }
// }
// }
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// AFFICHAGE DES PIXELS //
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int d,e;
SDL_Rect position;
for ( d=0 ; d <= 299 ; d++ )
{
for ( e=0 ; e <= 299 ; e++ )
{
couleur[d][e]= SDL_MapRGB ( ecran -> format, (int)(E[d][e]*10), 1, 1 );
position.x=d;
position.y=e;
SDL_FillRect( pixel[d][e] , NULL, couleur[d][e] );
SDL_BlitSurface( pixel[d][e] , NULL, ecran, &position);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//create_RPC(50, 50 , 128, 128, 128, ecran, rectangle);
SDL_Flip(ecran);
pause();
SDL_Quit();
return EXIT_SUCCESS;
}
void pause()
{
int continuer = 1;
SDL_Event event;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
} |