IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Rotation de points


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Par défaut Rotation de points
    Bonjour,

    J'ai un double tableau de structure de points que je voudrais faire tourner autour d'un axe qui traverserait mon ecran. En gros cette ensemble de point lors de la rotation resteraient colle a l'ecran en tournant autour d'un point. Je n'arrive pas a ecrire cette rotation. Voici ce que j'ecris pour le moment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    while (line < env->h_map)
    {
    	col = 0;
    	while (col < env->l_map)
    	{
    		printf("OLD COORD %f %f %f\n", env->map[line][col].x, env->map[line][col].y, env->map[line][col].z);
    		env->map[line][col].x = env->map[line][col].x * sin((deg * M_PI) / 180) - env->map[line][col].y * cos((deg * M_PI) / 180);
    		env->map[line][col].y = env->map[line][col].x * cos((deg * M_PI) / 180) + env->map[line][col].y * sin((deg * M_PI) / 180);
    		printf("NEW COORD %f %f %f\n", env->map[line][col].x, env->map[line][col].y, env->map[line][col].z);
    		col++;
    	}
    	line++;
    }
    Et je me retrouve avec quelque chose de deformer sur deux axes j'ai l'impression.
    Alors que si j'ai un cube, et bien je voudrais garder mon cube peut importe la rotation.
    Quelqu'un saurait-il m'expliquer pourquoi? ma rotation m'enleve mes angles, et comment faire?
    Et comment faire si je veux faire une rotation a patir d'un autre point sur mon ecran? il faut que je recalcule ses coordonnes par rapport a celui ci?

    Nom : Screen Shot 2018-05-17 at 7.30.12 AM.png
Affichages : 178
Taille : 14,8 Ko
    Du coups si je fais une rotation a 45deg, je devrais voir un triangle je crois, et surtout garder tout mes angles. (mon origine est tout en haut a gauche..)

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Bien que ton repère soit y-down, tu as a priori inversé les termes du sinus et du cosinus puisque la matrice est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ cos -sin ]
    [ sin  cos ]
    La première des choses à faire est d'organiser ton code proprement. Segmenter le traitement t'aidera à y voir plus clair. Mets le code qui transforme un point par une rotation dans une fonction dédiée et utilise des variables intermédiaires, pour le sinus et le cosinus notamment.


    Citation Envoyé par minipopov Voir le message
    Et comment faire si je veux faire une rotation a patir d'un autre point sur mon ecran? il faut que je recalcule ses coordonnes par rapport a celui ci?
    Oui, effectue une translation afin que le centre devienne l'origine, puis effectue la translation inverse après avoir appliqué la rotation.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Par défaut
    Mais pourtant quand je le fais comme ca, voici ce que j'obtient(j'ai mis une translation pour mieux voir)
    je met la modification pour qu'on soit bien d'accord si je fais une connerie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    env->map[line][col].x = env->map[line][col].x * cos((deg * M_PI) / 180) - env->map[line][col].y * sin((deg * M_PI) / 180);
    env->map[line][col].y = env->map[line][col].x * sin((deg * M_PI) / 180) + env->map[line][col].y * cos((deg * M_PI) / 180);
    Nom : Screen Shot 2018-05-17 at 8.57.19 AM.png
Affichages : 163
Taille : 10,1 Ko

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mai 2016
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 313
    Par défaut
    Citation Envoyé par minipopov Voir le message
    Mais pourtant quand je le fais comme ca, voici ce que j'obtient(j'ai mis une translation pour mieux voir)
    je met la modification pour qu'on soit bien d'accord si je fais une connerie
    ...
    La valeur de x utilisée dans l'expression de y en ligne 3 est celle calculée en ligne 2, alors qu'il faudrait utiliser la valeur initiale.
    Stocker la nouvelle valeur de x calculée en 2 dans une variable intermédiaire, et mettre à jour x après le calcul de y.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 99
    Par défaut
    ah...ca marche beau mieux comme ca... merci desole

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer la normale grace a trois angles de rotations plus un point.
    Par parp1 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 02/03/2007, 17h34
  2. Point de Rotation
    Par Clément76 dans le forum SDL
    Réponses: 1
    Dernier message: 10/08/2006, 20h43
  3. [VB6]definir un point de rotation
    Par liquidnitrogen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 06/04/2006, 20h43
  4. Rotation autour d'un point
    Par Webhellfire dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/01/2006, 18h21
  5. rotation par rapport à un point
    Par marcololo dans le forum DirectX
    Réponses: 8
    Dernier message: 03/06/2005, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo