Distance entre 2points d'un objet 3D

bimane - 1 avril 2013 à 22:18
 bimane - 3 avril 2013 à 13:51
Salut
Je realise une application en Java3D je met une scene apres j'ai des objets sur un plan c'est a dire le sol mais les objets une fois chargé la moitié on la voit sur le sol et lautre moitié en dessus je veux cette fois récuperer la distance entre le point upper et lower de l'objet je l'ai calculé de cette facon la mais une fois je récupere les valeurs elles ne sont pas juste
 Point3d pd = new Point3d();
    Point3d pf = new Point3d();
    b.getUpper(pd);
    b.getLower(pf);
    double height = Math.sqrt(Math.pow(pf.x-pd.x,2) + Math.pow(pf.y-pd.y,2) + Math.pow(pf.z-pd.z,2));
    System.out.println(height);


Voila le calcul que je fais j'ai pas d'erreur de compilcation mais les valeurs sont fausses
Merci pour votre ade

9 réponses

Utilisateur anonyme
2 avril 2013 à 10:14
Bonjour

Voici la formule à utiliser. A première vue, votre implémentation est correcte, l'erreur ne vient pas de là. Vérifiez que vous récupérez les bons points (et que vous utilisez la toute dernière version de Java3D, c'est-à-dire la version la 1.6.0 fournie par la fondation JogAmp et non par Oracle). Qu'est-ce qui vous fait dire que les valeurs sont fausses?














T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Salut
Ce qui me fait dire qu'elles sont fausse car je fais le test sur deux objets un grand l'autre petit automatiquement je dois avoir la distance entre upper et lower de l'objet grand plus grande que celle du petit et la je trouve le contraire.
Donc je crois que la distance calculé la calcule a partir de la diagonale ou je ne sais pas quoi!
Merci pour votre aide
0
Utilisateur anonyme
2 avril 2013 à 13:46
Premièrement, utilisez la méthode Point3d.distance(Point3d) pour être sûr que le problème ne vient pas de là.

Deuxièmement, vérifiez que le volume englobant (BoundingBox) est correct. Gardez à l'esprit que ce volume englobant est aligné avec les axes du repère (cf. la documentation de la classe javax.media.j3d.BoundingBox). Il se peut qu'un objet plus petit qu'un autre ait une boite englobante plus grande.















T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
Utilisateur anonyme
2 avril 2013 à 14:01
"je fais le test sur deux objets un grand l'autre petit automatiquement je dois avoir la distance entre upper et lower de l'objet grand plus grande que celle du petit" Ceci n'est vrai que pour des boîtes englobantes orientées, elles ne sont pas supportées par l'API standard de Java3D.










T.U.E.R (First Person Shooter créé par Julien Gouesse)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut
Point3D.distance et ce que j'ai fait donne le même résultat.
Je fais des recherche la concernant ce que tu m'avais dis pour le boundingbox mais j'ai rien trouvé concernant la méthode qui peut spécifié le volume englobant.
0
Utilisateur anonyme
3 avril 2013 à 00:48
BoundingBox = boite englobante

Je vous suggère simplement de vérifier en mode "debug" que l'objet instance de la classe BoundingBox contient bien les valeurs auxquelles vous vous attendez pour un modèle donné. Si le calcul de la distance est bon, ce sont les valeurs en entrée qui sont fausses. J'ai déjà eu à résoudre un problème similaire, mon modèle MD2 avait des coordonnées centrées en zéro et le sol était aussi à zéro donc j'avais une moitié du corps au-dessus et une moitié du corps en dessous du sol. J'avais fait une translation du modèle de la moitié de l'écart entre les 2 coins et ça avait marché. J'utilise Ardor3D mais le principe est identique.
0
Bonsoir
C'est vraiment le même probleme que le mien.
c'est pour cela j'ai pensé a calculer la distance entre les deux points upper et lower et la diviser sur deux apres faire ma translation.
Je vais essayer ce que vous m'avez proposé meme si j'ai pas bien compris "vérifier en mode "debug" que l'objet instance de la classe BoundingBox contient bien les valeurs auxquelles vous vous attendez pour un modèle donné"
Merci
0
Utilisateur anonyme
3 avril 2013 à 01:00
Vous appelez les méthodes getUpper et getLower sur l'objet en question, c'est une instance de la classe BoundingBox. Je vous ai proposé d'utiliser le mode de débogage pas à pas disponible dans tous les IDE dignes de ce nom (Eclipse, Netbeans, ...). Vous pouvez aussi tout simplement afficher le contenu des variables en question avec System.out.println.
0
Bonjour
Là j'ai un autre probleme quand j'ai une scène composée par certains objets, j'utilise MouseRotate de tourner la scène et PickTranslateBehavior pour translater mon objet avec la cueillette. En démarrage, sans MouseRotating la scène, si je traslate un objet via PickTranslate il se déplace vers la direction de la souris. Maintenant, je tourne la scène en MouseRotate sur l'axe y ou x-axe avec un angle> 90 °, alors si je pickTranslate un objet, cet objet se déplace sur adverse direction de la souris.
J'ai essayé d'appliquer la rotation de la caméra apres je la transtate mais la l'objet part dans un point a l'infini.
0
Rejoignez-nous