Package ds.moteur.route.cc.elements

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

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 arc.
*
* @author Yannick BISIAUX
*
*/
public class Arc extends LigneElementaire implements Sauvegardable{

  protected Point centre;
  protected double rayon;
  /**Cap depuis le nord*/
  protected double angleOrigine;
  /**Positif vers l'est*/
  protected double ouverture;
 
  public Arc(){
    super(null, null);
  }
 
  public Arc(Point p1, Point p2, Point centre, double rayon, double angleOrigine, double ouverture) {
    super(p1, p2);
    this.centre = centre;
    this.rayon = rayon;
    this.angleOrigine = angleOrigine;
    this.ouverture = ouverture;
  }
 
  public void calculerLongueur() {
    this.longueur = Math.abs(rayon*ouverture);
  }
 
  public void recupererAngle(Angle3D angle, double ratio) {
    double cap = - (angleOrigine + ratio*ouverture);
    if (ouverture<0){
      cap += Math.PI;
    }
    angle.theta = cap;
  }
 
  public void recupererPoint(Point point, double ratio) {
    double theta = angleOrigine + ratio*ouverture;
    point.x = centre.x + rayon*Math.sin(theta);
    point.y = centre.y + rayon*Math.cos(theta);
  }
 
  /**Permet d'effectuer une transformation affine sur cet �l�ment.
   *
   * @param translation les coordonn�es de la translation
   * @param rotation l'angle de rotation en radians
   */
  public void transformer(Point translation, double rotation){
    centre.transformer(translation, rotation);
    angleOrigine -= rotation;
  }
 
  public double projeter(Point point){
    Vecteur vecteur = new Vecteur(centre, point);
    double angle = BasicGeo.liPi(Math.PI/2 - vecteur.getAngle() - angleOrigine);
    double alpha = angle/ouverture;
    return alpha;
  }
 
  public double projeterAbsCurv(Point point) {
    //La cr�ation du vecteur peut consommer du temps
    Vecteur vecteur = new Vecteur(centre, point);
    double angle = BasicGeo.liPi(Math.PI/2 - vecteur.getAngle() - angleOrigine);
    double absCurv;
    if(ouverture>0){
      absCurv = angle*rayon;
    } else {
      absCurv = -angle*rayon;
    }
    return absCurv;
  }
 
  public double projeterDistance(Point point) {
    double distance = Math.abs(point.getDistance(centre) - rayon);
    return distance;
  }
 
  public Point getCentre(){ return this.centre; }
 
  public double getRayon(){ return this.rayon; }
 
  public double getAngleOrigine(){ return this.angleOrigine; }
 
  public double getOuverture(){ return this.ouverture; }

  public void load(DataInputStream dis) throws IOException {
    super.load(dis);
    this.centre = new Point();
    this.centre.load(dis);
    this.rayon = dis.readDouble();
    this.angleOrigine = dis.readDouble();
    this.ouverture = dis.readDouble();
  }

  public void save(DataOutputStream dos) throws IOException {
    dos.writeShort(TypeElement.ARC.ordinal());
    super.save(dos);
    this.centre.save(dos);
    dos.writeDouble(this.rayon);
    dos.writeDouble(this.angleOrigine);
    dos.writeDouble(this.ouverture);
  }
}
TOP

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

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.