Source code to html (Java,C++,C)
G.Desnoix ©96,97,98

/**
   * @creation 25/03/97
   * @modification 22/07/98
   * @statut instable
   */

package fr.stcpmvn.ebli.geometrie;

import java.io.*;
import fr.stcpmvn.ebli.mathematiques.*;

/**
   * Un vecteur 3D
   * @version 0.02, 22/07/98
   * @author Guillaume Desnoix
   */

public class Vecteur
{
  Matrice m;

  public Vecteur()
  {
    m=new Matrice(1,4);
    m.a(0,3,0.);
  }

  public Vecteur(double ix, double iy, double iz)
  {
    m=new Matrice(1,4);
    m.a(0,0,ix);
    m.a(0,1,iy);
    m.a(0,2,iz);
    m.a(0,3,0.);
  }

  public double x() { return m.a(0,0); }
  public double y() { return m.a(0,1); }
  public double z() { return m.a(0,2); }

  public void x(double ix) { m.a(0,0,ix); }
  public void y(double iy) { m.a(0,1,iy); }
  public void z(double iz) { m.a(0,2,iz); }

  public String toString()
  {
    return "Vecteur("+x()+", "+y()+", "+z()+")";
  }  

// operateurs unaires
  public double norme()
  {
    return Math.sqrt(produitScalaire(this));
  }

  public double normeXY()
  {
    return Math.sqrt(produitScalaireXY(this));
  }

  public Vecteur normalise()
  {
    double n=norme();
    return new Vecteur(x()/n,y()/n,z()/n);
  }

  public Vecteur normaliseXY()
  {
    double n=normeXY();
    return new Vecteur(x()/n,y()/n,z());
  }

  public Vecteur equilibre()
  {
    double n=x()+y()+z();
    return new Vecteur(x()/n,y()/n,z()/n);
  }
  
  public Vecteur equilibreXY()
  {
    double n=x()+y();
    return new Vecteur(x()/n,y()/n,z());
  }

  public Vecteur rotationZ90()
  {
    return new Vecteur(-x(),y(),z());
  }

  public Vecteur projectionXY()
  {
    return new Vecteur(x(),y(),0.);
  }

  public Vecteur applique(Morphisme t)
  {
    Vecteur r=new Vecteur();
    r.m=m.multiplication(t.m);
    return r;
  }

// Operateurs binaires
  public Vecteur multiplication(double d)
  {
    return new Vecteur(d*x(),d*y(),d*z());
  }

  public Vecteur division(double d)
  {
    return new Vecteur(x()/d,y()/d,z()/d);
  }

  public double division(Vecteur v)
  {
    Vecteur w=projection(v);
         if(v.x()!=0.) return w.x()/v.x();
    else if(v.y()!=0.) return w.y()/v.y();
    else if(v.z()!=0.) return w.z()/v.z();
    return 0.;
  }

  public Vecteur addition(Vecteur v)
  {
    return new Vecteur(x()+v.x(),y()+v.y(),z()+v.z());
  }

  public Point addition(Point p)
  {
    return new Point(x()+p.x(),y()+p.y(),z()+p.z());
  }

  public Vecteur soustraction(Vecteur v)
  {
    return new Vecteur(x()-v.x(),y()-v.y(),z()-v.z());
  }

  public double produitScalaire(Vecteur v)
  {
    return x()*v.x()+y()*v.y()+z()*v.z();
  }

  public double produitScalaireXY(Vecteur v)
  {
    return x()*v.x()+y()*v.y();
  }

  public double produitSinus(Vecteur v)
  {
    return rotationZ90().produitScalaire(v);
  }

  public double produitSinusXY(Vecteur v)
  {
    return v.x()*-y()+v.y()*x();
  }

  public Vecteur produitVectoriel(Vecteur v)
  {
    return new Vecteur(y()*v.z()-z()*v.y(),
		       z()*v.x()-x()*v.z(),
		       x()*v.y()-y()*v.x());
  }

  public Vecteur produitVectorielXY(Vecteur v)
  {
    return new Vecteur(0.,0.,x()*v.y()-y()*v.x());
  }

  public Vecteur projection(Vecteur v)
  {
    return v.normalise().multiplication(produitScalaire(v.normalise()));
  }

// Operateurs ternaires
  public double produitTripleScalaire(Vecteur v1,Vecteur v2)
  {
    return produitVectoriel(v1).produitScalaire(v2);
  }

  public Vecteur produitTripleVectoriel(Vecteur v1,Vecteur v2)
  {
    return produitVectoriel(v1).produitVectoriel(v2);
  }

}

colors: import - statement - class - type - number - string - comment