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

Algorithmes et structures de données Discussion :

3d


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut 3d
    excuser moi mais j ai un niveau de math de collegien (et pour cause ) je souhaite faire de la 3d ou du moin esseyer ... pour sa j aimerais juste savoir dans la formule que j ai trouver :
    u=factor_x*x/z +w/2
    v=factor_y*y/z +h/2
    avec
    factor_x=w/(2*tan(ax))
    factor_y=h/(2*tan(ay))
    cette formule deverai prjeter un point en 3d(x y z) dans un lan en 2d seulement je ne comprends pas que represente ax ay !
    j ai aussi une autre formule (je l ais colectionne pour voire laquelle marche le mieu )
    OutPoint.x := Camera.x + InPoint.x * (Camera.z / (Camera.z - InPoint.z))
    OutPoint.y := Camera.y + InPoint.y * (Camera.z / (Camera.z - InPoint.z))
    que hdd34 m a donner mais je comprens pas coment me servir de camera/X/Y/Z i vous pouvez m aider et meconseiller la plus pratique pour cree des debut de forme geometrique en 3d (ou meme m en donner une autre plus aproprir ) .... sa m aiderai bocoup merci pour tous
    6*8 =42

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    j'ai pas trop regarder les formules que tu montre mais voila une petite formule toute simple pour projeter un point 3d sur un plan 2d . en plus elle est base sur thales (on vois ça au college si je ne me trompe pas )

    alors tu prend:
    d_ecran : la distance de l'oeuil a l'ecran. essaye plusieur
    valeur
    d_tot : d_ecran + z , avec z la profondeur du point
    3d_x : la coordonnee x de ton point en 3d par rapport
    au centre de l'ecran
    2d_x : la coordonnee x du point que tu dois afficher

    si je ne me trompe pas alors
    2d_x = ( d_ecran/d_tot )*3d_x

    tu fais exactement la meme chose pour y
    et voila normalement ça devrais etre bon. et si tu comprend pas pourquoi
    cette formule, essaye de faire un dessin (tu prend un trait pour l'ecran tu dessine une forme derriere cette ecran (ton objet) es tun oeuil de l'autre
    cote. tu relie l'oeuil a un des points de l'objet et tu trouve sur l'ecran la
    coordonnee du point a afficher.
    voila un algo tres simple (en esperant que je ne me suis pas planter )
    il te reste plus qu'as gerer les rotation (c'est de la trigonometrie )

  3. #3
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    merci bocoup vait voire sa et merci pour les explications
    6*8 =42

  4. #4
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    la formule marche mais je suis pas tres bon en trigo quelqu un pourait m indiquer comment faire une rotation ... une translation ect ... merci beaucoup
    @+
    6*8 =42

  5. #5
    mio
    mio est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 168
    Points
    168
    Par défaut
    quelqu un pourait m indiquer comment faire une rotation ... une translation
    translation de u(u1,u2) d'un vecteur t(t1,t2) qui donne en image v(v1,v2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    v1=u1+t1
    v2=u2+t2
    C'est la meme formule pour toutes les dimensions.
    rotation : pour un espace de dimension n tu construits la matrice de rotation et tu fais l'image du vecteur par cette matrice.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dimension 2 pour une rotation autour d'un point O(x_o,y_o) d'un angle a du point M(x_m,y_m) qui donne N(x_n,y_m) on a
    en posant 
    u=(x_m-x_o,y_m,y_o)=(x_u,y_u) 
    v=(x_n-x_o,y_n,y_o)=(x_v,y_v)
    x_v=x_u*cos(a)-y_u*sin(a)
    y_v=x_u*sin(a)+y_u*cos(a)
    J'espere me pas avoir fait d'erreur car j'ai utilise des copier coller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dimension 3
    Une matrice de rotation est de la forme
    |cos(a)  -sin(a)   0  |
    |sin(a)   cos(a)   0  |
    |  0       0       1  |
    Une fois que tu l'as diagonalise et que tu as fait un changement d'axes (de base en fait) afin de faire une rotation autour de l'axe z .
    Voila.

  6. #6
    Ol'
    Ol' est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 69
    Points
    69
    Par défaut
    Salut,

    Tu savais diagonaliser les matrices et changer de base quand tu étais au collège ?

    D'ailleurs, ce que tu écris est complètement faut, ta formule n'est pas valable en dimension 3. Ce que tu écris est une rotation plane exprimée en coordonnées réduites (le 1 est un facteur d'échelle).

    Tu peux regarder le modèle statique de Denavit Hartenberg mais je ense que c'est un peu chaud pour toi

    http://hp2gra.u-strasbg.fr/library/thesis/gangloff/node36.html

    Voila

    Ol'

  7. #7
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    oui c est un vieux message j avais abandonner depui pas mal de temps .... j ai vite compris que c etait pas de mon niveau !!!

    ds quelque anne peut etre .... qui sais .....
    merci beaucoûp comme meme
    6*8 =42

  8. #8
    mio
    mio est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 168
    Points
    168
    Par défaut
    Tu savais diagonaliser les matrices et changer de base quand tu étais au collège ?
    Non, mais diagonaliser une matrice 3*3 n'est pas tres difficile a apprendre surtout qu'il s'agit d'une diagonalisation par blocs.
    D'ailleurs, ce que tu écris est complètement faut, ta formule n'est pas valable en dimension 3. Ce que tu écris est une rotation plane exprimée en coordonnées réduites (le 1 est un facteur d'échelle).
    Non, il s'agit d'une matrice de rotation en dimension 3, exprimee dans un repere adapte (rotation au tour de l'axe z). Une rotation est une isometrie donc le module du determinant est 1. (pas de probleme de facteur d'echelle)
    Tu peux regarder le modèle statique de Denavit Hartenberg mais je ense que c'est un peu chaud pour toi
    J'ai regarde, c'est tres interessant et j'ai compris. Merci pour moi, je ne suis pas completement stupide. Par contre je ne suis pas sur que ca reponde a la question.

  9. #9
    Ol'
    Ol' est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 69
    Points
    69
    Par défaut
    Salut,

    Je suis désolé que tu te sois senti agresé par ce que j'ai écrit. Toutefois, le 1 de la matrice n'est pas fait pour que le déterminant soit égal à 1. Tu peux te renseigner sur les coordonnées réduites

    A+
    Ol'

  10. #10
    mio
    mio est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 168
    Points
    168
    Par défaut
    Pas grave...
    Je vais regarder ca... mais je suppose que quand tu parles des coordonnees reduite c'est que l'on a reduit les coordonnees a l'intervalle [-1,1] si c'est comme en physique avec les equation reduite.
    Des souvenirs de vieux cours m'ont conduits a me rappeller que la rotation dans un espace de dimension 3 se mettait sous cette forme, une fois blabla tout ca... Ca ne sert a rien que je m'etende sur le thread etant donne que Charly ne s'interesse plus au probleme. Je bosserai ca demain apres mon service.

  11. #11
    mio
    mio est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 168
    Points
    168
    Par défaut
    Bon je resiste pas a l'envie de repondre encore une fois car tout ne me semble aps tres clair dans cette histoire. Bon on parle de la dimension 3.
    La rotation est une transformation a un degre de liberte, donc il ne faut surtout pas la confondre avec le mouvement que permet par exemple une rotule qui possede trois degres de liberte qui correspondent a trois rotation. D'une maniere generale la compose de deux rotations n'est aps une rotation (sauf cas particulier). La matrice que j'ai ecrite correspond effectivement a celle d'une rotation. Il n'y a pas de rotation plane dans mes connaissances donc ca serait sympa de la definir. Je suis desole mais je n'ai pas la definition d'une rotation sous la main. En suite le fait de travailler en coordonnees reduite ou non n'a pas d'influence sur la definition de la rotation puisque celle ci n'influence pas les distances et est caracterise par une une direction, un sens et un angle (pour faire simple). Il est vrai que la formule donnee n'est pas generale, elle est valable dans un espace vectorielle mais pas dans un espace affine, mais d'un autre cote comme le second n'est que la translation du premier il n'est pas bien difficile d'exprimer la formule dans cette espace. Ensuite si les axes ne coincident pas il suffit de faire un changement de base.
    Sinon je ne vois pas ou je me trompe...

  12. #12
    Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Etant donné que je suis en pleine programmation graphique pour le moment, j'ai lu les messages posté. Et sur votre desaccord : je pense avoir une reponce :
    En fait pour la 3d, on utilise des matrice 4*4 pour permet certaines transformations telque les translations et les projections mais pour les rotations, en 3d les matrices 3*3 sont suffisantes.

    Je sais que vos msg datent, mais bon....

  13. #13
    Ol'
    Ol' est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 69
    Points
    69
    Par défaut
    Les matrices 4*4 sont choisies pour une question d'homogénéité. En effet, il faut que toutes les transformations puissent s'exprimer à l'aide de la même transformation.

    Or avec des matrices 3*3, on ne peut pas exprimer la composition d'une rotation par une translation. Du moins, la matrice que l'on obtiendrait ne serait pas inversible par blocs.

    Voila, j'espère que j'ai pu t'éclairer.
    Ol'

    (PS : pour les puristes, les nostalgiques de la prépa et les autres, on peut montrer que tout déplacement peut s'exprimer comme étant la composition d'une rotation par une translation)

  14. #14
    Membre habitué
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Points : 187
    Points
    187
    Par défaut
    ben pour tt te dire moi g déjà programmé tt ça et ça donne un prog de fou:

    http://users.skynet.be/fa274587/World3d.zip

    bonne chance pour tt comprendre
    This message was powered by:
    Ubuntu GNU/Linux

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