Package ds.moteur.route.cc.elements

Source Code of ds.moteur.route.cc.elements.Segment

package ds.moteur.route.cc.elements;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import ds.io.Sauvegardable;
import ds.moteur.geometrie.Angle3D;
import ds.moteur.geometrie.BasicGeo;
import ds.moteur.geometrie.Point;
import ds.moteur.geometrie.Vecteur;

/**Cette classe repr�sente un �l�ment de type segment.
*
* @author Yannick BISIAUX
*
*/
public class Segment extends LigneElementaire implements Sauvegardable{

  public Segment(){
    super(null, null);
  }
 
  public Segment(Point p1, Point p2) {
    super(p1, p2);
  }
 
  public void calculerLongueur() {
    this.longueur = p1.getDistance(p2);
  }
 
  public void recupererAngle(Angle3D angle, double ratio) {
    double cap;
    if (p1.x != p2.x){
      //Cas g�n�ral
      cap = Math.atan((p2.y-p1.y)/(p2.x-p1.x));
      if (p1.x>p2.x){
        //On fait un demi-tour sur le cercle
        cap = cap + Math.PI;
      }
    } else {
      //Cas ou la tangente vaut l'infini
      if (p1.y>p2.y){
        cap = -Math.PI/2;
      } else {
        cap = Math.PI/2;
      }
    }
    angle.theta = cap;
  }
 
  public void recupererPoint(Point point, double ratio) {
    point.x = p1.x + ratio*(p2.x - p1.x);
    point.y = p1.y + ratio*(p2.y - p1.y);
    point.z = p1.z + ratio*(p2.z - p1.z);
  }
 
  public double projeter(Point point){
    double X = p2.x - p1.x;
    double Y = p2.y - p1.y;
    double Z = p2.z - p1.z;
    double c = (p2.x - point.x)*X + (p2.y - point.y)*Y + (p2.z - point.z)*Z;
    double alpha = c/(X*X+Y*Y+Z*Z);
    return alpha;
  }
 
  public double projeterAbsCurv(Point point) {
    //La cr�ation de vecteur peut consommer du temps
    Vecteur vecteur1 = new Vecteur(p1, point);
    Vecteur vecteur2 = new Vecteur(p1, p2);
      double angle = BasicGeo.liPi(vecteur1.getAngle() - vecteur2.getAngle());
      double absCurv = Math.cos(angle)*vecteur1.getNorme();
    //return absCurv;
   
    double X = p2.x - p1.x;
    double Y = p2.y - p1.y;
    double Z = p2.z - p1.z;
    double c = (p2.x - point.x)*X + (p2.y - point.y)*Y + (p2.z - point.z)*Z;
    double alpha = c/(X*X+Y*Y+Z*Z);
    return ((1-alpha)*longueur);
  }
 
  public double projeterDistance(Point point) {
    //La cr�ation de vecteur peut consommer du temps
    Vecteur vecteur1 = new Vecteur(p1, point);
    Vecteur vecteur2 = new Vecteur(p1, p2);
      double angle = BasicGeo.liPi(vecteur1.getAngle() - vecteur2.getAngle());
      double distance = Math.abs(Math.sin(angle)*vecteur1.getNorme());
    return distance;
  }

  public void load(DataInputStream dis) throws IOException {
    super.load(dis);
  }

  public void save(DataOutputStream dos) throws IOException {
    dos.writeShort(TypeElement.SEGMENT.ordinal());
    super.save(dos);
  }
}
TOP

Related Classes of ds.moteur.route.cc.elements.Segment

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.