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

 

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut Récupération des coordonnées lors d'une rotation

    Bonsoir,

    J'ai 4 composants (C1, C2, C3, C4) que je désire faire tourner autour du point C situé au centre d'une fiche (voir l'image).
    Quel est l'algorithme à utiliser pour obtenir les coordonnées x, y de chacun des composants après rotation selon un angle r.
    Est-il besoin de vous préciser que j'ai toujours été nul en maths et que la trigonométrie et moi çà fait deux ?
    Merci d'avance pour votre aide.
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 495
    Points : 7 402
    Points
    7 402

    Par défaut

    Bonjour,
    Sans être nul en math, j'avoue que je ne me souviens plus du détail de l'algorithme.
    Donc après une recherche de près de 10 secondes dans mon moteur de recherche préféré, je suis tombé sur cet article de wikipedia : Rotation plane.
    Donc il suffit de recalculer en premier les coordonnées des points en prenant C comme origine (simples soustractions), d'appliquer la rotation comme expliqué dans l'article (paragraphe Formules de changement d'axes de coordonnées), puis de rechanger les coordonnées pour que C ne soit plus le point d'origine (simples additions).

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2016
    Messages : 14
    Points : 32
    Points
    32

    Par défaut Algorithme de récupération des coordonées lors d'une rotation

    Salut !

    Si mes souvenirs sont corrects, il faut que tu utilise une matrice de rotation 2x2 étant donné que nous sommes dans le plan.

    Soit A avec les coordonnées (x,y) et B(x',y') et M la matrice rotation. (Ici, je suppose que mon repère est O,I,J; mais les choses sont exactement les mêmes )
    Cette matrice est définie comme ceci en dimension 2:

    M = [cos (r), - sin r ; sin (r), cos (r) ]

    Par un produit de matrice nous obtenons:

    [x' , y' ] = [cos(r) * x - sin(r)*y , sin(r)* x + y* cos(r)]

    Je te joins un exemple en image.
    Images attachées Images attachées  

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    avril 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : avril 2004
    Messages : 696
    Points : 1 004
    Points
    1 004

    Par défaut nombres complexes

    Pour simplifier les rotations planes, on a inventé les nombres complexes. Une rotation correspond à une multiplication par un nombre complexe de module 1 soit cos(t)+i*sin(t).
    Le vecteur de départ x+i*y donne : x*cos(t)-y*sin(t) + i* (x*sin(t)+y*cos(t)) ( i*i =-1).
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Sans être nul en math, j'avoue que je ne me souviens plus du détail de l'algorithme.
    Donc après une recherche de près de 10 secondes dans mon moteur de recherche préféré, je suis tombé sur cet article de wikipedia : Rotation plane.
    Merci Tatayo pour ta recherche. Mais sache que j'ai moi-même consulté de nombreux sites avant d'envoyer mon message, tous énonçant des explications certes très matheuses mais qui m'ont surtout embrouillées le cerveau .
    J'en avais déduit les expressions suivantes :

    x2 := CentreFiche.x - (x * cos((angle * Pi) / 180) - y * sin((angle * Pi) / 180));
    y2 := CentreFiche.y - (x * sin((angle * Pi) / 180) + y * cos((angle * Pi) / 180));

    Parce que au travers de mes recherches, il est apparu que l'angle devait être exprimé en radians et non en degrés.
    Le problème est qu'en substituant les nouvelles coordonnées x2,y2 aux coordonnées initiales x,y, le contrôle ne tourne pas autour du centre de la fiche !

    Citation Envoyé par tatayo Voir le message
    Il suffit de recalculer en premier les coordonnées des points en prenant C comme origine (simples soustractions), d'appliquer la rotation comme expliqué dans l'article (paragraphe Formules de changement d'axes de coordonnées), puis de rechanger les coordonnées pour que C ne soit plus le point d'origine (simples additions)
    Montre-moi comment, stp.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par Nebulix Voir le message
    Pour simplifier les rotations planes, on a inventé les nombres complexes.
    Merci Nebulix pour cette précision. Mais comme je l'ai dit au début, moi et la trigonométrie çà fait deux.
    De fait, pour moi une réponse simple + une formule qui prend toute la largeur de la page = une réponse compliquée.
    Donc, pour faire simple, il faut éviter les réponses compliquées ! Histoire que tout le monde puisse les comprendre.

  7. #7
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 495
    Points : 7 402
    Points
    7 402

    Par défaut

    Citation Envoyé par Péhelji Voir le message
    Montre-moi comment, stp.
    Tu as les coordonnées de C, tu cherches les coordonnées des autres points en prenant C comme origine.
    Si tu places tes 5 points sur une feuille petit carreau, tu devrais trouver comment faire en 2 minute chrono.

    Tatayo.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par Gruzo Voir le message
    Par un produit de matrice nous obtenons: [x' , y' ] = [cos(r) * x - sin(r)*y , sin(r)* x + y* cos(r)]
    Merci Gruzo pour ton explication. Mais pour reprendre ce que j'ai répondu à Tatayo, les expressions suivantes :

    x2 := CentreFiche.x - (x * cos((angle * Pi) / 180) - y * sin((angle * Pi) / 180));
    y2 := CentreFiche.y - (x * sin((angle * Pi) / 180) + y * cos((angle * Pi) / 180));

    (où x2 et y2 remplacent x' et y' de ta formule) ne font pas tourner mes composants autour du centre de la fiche. Donc si toi, Tatayo et Nebulix avez un algorithme valide a me proposer, c'est toujours OK pour moi.
    Images attachées Images attachées  

  9. #9
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 495
    Points : 7 402
    Points
    7 402

    Par défaut

    Je t'ai déjà donné l'algorithme dans ma première réponse:
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Donc il suffit de recalculer en premier les coordonnées des points en prenant C comme origine (simples soustractions), d'appliquer la rotation comme expliqué dans l'article (paragraphe Formules de changement d'axes de coordonnées), puis de rechanger les coordonnées pour que C ne soit plus le point d'origine (simples additions).

    Tatayo.
    Allez, une dernière piste: changer un repère pour que le point C en soit l'origine, revient à trouver les additions ou soustractions à faire aux coordonnées de C pour qu'il se retrouve en (0,0), puis appliquer ces mêmes opérations aux coordonnées des autres points.
    Et à la fin, il faut trouver comment faire pour que C se retrouve de nouveau avec ses bonnes coordonnées, et faire la même choses aux coordonnées des autres points.

    Si ton point C se trouve en (10,12), tu ne vois vraiment pas comment le faire passer en (0,0) ?

    Tatayo.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    avril 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : avril 2004
    Messages : 696
    Points : 1 004
    Points
    1 004

    Par défaut

    Citation Envoyé par Péhelji Voir le message
    Merci Nebulix pour cette précision. Mais comme je l'ai dit au début, moi et la trigonométrie çà fait deux.
    De fait, pour moi une réponse simple + une formule qui prend toute la largeur de la page = une réponse compliquée.
    Donc, pour faire simple, il faut éviter les réponses compliquées ! Histoire que tout le monde puisse les comprendre.
    Justement la notation complexe permet de retrouver toutes ces épouvantables formules de trigonométrie sans rien avoir à mémoriser
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Bonsoir Tatayo,

    Citation Envoyé par tatayo Voir le message
    Changer un repère pour que le point C en soit l'origine, revient à trouver les additions ou soustractions à faire aux coordonnées de C pour qu'il se retrouve en (0,0), puis appliquer ces mêmes opérations aux coordonnées des autres points.
    Et à la fin, il faut trouver comment faire pour que C se retrouve de nouveau avec ses bonnes coordonnées, et faire la même choses aux coordonnées des autres points.
    Si ton point C se trouve en (10,12), tu ne vois vraiment pas comment le faire passer en (0,0) ?
    Dans ma première réponse, je n'avais pas considéré le fait que les coordonnées de C devait être (0,0).
    Il n'empêche que la formule "trigonométrique" fait bien tourner le bouton noir autour d'un centre en lui faisant faire des cercles de plus en plus petits jusqu'à s'arrêter quand la valeur de angle=46.
    La formule doit-elle être la même pour tous les angles ?
    Merci encore pour ton aide.

    // Angles de 0 à 360
    angle := TrackBar_Angle.Position;

    // Positionner en (219,190)
    CenterX := Fiche.Width / 2;
    CenterY := Fiche.Height / 2;

    // Soustraire les valeurs ci-dessus -> Center = (0,0)
    x := cbBlack.Left - CenterX;
    y := cbBlack.Top - CenterY;

    // Appliquer la formule "trigonométrique"
    x := x * cos((angle * Pi) / 180) - y * sin((angle * Pi) / 180);
    y := x * sin((angle * Pi) / 180) + y * cos((angle * Pi) / 180);

    // Réaffecter les paramètres originaux aux nouvelles valeurs
    cbBlack.Left := Round(x + CenterX);
    cbBlack.Top := Round(y + CenterY);

  12. #12
    Membre éprouvé
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 624
    Points : 981
    Points
    981

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Appliquer la formule "trigonométrique"
    x := x * cos((angle * Pi) / 180) - y * sin((angle * Pi) / 180);
    y := x * sin((angle * Pi) / 180) + y * cos((angle * Pi) / 180);
    ton calcul de y est pas bon puisque tu utilises ton x rotaté alors que tu devrais utiliser le x avant rotation...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x2 := x*...
    y2 := x*...
    
    x2:=x
    y2:=y

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Merci galerien69 pour ton intervention. Mais même en changeant le code de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Soustraire les valeurs ci-dessus -> Center = (0,0)
    x := cbBlack.Left - CenterX;
    y := cbBlack.Top - CenterY;
    
    // Appliquer la formule "trigonométrique"
    x2 := x * cos((angle * Pi) / 180) - y * sin((angle * Pi) / 180);
    y2 := x * sin((angle * Pi) / 180) + y * cos((angle * Pi) / 180);
    le bouton noir ne tourne pas autour du centre de la fiche. Et le plus étonnant, c'est que les formules mathématiques proposées sont parfois diffèrentes.
    Pour x2, il y a soustraction d'un sinus d'un cosinus, et pour y2, c'est l'addition d'un sinus et d'un cosinus.
    L'article référencé par Tatayo renvoie une formule quelque peu différente :

    Nom : Formules trigonométriques.jpg
Affichages : 80
Taille : 9,4 Ko

    Eh bien même en appliquant la première formule, le résultat escompté n'est toujours pas au rendez-vous !
    Je ne pensais pas en posant ma question qu'il était aussi compliqué de faire tourner ces boutons (ou n'importe quels autres composants visuels) sur la fiche.
    Mais au moins le défi est lancé !

  14. #14
    Membre éprouvé
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 624
    Points : 981
    Points
    981

    Par défaut

    pour être tout à fait franc, la balle est dans ton camp.
    si tu peux pas savoir quelle est la "bonne" formule parmie les deux par des "calculs" tu peux la vérifier concrètement.

    tu prends un point en (1,0). Tu appliques une rotation d'angle pi/2 et de centre (0,0), tu t'attends à trouver (0,1). trace ton cercle...
    sil faut tu prends un compas et tu rotates avec un angle fixé (à tout hasard un angle droit c le plus simple), et tu mesure x et y à la règle... de ton nouveau point...

    ca a rien de compliqué et si t'arrives à coder je pense que t'arriveras à comprendre la notion de cercle trigonométrique (niveau collège?).

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par galerien69 Voir le message
    pour être tout à fait franc, la balle est dans ton camp.
    si tu peux pas savoir quelle est la "bonne" formule parmie les deux par des "calculs" tu peux la vérifier concrètement. (...)
    ca a rien de compliqué et si t'arrives à coder je pense que t'arriveras à comprendre la notion de cercle trigonométrique (niveau collège?).
    Merci galerien69.

    Mais pour être "tout à fait franc" à mon tour, je peux t'assurer qu'avec les interventions d'un expert éminent et d'au moins deux membres éprouvés du club j'ai largement eu l'occasion de "comprendre la notion de cercle trigonométrique."
    Pour mémoire, je rappelle que je ne demandai pas un cours de maths, mais seulement, simplement, un algorithme ou quelques lignes de code me permettant de solutionner le problème auquel je suis confronté.
    Et force est de constater que, jusqu'à présent, aucun des intervenants n'a été capable d'apporter une réponse satisfaisante à la question initiale.
    Autant dire que si le cours était de "niveau collège?", la solution au problème, autrement plus "compliqué[e]", ne l'est pas.

  16. #16
    Membre éprouvé
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 624
    Points : 981
    Points
    981

    Par défaut

    Re,
    Les notions de rotations cest lycee je crois, mais tracer un cercle trigo cest college.

    Ce que je vx dire par la, (je crois que tu las mal pris cetait pas le but) cest que si tu fais un ptit effort, cest accessible: je tai donné le process pr debugger ta formule (qui est correcte mais que tu manies pe mal ds limplem)
    Idem prendre quelques couples de valeur, predire le nv couple via la formule, verifier en mesurant avec la regle. Je peux comprendre que ten as rien a carrer mais bon vu le tps que tu perds, vraisemblablement pe vaut il mieux consacrer 30min a tracer ton cercle et verifier la correctitude () de la formule avec rotation de centre 0, puis celle avec la translation en plus

    Moi je vois pas derreur ds ton code cest pour ca que je dis que la balle est dans ton camp. Pe que quelquun dautre la verra mais cela vaut il le coup dattendre leventuel messie?

    Edit, soit dit en passant ton round est fumeux tu vas cumuler les erreurs darrondi a chaque rotation...

  17. #17
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 495
    Points : 7 402
    Points
    7 402

    Par défaut

    Tu n'aurais pas oublié une translation en fin de calcul, par hasard ?

    Tatayo.

  18. #18
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 2 682
    Points : 4 296
    Points
    4 296

    Par défaut

    salut


    moi j'aurais fait un truc dans le genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      // Angles de 0 à 360
      angle := (Position * Pi) / 180;
      // Positionner au centre de ta fiche
      CenterX := Form2.Width / 2;
      CenterY := Form2.Height / 2;
    
    
      // on calcul la distance qui separe ton point du centre 
      d1 := sqrt( sqr(CenterX-cbBlack.Left) + sqr(CenterY-cbBlack.Top));
      cbBlack.Left := Round(d1 * cos(angle) + CenterX);
      cbBlack.Top  := Round(d1 * sin(angle) + CenterY);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  19. #19
    Membre expérimenté

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    décembre 2010
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2010
    Messages : 672
    Points : 1 339
    Points
    1 339
    Billets dans le blog
    5

    Par défaut Algorithme de récupération des coordonnées lors d'une rotation

    Bonjour,

    ... Et force est de constater que, jusqu'à présent, aucun des intervenants n'a été capable d'apporter une réponse satisfaisante à la question initiale.
    Autant dire que si le cours était de "niveau collège?", la solution au problème, autrement plus "compliqué[e]", ne l'est pas ...
    Puisqu'apparemment tu es toujours en difficulté, je tente de proposer une solution impliquant le minimum de termes (et en y regardant de près, ce n'est pas facile ...).

    Il est question de quatre points Ci (i = 1, 2,3,4) de coordonnées (xi, yi) tournant autour d'un point central C (Xc, Yc). Les relations exprimant la rotation concernent des différences de coordonnées Dxi = xi - Xc , Dyi = yi - Yc)
    et doivent conduire aux nouvelles valeurs des coordonnées, notées (ui, vi).

    Le coeur du calcul est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dx:= x[i] - Xc; Dy:= y[i] - Yc;
    u[i]:= Xc + (Dx * Ca) - (Dy * Sa);
    v[i]:= Yc + (Dx * Sa) + (Dy * Ca);
    Le programme se présenterait de la façon suivante (cela ressemble à du Pascal):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    PROGRAM xxx;
    USES Crt; 
    
    CONST Np = 4; Pis180 = Pi / 180;
    
    Type Tab = ARRAY[1..Np] OF Reel;
    VAR u, v, x, y: Tab;
        Ad, Ar, Ca, Sa, Dx, Dy: Reel; 
        i: Byte;
    
    BEGIN
    ... / ... // Il faut initialiser les positions de départ (x, y) ainsi que l'angle de rotation exprimé en degrés
      Ar:= Pis180 * Ad;              // Passage des degrés aux radians
      Ca:= Cos(Ar); Sa:= Sin(Ar);    // Calcul des fonctions trigonométriques
      FOR i:= 1 TO Np DO 
        BEGIN
          // ici le précédent bloc d'instructions
        END;
    END.
    J'espère n'avoir rien oublié - tu apporteras les modifications nécessaires.

    J'ai supposé les coordonnées réelles; s'il s'agit d'entiers, il n'y aura que quelques instructions supplémentaires.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : janvier 2018
    Messages : 20
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par tatayo Voir le message
    Tu n'aurais pas oublié une translation en fin de calcul, par hasard ?
    Excuse-moi Tatayo, mais c'est ce que je pensais avoir fait avec les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      // Appliquer la formule
      x2 := x * cos((angle * Pi) / 180) - y * sin((angle * Pi) / 180);
      y2 := x * sin((angle * Pi) / 180) + y * cos((angle * Pi) / 180);
    
      // Réaffecter les paramètres originaux aux nouvelles valeurs
      cbBlack.Left := Round(x2 + CenterX);
      cbBlack.Top  := Round(y2 + CenterY);

Discussions similaires

  1. Récupération des coordonnées d'une session Oracle
    Par azouzmenai24 dans le forum Forms
    Réponses: 4
    Dernier message: 16/03/2015, 13h18
  2. Récupération des coordonnées de la souris
    Par kabil.cpp dans le forum MFC
    Réponses: 11
    Dernier message: 23/05/2008, 06h43
  3. Réponses: 0
    Dernier message: 13/11/2007, 11h39
  4. Réponses: 2
    Dernier message: 15/06/2007, 10h08
  5. Réponses: 8
    Dernier message: 04/06/2007, 11h51

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