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

3D Java Discussion :

construire un nuage sphèrique avec des points


Sujet :

3D Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut construire un nuage sphèrique avec des points
    Salut les gars
    comme l'indique le titre , je veux bien construire un nuage de points qui prends la forme d'une shpère , quelque soit le nombre des points, je ne sais pas mais surement il y a un algorithme qui fait ça, sinon ça sera un bon exercice pour les doués en 3D !!
    je veux dire par des points des positions avec les vecteurs, voilà un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(int i = 0; i < Tableau.length ; i++){
            		   // knot point
     
            	       t3dKnot = new Transform3D();
     
     
            	       Vector3f pos = new Vector3f( x, y , z);
     
            	        t3dKnot.set (pos);
     
            	       TransformGroup k6TransformGroup = new TransformGroup(t3dKnot);
    }
    plus clairement, comment calculer les x,y et z en fonction de i (je suppose) de telle façon obtenir un nuage sphérique des points,
    moi je cherche toujours de mon coté , je vous mets au courant si je trouve la solution
    merciiiiiiiiii

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 821
    Par défaut
    Salut,

    Une petite recherche sur gogole te sort des pages en pagaille...

    Celle-là par exemple, dont le lien est issu de celle-ci
    L'algo étant relativement simple, faut tester (ce n'est pas que je doute, mais...)

    Par contre il faudrait préciser comment tu veux les répartir tes points... régulièrement, à iso-potentiel, en spirale... parce que sinon on en met la moitié au pole nord, et l'autre au pole sud!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Merci pour ta réponse vraiment rapide
    mais moi aussi j'ai trouvé plein d'algo qui parle de ça , mais j'arrive pas à le convertir en java avec des attributs x,y et z comme je les ai besoin dans mon code,
    par exemple si on prend ce que tu viens de m'envoyer :
    for k=1 to N do
    h = -1 + 2*(k-1)/(N-1)
    theta[k] = arccos(h)
    if k=1 or k=N then phi[k] = 0
    else phi[k] = (phi[k-1] + 3.6/sqrt(N*(1-h^2))) mod (2*pi)
    endfor

    c koi theta, arccos, phi, sqrt !?? et ils sont ou les x,y et z !!
    sinon comment ça s'ecrit en java ?

    merci pour ton aide

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 821
    Par défaut
    Citation Envoyé par amine84 Voir le message
    c koi theta, [...] phi
    coordonnées sphériques, c'est marqué dans les explications...

    Citation Envoyé par amine84 Voir le message
    c koi [...] arccos, [...] sqrt !??
    Euh... tu plaisantes là ou tu es sérieux? google si tu es sérieux, ou n'importe quel cours d'info sinon

    Citation Envoyé par amine84 Voir le message
    et ils sont ou les x,y et z !!
    In Cartesian coordinates the required point on a sphere of radius 1 is
    (cos(theta)*sin(phi), sin(theta)*sin(phi), cos(phi))

    Citation Envoyé par amine84 Voir le message
    sinon comment ça s'ecrit en java ?
    L'algo se compose d'une boucle avec quelques opérations arithmétiques. Tu devrais au moins être capable de nous pondre une base de code... (en plus clair, on ne va pas bosser à ta place, mais on t'aidera si tu coinces )
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Ok merci pour tes remarques,
    voilà ma traduction du l'algo en java:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Double theta = new Double(30) ;
            	  Double phi = new Double(30);
            	  for(int i = 1; i <= N ; i++){
            		   // knot point 6
     
            	       t3dKnot = new Transform3D();
            	       Double x ;
            	       Double y ;
            	       Double z ;
     
     
     
            	       int h = -1 + 2*(i-1)/(N-1);
            	       System.out.println(">>>>>>>>>>>>>>>>>>>>>> h" + h);
            	       theta = Math.acos(h);
            	       if ( i == 1 || i == N ) { phi = new Double(0);}
            	       else phi = (phi + 3.6/Math.sqrt(N*(1-h*h))) % (2 * 3.14);
     
            	       System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>> theta  :" + theta);
            	       System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>> phi :" + phi);
            	       x = Math.cos(theta) * Math.sin(phi);
            	       y = Math.sin(theta)* Math.sin(phi);
            	       z = Math.cos(phi);
            	       System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>> y :" + y.toString());
            	       System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>> z :" + z.toString());
            	       Vector3f pos6 = new Vector3f( x.intValue(), y.intValue()*10 , z.intValue()*10);
            	       t3dKnot.set (pos6);
    }
    Il y a pas une erreur de compilation, mais lorsque j'execute le code, il y a deux points qui sont bien classés(la première et la dernière ) , mais tout le reste viennent au même point , j'ai essayé de debugueret j'ai remarqué que les autres points ont valeur NaN pour le phi !!!

    voilà le console
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    >>>>>>>>>>>>>>>>>>>>>> h-1
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :3.141592653589793
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :0.0
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :0.0
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :1.0
    >>>>>>>>>>>>>>>>>>>>>> h-1
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :3.141592653589793
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :NaN
    >>>>>>>>>>>>>>>>>>>>>> h-1
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :3.141592653589793
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :NaN
    >>>>>>>>>>>>>>>>>>>>>> h-1
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :3.141592653589793
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :NaN
    >>>>>>>>>>>>>>>>>>>>>> h0
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :1.5707963267948966
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :NaN
    >>>>>>>>>>>>>>>>>>>>>> h0
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :1.5707963267948966
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :NaN
    >>>>>>>>>>>>>>>>>>>>>> h0
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :1.5707963267948966
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :NaN
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :NaN
    >>>>>>>>>>>>>>>>>>>>>> h1
    >>>>>>>>>>>>>>>>>>>>>>>>>> theta  :0.0
    >>>>>>>>>>>>>>>>>>>>>>>>>> phi :0.0
    >>>>>>>>>>>>>>>>>>>>>>>>>> y :0.0
    >>>>>>>>>>>>>>>>>>>>>>>>>> z :1.0
    Pourtant j'ai appliqué l'algo tel qu'il est !!, est ce que il y a pas une idée SVP

  6. #6
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 821
    Par défaut
    Citation Envoyé par amine84 Voir le message
    Pourtant j'ai appliqué l'algo tel qu'il est !!
    Presque...

    Ca, ça aurait dû te mettre sur la voie:
    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
    >>>>>>>>>>>>>>>>>>>>>> h-1
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h-1
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h-1
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h-1
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h0
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h0
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h0
    [...]
    >>>>>>>>>>>>>>>>>>>>>> h1
    tu as déclaéré h en tant qu'entier... en prime tu as un méchante division entière pour le calcul... donc ça ne fonctionne pas.

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int h = -1 + 2*(i-1)/(N-1);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double h = -1 + (2.0*(i-1))/(N-1);
    Tu auras déjà tous tes points. A voir ensuite si ils se répartissent comme il faut.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut

    Bravo, ça marche mieux maintenant !!
    mais j'ai encore un problème que il y a certains points qui se superposent, et puisque mes points ne seront pas vraiment des simples points mais des formes, je veux bien qu'ils seront espacés ,j 'ai agi sur les variables phi et theta mais ça donne pas vraiment la bonne visualisation, qu'est e qu'on doit faire vraiment pour espacer les points ,

    merciiiii

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    excuse moi, mais j'ai une bonne nouvelle, j'ai fait des modifs à ce niveau :

    j'ai remplacé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( i == 1 || i == N ) { phi = new Double(0);}
            	       else phi = (phi + 3.6/Math.sqrt(N*(1-h*h))) % (2 * 3.14);
    par ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if ( i == 1 ) { phi = new Double(0);}
            	       else phi = (phi + 3.6/Math.sqrt(N*(3-h*h))) % (2 * 3.14);
    pour un nombre limité de formes 4a marche, ils sont bien espacés... mais est ce que tu penses que ça sera toujours garantit(l'espacement) même avec des nombreux formes, parce que le nombre de formes est dynamique puisque ça vient d'une base de données,
    qu'est ce que tu penses ??!! est ce que ces modifs sont bien ou non ?

  9. #9
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 821
    Par défaut
    Intervertis theta et phi dans les calculs des coordonnées cartésiennes, ça devrait être plus joli.

    Pour ta modif, je ne vois pas à quoi ça correspond mathématiquement parlant, donc... évite!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    oui, mais j'ai modifié les theta et phi mais rien ne change, on dirait ils sont des constantes !??

  11. #11
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 821
    Par défaut
    Citation Envoyé par amine84 Voir le message
    oui, mais j'ai modifié les theta et phi mais rien ne change, on dirait ils sont des constantes !??
    ah oui, en effet, ton calcul de phi n'est pas bon. Regarde l'algo, la formule n'est pas bonne [edit] mais si tu ne manipules pas phi en cours de route, sa valeur doit être réutilisée à al boucle suivante, donc ça doit fonctionner
    De plus, l'algo range les résultats dans des tableau, c'est plus simple à gérer...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    excuse moi, mais l'initialisation de phi et theta n'ont rien à voir avec l'espacement des points, puisque ils seront à chaque fois recalculés indépendament de leurs valeurs initiales !!

    mais bon je crois que cette valeur ecrite en bold eetsouligné,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    else phi = (phi + 3.6/Math.sqrt(N*(3-h*h))) % (2 * 3.14);
    c'est elle qui reagie sur l'espacement des points, plus on augumente plus ils seront espacés,

    Merciii beaucoup en tout cas et j'espère que les autres profitent aussi puisque la traduction en java ci dessus marche bien

  13. #13
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 821
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 821
    Par défaut
    Citation Envoyé par amine84 Voir le message
    excuse moi, mais l'initialisation de phi et theta n'ont rien à voir avec l'espacement des points, puisque ils seront à chaque fois recalculés indépendament de leurs valeurs initiales !!
    Gnein?
    pour theta ok, mais phi est calculé à partir de la valeur du point précédent.


    Citation Envoyé par amine84 Voir le message
    c'est elle qui reagie sur l'espacement des points, plus on augumente plus ils seront espacés
    C'est la valeur 3.6/sqrt(N*(1-h*h)) qui définit l'espacement entre les points. Ok, tu peux dire que donc si on met 3 à la place de 1, on joue sur l'espacement, mais mathématiquement ça ne correspond à rien. Autant jouer sur l'espacement en mettant un facteur devant.
    Après c'est la même question qu'auparavant, tu n'as pas précisé comment tu voulais répartir tes points, donc si ça te va, garde ta solution (sinon, inverse phi et theta pour le calcul des coordonnées cartésiennes, ça marche encore mieux, pas besoin de magouiller)

    Je n'ai pas vraiment compris pourquoi tu disais que les valeurs étaient constantes, mais ce serait bien de débugguer et de comprendre pourquoi...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  14. #14
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Salut,
    En tout cas tout marche bien maintenant, c vrai que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    3.6/sqrt(N*(1-h*h))
    qui définit l'espacement entre les points,

    encore merci

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

Discussions similaires

  1. une courbe avec des points
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 17/03/2008, 18h48
  2. Message d'erreur avec des points d'interrogation
    Par Tintou dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/01/2008, 10h34
  3. [Prototype] Requête Ajax ne passe pas avec des points d'interrogation
    Par Romalafrite dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 09/12/2007, 23h31
  4. [Débutant] Scinder une chaine avec des points
    Par poiwalt dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 06/07/2007, 21h09
  5. Réponses: 24
    Dernier message: 01/06/2007, 22h37

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