Package nu3a.geometry

Examples of nu3a.geometry.N3Point2D


    }
  }

  protected void processGeometry() {
    if (dirtyGeometry) {
      N3Point2D p1 = null;
      N3Point2D p2 = null;
      N3Point2D p3 = null;
      N3Vector2D n1 = null;
      N3Vector2D n2 = null;
      N3Vector2D n3 = null;
      N3ColorRGBA c1 = null;
      N3ColorRGBA c2 = null;
View Full Code Here


    return true;
  }

  private boolean testPolygon(N3Polygon poly) {
    // Punto en el interior del poligono proyectado.
    N3Point2D inside;
    // Obtenemos el plano del poligono representado de la forma Ax + By +Cz
    // +D = 0
    N3Vector3D polyNormal = poly.getPolygonNormal();
    N3Point3D v = (N3Point3D) poly.getVertex(0);
    float polyD = -(polyNormal.x * v.x + polyNormal.y * v.y + polyNormal.z
        * v.z);
    // Primero comprobamos si hay intersecci�n entre el rayo y el plano
    // Substituimos (x,y,z)=(px,py,pz) + t(dx,dy,dz) en la ecuacion del
    // plano.
    // despejamos t = -(Apx + Bpy + Cpz + D)/(Adx + Bdy + Cdz)
    float s = (polyNormal.x * d.x + polyNormal.y * d.y + polyNormal.z * d.z);
    if (s == 0)
      return false;
    float t = -(polyNormal.x * src.x + polyNormal.y * src.y + polyNormal.z
        * src.z + polyD)
        / s;
    if (t <= 0)
      return false;

    // Ahora hay que comprobar si el punto de corte del rayo con el plano,
    // esta dentro del poligono.
    // Obtenemos el punto de corte con el plano.
    N3Point3D p3D = new N3Point3D(src.x + t * d.x, src.y + t * d.y, src.z
        + t * d.z);

    // Utilizamos el metodo de los half-spaces proyectando el pol�gono y el
    // punto ortograficamente en 2D,
    // seleccionando como plano de proyecci�n aquel en el que el pol�gono
    // tenga un mayor �rea.
    // El �rea es proporcional al las componentes A,B,C del vector normal
    // del pol�gono.
    N3Point2D p2D;
    // Indica en que plano hemos proyectado. 0 = yz, 1 = zx, 2 = xy.
    int plane;
    if (Math.abs(polyNormal.x) > Math.abs(polyNormal.y)
        && Math.abs(polyNormal.x) > Math.abs(polyNormal.z)) {
      // Si es |A| proyectamos en el plano yz.
      p2D = new N3Point2D(p3D.y, p3D.z);
      plane = 0;
    } else if (Math.abs(polyNormal.y) > Math.abs(polyNormal.x)
        && Math.abs(polyNormal.y) > Math.abs(polyNormal.z)) {
      // Si es |B| proyectamos en el plano zx.
      p2D = new N3Point2D(p3D.z, p3D.x);
      plane = 1;
    } else {
      // Si es |C| proyectamos en el plano xy.
      p2D = new N3Point2D(p3D.x, p3D.y);
      plane = 2;
    }

    // Para cada arista del poligono calculamos la ecuaci�n e(u,v)= au + bv
    // + c = 0 que representa un divisi�n del espacio en 2
    // partes, "half-space", el pol�gono queda definido por la intersecci�n
    // de todos ellos.
    // Para un poligono definido en sentido antihorario un punto esta dentro
    // de el si para todos las aristas
    // e < 0.
    for (int i = 0; i < poly.getSides(); i++) {
      // Proyectamos los puntos de la arista actual.
      N3Point3D v13D = (N3Point3D) poly.getVertex(i);
      N3Point3D v23D;
      N3Point2D v1, v2;
      if (i == poly.getSides() - 1)
        v23D = (N3Point3D) poly.getVertex(0);
      else
        v23D = (N3Point3D) poly.getVertex(i + 1);
      if (plane == 0) {
        v1 = new N3Point2D(v13D.y, v13D.z);
        v2 = new N3Point2D(v23D.y, v23D.z);
        inside = new N3Point2D(
            (((N3Point3D) poly.getVertex(0)).y
                + ((N3Point3D) poly.getVertex(1)).y + ((N3Point3D) poly
                .getVertex(2)).y) / 3.0f,
            (((N3Point3D) poly.getVertex(0)).z
                + ((N3Point3D) poly.getVertex(1)).z + ((N3Point3D) poly
                .getVertex(2)).z) / 3.0f);
      } else if (plane == 1) {
        v1 = new N3Point2D(v13D.z, v13D.x);
        v2 = new N3Point2D(v23D.z, v23D.x);
        inside = new N3Point2D(
            (((N3Point3D) poly.getVertex(0)).z
                + ((N3Point3D) poly.getVertex(1)).z + ((N3Point3D) poly
                .getVertex(2)).z) / 3.0f,
            (((N3Point3D) poly.getVertex(0)).x
                + ((N3Point3D) poly.getVertex(1)).x + ((N3Point3D) poly
                .getVertex(2)).x) / 3.0f);
      } else {
        v1 = new N3Point2D(v13D.x, v13D.y);
        v2 = new N3Point2D(v23D.x, v23D.y);
        inside = new N3Point2D(
            (((N3Point3D) poly.getVertex(0)).x
                + ((N3Point3D) poly.getVertex(1)).x + ((N3Point3D) poly
                .getVertex(2)).x) / 3.0f,
            (((N3Point3D) poly.getVertex(0)).y
                + ((N3Point3D) poly.getVertex(1)).y + ((N3Point3D) poly
View Full Code Here

    }
  }

  protected void processGeometry() {
    if (dirtyGeometry) {
      N3Point2D p1 = null;
      N3Point2D p2 = null;
      N3Vector2D n1 = null;
      N3Vector2D n2 = null;
      N3ColorRGBA c1 = null;
      N3ColorRGBA c2 = null;
      vertexData.clear();
View Full Code Here

    }
  }

  protected void processGeometry() {
    if (dirtyGeometry) {
      N3Point2D p1 = null;
      N3Vector2D n1 = null;
      N3ColorRGBA c1 = null;
      vertexData.clear();
      normalData.clear();
      colorData.clear();
View Full Code Here

  public void keyTyped(KeyEvent e) {
  }

  public void mouseClicked(MouseEvent e) {
    N3Ray ray = scene.getActiveCamera().getRay(new N3Point2D((float) e.getX(), (float) e.getY()), 1000.0f);
    Vector objects = scene.getHierarchyRoot().testRec(ray);
        if (objects.size() > 0) {
          scene.Zorder(objects, scene.getActiveCamera().getPosition());
            N3VisualObject o = (N3VisualObject) objects.elementAt(0);
            if (o.testGeometry(ray, true))
View Full Code Here

TOP

Related Classes of nu3a.geometry.N3Point2D

Copyright © 2018 www.massapicom. 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.