Android Open Source - Schooner-3D Plane






From Project

Back to project page Schooner-3D.

License

The source code is released under:

Apache License

If you think the Android project Schooner-3D listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2012 Dan Mercer/*w  w  w .  j a  va  2 s .  c  om*/
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.supermercerbros.gameengine.collision;

import com.supermercerbros.gameengine.util.Utils;

/**
 * Represents a geometric plane. A Plane object is immutable.
 */
public class Plane {
  final Vector normal;
  final Point point;
  /**
   * The tolerance of {@link #pointIsInFront(Point)} checks. If the cosine is
   * greater than or equal to this, the test passes.
   */
  public static final float TOLERANCE = -.000f;

  public Plane(final Point point, final Vector normal) {
    this.normal = normal.normalize();
    this.point = point;
  }

  public Plane transform(Matrix matrix) {
    return new Plane(point.transform(matrix), normal.transform(matrix));
  }

  /**
   * Returns the distance from this <code>Plane</code> to the given
   * <code>Point</code>. The distance is negative if the point is behind the
   * plane.
   * 
   * @param p
   *            The Point to find the distance to.
   * @return The signed distance between this Plane and p.
   */
  public double distanceTo(final Point p) {
    return (p.x - point.x) * normal.x + (p.y - point.y) * normal.y
        + (p.z - point.z) * normal.z;
  }

  /**
   * Returns the intersection of this Plane and the given Edge.
   * 
   * @param edge
   *            The Edge to intersect with this Plane.
   * @param matrix
   * @return The Point of intersection, or null if the Edge does not intersect
   *         this Plane.
   */
  public Point intersect(final Line edge) {
    final double hDistance = -distanceTo(edge.head);
    final float alpha = (float) (hDistance / (hDistance + distanceTo(edge.tail)));
    
    if (alpha < 0.0 || alpha > 1.0) {
      return null;
    } else {
      return new Point(
          edge.head.x + alpha * (edge.tail.x - edge.head.x), 
          edge.head.y + alpha * (edge.tail.y - edge.head.y), 
          edge.head.z + alpha * (edge.tail.z - edge.head.z));
    }
  }

  /**
   * Checks if the given point is in front of this Plane.
   * 
   * @param x
   *            The x-coordinate of the Point to check.
   * @param y
   *            The y-coordinate of the Point to check.
   * @param z
   *            The z-coordinate of the Point to check.
   * @return True if the point is in front of this Plane
   */
  public boolean pointIsInFront(final float x, final float y, final float z) {
    return pointIsInFront(new Point(x, y, z));
  }

  /**
   * Checks if the given point is in front of this Plane.
   * 
   * @param p
   *            The Point to check.
   * @return True if the point is in front of this Plane
   */
  public boolean pointIsInFront(final Point p) {
    float x, y, z, length;
    x = p.x - point.x;
    y = p.y - point.y;
    z = p.z - point.z;
    length = Utils.pythagF(x, y, z);
    x /= length;
    y /= length;
    z /= length;
    float dot = x * normal.x + y * normal.y + z * normal.z;
    return dot >= TOLERANCE;
  }

  public Point projectPointOnto(final Point p) {
    final Vector v = new Vector(normal.x, normal.y, normal.z,
        (float) -distanceTo(p));
    return p.translate(v);
  }

  @Override
  public String toString(){
    return "Plane(" + point.toString() + ", " + normal + ")";
  }
}




Java Source Code List

com.supermercerbros.gameengine.GameActivity.java
com.supermercerbros.gameengine.GameView.java
com.supermercerbros.gameengine.Schooner3D.java
com.supermercerbros.gameengine.TestActivity.java
com.supermercerbros.gameengine.TestMaterials.java
com.supermercerbros.gameengine.TestObjects.java
com.supermercerbros.gameengine.animation.AnimationData.java
com.supermercerbros.gameengine.animation.Keyframe.java
com.supermercerbros.gameengine.animation.MeshAnimation.java
com.supermercerbros.gameengine.armature.ActionData.java
com.supermercerbros.gameengine.armature.Action.java
com.supermercerbros.gameengine.armature.BinarySkeletalVertexModifier.java
com.supermercerbros.gameengine.armature.Bone.java
com.supermercerbros.gameengine.armature.SkeletalVertexModifier.java
com.supermercerbros.gameengine.armature.Skeleton.java
com.supermercerbros.gameengine.collision.Bounds.java
com.supermercerbros.gameengine.collision.Collider.java
com.supermercerbros.gameengine.collision.CollisionDetector.java
com.supermercerbros.gameengine.collision.Collision.java
com.supermercerbros.gameengine.collision.DebugListener.java
com.supermercerbros.gameengine.collision.Edge.java
com.supermercerbros.gameengine.collision.Face.java
com.supermercerbros.gameengine.collision.Feature.java
com.supermercerbros.gameengine.collision.Intersection.java
com.supermercerbros.gameengine.collision.Line.java
com.supermercerbros.gameengine.collision.LocalDistMinimum.java
com.supermercerbros.gameengine.collision.Matrix.java
com.supermercerbros.gameengine.collision.OnCollisionCheckFinishedListener.java
com.supermercerbros.gameengine.collision.Plane.java
com.supermercerbros.gameengine.collision.Point.java
com.supermercerbros.gameengine.collision.Polyhedron.java
com.supermercerbros.gameengine.collision.SphereBounds.java
com.supermercerbros.gameengine.collision.Vector.java
com.supermercerbros.gameengine.collision.Vertex.java
com.supermercerbros.gameengine.debug.JankCatcher.java
com.supermercerbros.gameengine.debug.LoopLog.java
com.supermercerbros.gameengine.engine.Camera.java
com.supermercerbros.gameengine.engine.DataPipe.java
com.supermercerbros.gameengine.engine.EGLContextLostHandler.java
com.supermercerbros.gameengine.engine.Engine.java
com.supermercerbros.gameengine.engine.GameRenderer.java
com.supermercerbros.gameengine.engine.Light.java
com.supermercerbros.gameengine.engine.Normals.java
com.supermercerbros.gameengine.engine.RenderData.java
com.supermercerbros.gameengine.engine.Scene.java
com.supermercerbros.gameengine.engine.Time.java
com.supermercerbros.gameengine.engine.shaders.Material.java
com.supermercerbros.gameengine.engine.shaders.Program.java
com.supermercerbros.gameengine.engine.shaders.ShaderLib.java
com.supermercerbros.gameengine.engine.shaders.Shader.java
com.supermercerbros.gameengine.engine.shaders.VertexModifier.java
com.supermercerbros.gameengine.handlers.OnAnimationCompleteDispatcher.java
com.supermercerbros.gameengine.handlers.OnAnimationCompleteListener.java
com.supermercerbros.gameengine.hud.CoordsConverter.java
com.supermercerbros.gameengine.hud.GameHud.java
com.supermercerbros.gameengine.hud.HudElement.java
com.supermercerbros.gameengine.material.CelShadedMaterial.java
com.supermercerbros.gameengine.material.TexturedMaterial.java
com.supermercerbros.gameengine.math.BezierCurve.java
com.supermercerbros.gameengine.math.Curve.java
com.supermercerbros.gameengine.math.MatrixUtils.java
com.supermercerbros.gameengine.math.Quaternion.java
com.supermercerbros.gameengine.motion.CurveMovement.java
com.supermercerbros.gameengine.motion.MovementData.java
com.supermercerbros.gameengine.motion.Movement.java
com.supermercerbros.gameengine.objects.AnimatedMeshObject.java
com.supermercerbros.gameengine.objects.BasicMaterial.java
com.supermercerbros.gameengine.objects.BonedObject.java
com.supermercerbros.gameengine.objects.GameObject.java
com.supermercerbros.gameengine.objects.Metadata.java
com.supermercerbros.gameengine.parsers.ConstantCurve.java
com.supermercerbros.gameengine.parsers.GameFactory.java
com.supermercerbros.gameengine.parsers.PreBoneData.java
com.supermercerbros.gameengine.parsers.PreObjectData.java
com.supermercerbros.gameengine.parsers.Sch3D.java
com.supermercerbros.gameengine.render.Compositor.java
com.supermercerbros.gameengine.shaders.ProgramSource.java
com.supermercerbros.gameengine.texture.BitmapTexture.java
com.supermercerbros.gameengine.texture.ETC1CompressedTexture.java
com.supermercerbros.gameengine.texture.Texture.java
com.supermercerbros.gameengine.util.BetterDataInputStream.java
com.supermercerbros.gameengine.util.DelayedRunnable.java
com.supermercerbros.gameengine.util.GLES2.java
com.supermercerbros.gameengine.util.IPO.java
com.supermercerbros.gameengine.util.LoopingThread.java
com.supermercerbros.gameengine.util.Toggle.java
com.supermercerbros.gameengine.util.Utils.java