Dessiner un ligne ou segment AB dans les 3 axes

Signaler
Messages postés
4
Date d'inscription
vendredi 3 mars 2017
Statut
Membre
Dernière intervention
5 mars 2017
-
Messages postés
4
Date d'inscription
vendredi 3 mars 2017
Statut
Membre
Dernière intervention
5 mars 2017
-
Bonjour,
je voudrais de dessiner un ligne ou bien segment "AB" mais dans les 3 axes (x.y.z)
. j'ai essayée Drawline mais cette instruction utilisée seulement pour x et y.
ça marche pas dans ce code.
aider moi s'il vous plait.


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;



public class Segment
{
  public Point3 A;
     public Point3 B;


public Color c;

public Segment(Point3 A, Point3 B, Color c)
 {
  this.A = new Point3(A.x, A.y, A.z);
  this.B = new Point3(B.x, B.y,B.z);

this.c = c;
 }

public void SetColor(Color c)
 {
  this.c = c;
 }

public void Render(Graphics g)
 {
  Graphics2D g2 = (Graphics2D) g;

g2.setColor(this.c);

g2.drawline(A.x, A.y,A.z, B.x, B.y,A.z );

}
}

1 réponse

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
122
Bonjour,

Java ne gère que deux axes car ton écran est composé de pixels sur deux dimensions.

Tu peux faire des représentations 3D en Java, soit avec des bibliothèques, soit à la main, mais ça ne restera que des projections 2D sur l'écran.

Par exemple, tu peux considérer la projection suivante :
f(x,y,z)=(x+z/2, y+z/2)

Ce qui donnerait à peu près ceci pour un cube :

La confiance n'exclut pas le contrôle
Messages postés
4
Date d'inscription
vendredi 3 mars 2017
Statut
Membre
Dernière intervention
5 mars 2017

merci pour votre réponse;
mais quelle est l'instruction qui remplace "drawline" pour dessiner segment A(x.y.z) e B(x.y.z)
merci
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
122
Selon ta projection tu peux avoir par exemple :
g2.drawline(A.x+A.z/2, A.y+A.z/2, B.x+B.z/2, B.y+B.z/2);
Messages postés
4
Date d'inscription
vendredi 3 mars 2017
Statut
Membre
Dernière intervention
5 mars 2017
>
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021

merci beaucoup;
est ce que tu sais comment calculer point d'intersection de deux segments dans un espace 3d
parce que dans l'espace 2d est calculer comme ça

public static Point2D.Double intersection(Point2D.Double A, Point2D.Double B,Segment segment2) {/***/
     double d = (A.x-B.x)*(segment2.A.y-segment2.B.y) - (A.y-B.y)*(segment2.A.x-segment2.B.x);
     if (d == 0) // Lines are parallel.
      return null;

double xi = ((segment2.A.x-segment2.B.x)*(A.x*B.y-A.y*B.x)-(A.x-B.x)*(segment2.A.x*segment2.B.y-segment2.A.y*segment2.B.x))/d;
     double yi = ((segment2.A.y-segment2.B.y)*(A.x*B.y-A.y*B.x)-(A.y-B.y)*(segment2.A.x*segment2.B.y-segment2.A.y*segment2.B.x))/d;

double lx1 = ((xi-A.x)) ;
     double lx2 =(B.x-A.x);
     double ly1 = ((yi-A.y)) ;
     double ly2 =(B.y-A.y);
     double h1 = lx1/lx2;
     double h2 = ly1/ly2;

if((h1 >= 0 && h1 <=1 )||(h2 >= 0 && h2 <= 1)){

return new Point2D.Double(xi,yi);
  }
  else{
   return null; 
  }
   }
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
122 >
Messages postés
4
Date d'inscription
vendredi 3 mars 2017
Statut
Membre
Dernière intervention
5 mars 2017

En 2D ou en 3D le problème reste à peu près le même.

Soit A(ax, ay, az), B(bx, by, bz) les points de AB
Soit C(cx, cy, cz), D(dx, dy, dz) les points de CD

L'intersection (si elle existe) vérifie l'égalité A + v*(B-A) = C + w*(D-C)

Donc finalement ça reste une équation à deux inconnues comme en 2D.
Il faut juste la vérifier sur la 3è dimension une fois v et w calculés à partir des deux première dimensions.

Remarque : ici je parle de l'intersection de deux droites, une fois le point d'intersection trouvé (s'il existe) il faut aussi vérifier qu'il appartient bien aux deux portions de droites où sont les segments.
Messages postés
4
Date d'inscription
vendredi 3 mars 2017
Statut
Membre
Dernière intervention
5 mars 2017
>
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021

est ce que tu connais comment calculer mathématiquement et en java. parce que je suis débutant dans la programmation; et je besoin cette calcule dans un autre travail. merci infiniment.