bonjour
j'ai un petit programme a faire sur java's cool mais j'ai un beug quelqu'un pourrait il m'aider ?
-----
bonjour
j'ai un petit programme a faire sur java's cool mais j'ai un beug quelqu'un pourrait il m'aider ?
Essaye d'enlever le....
Voici mon programme , je veux qu'il fasse tourner une image mais cela ne marche pas :
Code:int [] [] [] tableau = new int [250] [250] [3]; void rotation(double angle) { for(int i=0;i<250;i++ ) { for(int j = 0; j<250; j++) { int r = tableau[i][j][0]; int g = tableau[i][j][1]; int b = tableau[i][j][2]; int x2 =( (int)((i-250)*cos(angle)-(j-250)*sin(angle))+250 ); int y2 =( (int)((i-250)*sin(angle)+ (j-250)*cos(angle))+250 ); setPixel( x2 , y2 , r, g, b); } } } void main() {reset(250, 250, true); load(""); for (int i=0; i<250; i++) { for(int j=0; j<250; j++) { tableau[i][j] = getPixelColor(i, j); } } reset(250, 250, true); rotation((int)(2 )); }
Dernière modification par JPL ; 06/02/2013 à 13h34. Motif: Ajout de la balise Code (#) pour garder l'indentation
Bonjour,
Ce serait mieux si tu utilisais la balise [CODE], pour garder les indentations de ton programme ...
D'autre part, qu'entends-tu par "cela ne marche pas" : qu'est-ce qu'il se passe, exactement ?
Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.
Et sinon, tu veux faire tourner ton image autour d'un coin de l'image ? Ça me semble bizarre.
Si c'est par rapport au centre, tu aurais du écrire :
au lieu de :Code:int x2 =( (int)((i-125)*cos(angle)-(j-125)*sin(angle))+125 ); int y2 =( (int)((i-125)*sin(angle)+ (j-125)*cos(angle))+125 );Et puis, rien ne te garantit, en faisant comme ça, que tous les pixels de l'image vont être redessinés ...Code:int x2 =( (int)((i-250)*cos(angle)-(j-250)*sin(angle))+250 ); int y2 =( (int)((i-250)*sin(angle)+ (j-250)*cos(angle))+250 );
Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.
bonjour
le programme marche merci , parcontre je perds des pixels comment pourrais je les retrouver?
en faisant ta boucle sur les pixels destinations pour leur trouver une source et non le contraire...
il suffit "juste" d'inverser la transformation (et toujours vérifier si on reste bien dans le tableau).
Jusqu'ici tout va bien...
je n'ai pas compris :/
actuellement, avec i,j, tu balayes les pixels de la source, et tu calcules x2, y2 comme destination.
donc fais le contraire:
avec i,j, tu balayes les pixels de la destination, et tu calcules x1, y1 comme source, en faisant la rotation inverse.
au fait, calculer sin et cos à tout bout de champ, c'est pas très performant, sortir ça des boucles devrait accélérer la sortie...
et tester si x y calculés sont hors des clous ne serait pas idiot pour mettre une couleur neutre en sortie par exemple.
Jusqu'ici tout va bien...