Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL GFX et les rotations

Chaud cacao

    3 octobre 2007 à 20:02:34

    Bonjour, J'ai bien suivi le tutoriel qui explique tout bien comment fonctionne une rotation et c'est que ça marche bien mais j'ai un probleme.
    J'ai voulu faire la meme chose avec un programme que j'ai developpé ( rien de bien compliqué ) et la la rotation fait n'importe quoi.

    Voila mon code :

    1. //Rotation de l'objet
    2. void point::rotation(SDL_Surface *screen){
    3.       angle += 10;
    4.       rotate = rotozoomSurface(area, angle, 1, 1);
    5.       //On repositionne l'image en fonction de sa taille
    6.       position.x = 30 - rotate->w / 2;
    7.       position.y = 30 - rotate->h / 2;
    8.       show(screen,rotate);
    9.       SDL_FreeSurface(rotate);
    10. }


    J'explique, ce code est appelé lorsque j'appui sur la barre espace de mon clavier. ( Dans la boucle evenementielle )
    L'affichage de mon point ( qui est en fait un carré ) est decalé de quelque pixel vers le haut à gauche.
    PKOI ??????? alors que mon point est affiché avant la rotation aux coordonnée 30:30.

    Petite precision, ce point se deplace et si jamais je change la position de mon point avec cette fonction la le point bouge dans tout les sens :

    1. //Rotation de l'objet
    2. void point::rotation(SDL_Surface *screen){
    3.       angle += 10;
    4.       rotate = rotozoomSurface(area, angle, 1, 1);
    5.       //On repositionne l'image en fonction de sa taille
    6.       position.x = position.x - rotate->w / 2;
    7.       position.y = position.y - rotate->h / 2;
    8.       show(screen,rotate);
    9.       SDL_FreeSurface(rotate);
    10. }


    J'aimerai savoir quel code mettre pour que le point de bouge pas de sa place initiale et qu'il puisse tourner quand meme

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      3 octobre 2007 à 21:07:22

      le calcul de la nouvelle position n'est pas si simple a calculer : il s'agit d'un robleme de géométrie : il faut bien visauliser le rectangle englobant au rectangle orienté :)
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        3 octobre 2007 à 21:48:41

        Apres avoir bien pensé le probleme j'ai presque trouvé.

        explication pour ceux qui comme moi on des souscis avec cette transformation.
        comme explique le tutorial, la surface contenant la figure est elargie quand celle ci est tournée.

        Voila pkoi en faisant :

        Pos.x = nouvelle position - la nouvelle largeur / 2 ;

        Si nouvelle position est egal à Pos.x alors on sera decalé de la nouvelle largeur / 2.
        Alors on se demande pkoi s'embeter avec cette nouvelle largeur /2 ???
        La reponse est que la figure en tournant va augmenté puis diminuée. Un peu comme la courbe de Gauss pour les connaisseurs.

        En gros voila les differentes surfaces occupées pendant la rotation :

        0° = 10 ( données inventées )
        45° = 15
        90° = 20
        135° = 15
        180° = 10
        225° = 15
        270° = 20
        315° = 15
        360° = 10

        Voila donc en gros je pense qu'il faut tenir compte des largeurs de la forme à chaque rotation pour recalculer le deplacement annulant la deformation.

        Je vous tient au courant pour le code
        • Partager sur Facebook
        • Partager sur Twitter

        SDL GFX et les rotations

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown