Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide pour compréhension des objets

    13 janvier 2018 à 19:01:21

    Bonsoir, je commence avec Javascript et j'essaye de comprendre par moi même mais
    il y a certaine chose que je comprends pas.
    J'ai réalisé un code qui à pour but de donner les intersections entre une ligne
    situé à une certaine hauteur et un triangle dans un environnement 3d.
    Mon problème n'est pas comment trouver l'intersection mais c'est plus par rapport
    au langage.
    Par exemple j'aimerai créer un objet Point qui contient les coordonnées x,y,z
    d'un point. Mais est ce que l'objet retient à chaque fois les coordonnées comme 
    un tableau on va dire ou est ce que a chaque les coordonnées sont écrasées par 
    les nouvelles ?
    Je me pause donc la même question pour l'objet Triangle
    Ensuite pour l'objet intersec qui le réprésente je dois mettre des points sauf
    que comment j'initialise c'est point sachant que je ne sais pas avant le calcul 
    d'intersection se qu'ils valent ?
    Enfin est-ce que mon calcul est bon pour vx ?
    Merci 
    // Il faut créer un objet Point
    function Point(coordonneX, coordonneY, coordonneZ){
      this.coordonneX = coordonneX || 0;
      this.coordonneY = coordonneY || 0;
      this.coordonneZ = coordonneZ || 0;
      /*Est-ce que sa marche ou est ce qu'il faut rajouter une méthode
      pour a chaque fois ajouter un point ?*/
    }
    // Il faut créer un objet Intersection2
    function Intersection2(pointIntersectionA, pointIntersectionB) {
      this.pointIntersectionA = pointIntersectionA || 0;
      this.pointIntersectionB = pointIntersectionB || 0;
      /*Est-ce que sa marche ou est ce qu'il faut rajouter une méthode
      pour a chaque fois ajouter un point ?*/
    }
    // Il faut créer un objet triangle qui contient les vertices
    function Triangle(pointA, pointB, pointC){
      this.pointA = pointA || 0;
      this.pointB = pointB || 0;
      this.pointC = pointC || 0;
    }
    
    function intersectionTriangleHauteur(triangle, hauteur){
      var vx=0, vy=0, vz=0;
      vx = triangle.pointA.coordonneX - triangle.pointB.coordonneX;
      return Intersection2;
    }
    
    var PointA = new Point(0, 0, 0);
    var PointB = new Point(50, 0, 0);
    var PointC = new Point(50, 0, 50);
    
    var triangleTest = new Triangle(PointA, PointB, PointC);
    var intersec = new Intersection2(PointI1, PointI2)// Je ne sais pas faire la 
    
    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2018 à 19:13:28

      PointA PointB et PointC ont des coordonnes différentes, si tu change les coordonnes de A, ce ne vas pas affecter les autres qui ont des coordonnées différentes. Si la réponse ne te convient pas, essaye de nous donner un exemple.

      -
      Edité par Stelyus 13 janvier 2018 à 19:23:15

      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me mp, venez sur Discord (username: Stelyus#8984)
        14 janvier 2018 à 0:42:35

        La réponse me convient.

        Donc sa veut dire que si je lis un fichier avec des points et que je créer un nouvel objet Point pour chaque point présent dans le fichier il n'y aura pas de soucis.

        Par contre j'ai un problème avec ma ligne 25

        • Partager sur Facebook
        • Partager sur Twitter
          14 janvier 2018 à 0:46:10

          Quelle erreur tu as ?
          • Partager sur Facebook
          • Partager sur Twitter
          Si vous voulez me mp, venez sur Discord (username: Stelyus#8984)
            14 janvier 2018 à 1:27:46

            Salut honorable développeur,

            Formalisme un peu lourd, personnellement je préférerais quelque chose comme :

            //	Constructeur point ou vecteur (même structure).
            function Vct(x,y,z){this.x=x; this.y=y; this.z=z}
            //	clone, multiplication par un scalaire, addition (un ou plusieurs vecteurs),
            //	produit scalaire ou vectoriel, normage et affichage.
            with({o:Vct.prototype}){
            	o.cln=function(){return new Vct(this.x,this.y,this.z)}
            	o.mlt=function(k){return new Vct(k*this.x,k*this.y,k*this.z)}
            	o.add=function(){var a=arguments,x=this.x,y=this.y,z=this.z,r;
            	   for (i=0; i<a.length; i++) {x+= a[i].x; y+= a[i].y,z+= a[i].z}
            		return new Vct(x,y,z)}
            	o.scl=function(v){return this.x*v.x + this.y*v.y + this.z*v.z}
            	o.prd=function(v){return new Vct(this.y*v.z-v.y*this.z,this.z*v.x-v.z*this.x,this.x*v.y-v.x*this.y)}
            	o.nrm=function(){var t=Math.sqrt(this.scl(this));return new Vct(this.x/t,this.y/t,this.z/t)}
            	o.toString=function(){return JSON.stringify(this)}
            }
            //	constructeur de triangle
            function Trn(A,B,C){
            //	définition des sommets
            	this.A=A;this.B=B;this.C=C;
            //	mais aussi définition des cotés
            	this.a=C.add(B.mlt(-1));
            	this.b=A.add(C.mlt(-1));
            	this.c=B.add(A.mlt(-1));
            }
            
            

            Il devrait être facile de déterminer aussi les pieds des hauteurs H, I et J du triangle ainsi que le point de concours des médianes, des bissectrices, le centre du cercle inscrit... etc.

            EDIT : Par exemple, H peut être obtenu par projection orthogonale de BA (- c avec nos notation) sur BC (noté a). Celle-ci est donnée par le produit scalaire de BA par le vecteur unitaire porté par a. D'où (non testé) :

            this.H=this.B.add(a.nrm()*mlt(a.nrm().scl(-c)))

            ainsi que I et J par permutation circulaire... Quant à G, centre de gravité, c'est encore plus facile :

            this.G=this.A.add(this.B,this.C)*mlt(1/3);
            // Ou pour conserver la symétrie
            this.G=new Vct(0,0,0).add(this.A,this.B,this.C)*mlt(1/3);
            
            




            -
            Edité par 007julien 14 janvier 2018 à 11:29:21

            • Partager sur Facebook
            • Partager sur Twitter

            Aide pour compréhension des objets

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown