Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Rotation d'une image en C
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Rotation d'une image en C

Posté le 20/06/2015 19:12

Salut a tous,

J'aurais besoin pour mon projet evolution de faire rotater un sprite.
Ca serait pour le jeu Death Race que l'on peut voir sur cette video.
J'ai pas envie de faire 300 sprites et j'ai pas non plus envie d'avoir la possibilité d'en faire que 4 avec la symetrie (solution par default). Mais j'ai aucune idée de comment peu marcher un tel algo...

Merci de votre aide


Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 Message

Citer : Posté le 20/06/2015 19:18 | #


Si le sprite fait 16x16 ou moins, c'est possible... au-delà c'est suicidaire en temps réel.
Ce que tu peux faire c'est que tu prends chaque point de l'image, à partir du centre (imaginons qu'on fasse tourner en (8;8)), et tu calcules la distance avec le centre et l'angle (passage cartésien/polaire) :

int dx = x - 8, dy = y - 8;

double angle = atan2(dy, dx);
double dist = sqrt(dy * dy + dx * dx);

Ensuite tu calcules le nouvel angle et les nouvelles coordonées (passage polaire/cartésien) :

double new_angle = angle + M_PI / 8;
int nx = 8 + dist * cos(new_angle), ny = 8 + dist * sin(new_angle);

Et enfin tu affiches le pixel.

dpixel(64 + x, 32 + y);
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 20/06/2015 19:21 | #


leohenix avait essayer de m'aider pour faire la rotation d'un sprite d'environ 50*50 et c'était déjà juste ... immonde.
Alors franchement si c'est pour une grosse rotation je te le déconseillé.
A la limite, tu devrais plutôt construire ton image a partir de ligne. Tu mets les positions des points aux extrémités des segments dans un tableau et tu changes directement la position de ses points.
1337
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 Message

Citer : Posté le 20/06/2015 19:27 | #


Xavier59 a écrit :
leohenix avait essayer de m'aider pour faire la rotation d'un sprite d'environ 50*50 et c'était déjà juste ... immonde.

En effet, mais je ne m'y étais pas pris correctement : au lieu de replacer tous les pixels de l'original vers l'écran, j'aurais du aller chercher un pixel de l'original pour chaque pixel de l'écran.

Cependant, d'après la vidéo, sont sprite devrait être petit.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 20/06/2015 19:28 | #


Oui c'est pas des grands sprites hein Ca date pas d'hier alors normalement ca devrait le faire.
Par contre niveau place, avec math.h, je me demande si au final, ca serait pas plus rentable de faire directement 8 sprites ...
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 Message

Citer : Posté le 20/06/2015 19:32 | #


Oh que si ! Ce serait bien plus rentable, et de très très loin !
Sans parler du rendu final...
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 20/06/2015 19:43 | #


Ok, je vais partir sur ca alors quand j'aurai terminé Pong Merci
Dark storm Hors ligne Membre d'honneur Points: 11108 Défis: 176 Message

Citer : Posté le 21/06/2015 00:39 | #


Sinon t'as les matrices de passage d'un espace vectoriel de dimension 2 vers un autre de même dimension. Sachant qu'une rotation est un endomorphisme, tu peux calculer les points par du calcul matriciel. Mais là c'est du niveau de maths sup (et pas forcément plus rapide en C)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 Message

Citer : Posté le 21/06/2015 08:36 | #


Dark storm a écrit :
Sinon t'as les matrices de passage d'un espace vectoriel de dimension 2 vers un autre de même dimension. Sachant qu'une rotation est un endomorphisme, tu peux calculer les points par du calcul matriciel. Mais là c'est du niveau de maths sup (et pas forcément plus rapide en C)

On peut faire toutes les projections qu'on veut avec des matrices (y compris des passages de dimensions, ce qui explique qu'on les utilise parfois pour faire de la 3D), mais non ça ne doit pas être plus rapide xD
Enfin, ça dépend de la vitesse des fonctions de math...

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 39 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd