Android Open Source - flingbox Physic Polygon






From Project

Back to project page flingbox.

License

The source code is released under:

GNU General Public License

If you think the Android project flingbox 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

/*
 *  Flingbox - An OpenSource physics sandbox for Google's Android
 *  Copyright (C) 2009  Jon Ander Pealba & Endika Gutirrez
 */*from  ww  w  .ja  va2  s  . co m*/
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package edu.eside.flingbox.physics;

import edu.eside.flingbox.math.PolygonUtils;
import edu.eside.flingbox.math.Vector2D;
import edu.eside.flingbox.physics.collisions.ColliderPolygon;

/**
 * Implements physics properties for polygols.
 *
 */
public class PhysicPolygon extends PhysicBody {
  /** Polygon's Contour */
  private final Vector2D[] mPolygonContour;

  private final Vector2D[] mRotatedPolygonContour;
  
  /**
   * Constructor physics for default polygon.
   * 
   * @param points polygon's points
   * @param bodyMass polygon's mass
   * @param position Polygon's start position
   * @param listener Lister to be called when movement occurs
   */
  public PhysicPolygon(final Vector2D[] points, final float bodyMass, 
      final Vector2D position, final OnMovementListener listener) {
    super(bodyMass, position);
    
    final int pointsCount = points.length;
    final Vector2D[] polygonVectors = new Vector2D[pointsCount];
    final Vector2D[] rotatedPolygonContour = new Vector2D[pointsCount];
    
    
    // Stroes points into Vector array.
    for (int i = 0; i < pointsCount; i++) {
      polygonVectors[i] = new Vector2D(points[i].i, points[i].j);
      rotatedPolygonContour[i] = new Vector2D(polygonVectors[i]);
    }
      
    // Sets polygon's properties
    mPolygonContour = polygonVectors;
    mRotatedPolygonContour = rotatedPolygonContour;
    
    mListener = listener;
    mCollider = new ColliderPolygon(mRotatedPolygonContour, this);
    
    mListener.onMovement(mPosition, 0f);
    mCollider.onMovement(mPosition, 0f);

    mAngularMass = computeAngularMass(bodyMass);

  }
  
  /**
   * TODO: Computes Angular mass for current polygon
   * 
   * @param mass Body's mass
   * @param collider Body's Collider
   * @return Polygon's angular mass
   */
  private float computeAngularMass(float mass) {
    return mass * mCollider.getBoundingCircle() * mCollider.getBoundingCircle();
  }
  
  /**
   * Check if point is contained by the polygon
   * 
   * @param p point to check
   * @return true if is containded
   */
  public boolean contains(Vector2D p) {
    return PolygonUtils.polygonConatinsPoint(mPolygonContour, new Vector2D(p.i - mPosition.i, p.j - mPosition.j));
  }
  

  
  @Override
  public void setDensity(float density) {
    super.setDensity(density);
    mAngularMass = computeAngularMass(mMass);
  }
  
  
}




Java Source Code List

edu.eside.flingbox.BodySettingsDialog.java
edu.eside.flingbox.FlingboxActivity.java
edu.eside.flingbox.PreferencesActivity.java
edu.eside.flingbox.Preferences.java
edu.eside.flingbox.bodies.Body.java
edu.eside.flingbox.bodies.Polygon.java
edu.eside.flingbox.graphics.RenderBody.java
edu.eside.flingbox.graphics.RenderCamera.java
edu.eside.flingbox.graphics.RenderPolygon.java
edu.eside.flingbox.graphics.SceneRenderer.java
edu.eside.flingbox.input.SceneGestureDetector.java
edu.eside.flingbox.math.Intersect.java
edu.eside.flingbox.math.Matrix22.java
edu.eside.flingbox.math.PolygonUtils.java
edu.eside.flingbox.math.Vector2D.java
edu.eside.flingbox.physics.PhysicAtomicBody.java
edu.eside.flingbox.physics.PhysicBody.java
edu.eside.flingbox.physics.PhysicPolygon.java
edu.eside.flingbox.physics.ScenePhysics.java
edu.eside.flingbox.physics.collisions.Arbiter.java
edu.eside.flingbox.physics.collisions.ColliderPolygon.java
edu.eside.flingbox.physics.collisions.Collider.java
edu.eside.flingbox.physics.collisions.ContactSolver.java
edu.eside.flingbox.physics.collisions.Contact.java
edu.eside.flingbox.physics.gravity.GravitySource.java
edu.eside.flingbox.scene.DrawingBody.java
edu.eside.flingbox.scene.DrawingPolygon.java
edu.eside.flingbox.scene.Scene.java
edu.eside.flingbox.utils.PositionComparator.java
edu.eside.flingbox.xml.InvalidXmlException.java
edu.eside.flingbox.xml.XmlExporter.java
edu.eside.flingbox.xml.XmlImporter.java