PlaneBoundedVolume.cs :  » Game » RealmForge » Axiom » MathLib » C# / CSharp Open Source

Home
C# / CSharp Open Source
1.2.6.4 mono .net core
2.2.6.4 mono core
3.Aspect Oriented Frameworks
4.Bloggers
5.Build Systems
6.Business Application
7.Charting Reporting Tools
8.Chat Servers
9.Code Coverage Tools
10.Content Management Systems CMS
11.CRM ERP
12.Database
13.Development
14.Email
15.Forum
16.Game
17.GIS
18.GUI
19.IDEs
20.Installers Generators
21.Inversion of Control Dependency Injection
22.Issue Tracking
23.Logging Tools
24.Message
25.Mobile
26.Network Clients
27.Network Servers
28.Office
29.PDF
30.Persistence Frameworks
31.Portals
32.Profilers
33.Project Management
34.RSS RDF
35.Rule Engines
36.Script
37.Search Engines
38.Sound Audio
39.Source Control
40.SQL Clients
41.Template Engines
42.Testing
43.UML
44.Web Frameworks
45.Web Service
46.Web Testing
47.Wiki Engines
48.Windows Presentation Foundation
49.Workflows
50.XML Parsers
C# / C Sharp
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source » Game » RealmForge 
RealmForge » Axiom » MathLib » PlaneBoundedVolume.cs
using System;
using Axiom.MathLib.Collections;

namespace Axiom.MathLib{
  /// <summary>
  ///    Represents a convex volume bounded by planes.
  /// </summary>
  public class PlaneBoundedVolume {
    #region Fields

    /// <summary>
    ///    Publicly accessible plane list, you can modify this direct.
    /// </summary>
    public PlaneList planes = new PlaneList();
    /// <summary>
    ///    Side of the plane to be considered 'outside'.
    /// </summary>
    public PlaneSide outside;

    #endregion Fields

    #region Constructors

    /// <summary>
    ///    Default constructor.
    /// </summary>
    public PlaneBoundedVolume() : this(PlaneSide.Negative) {}

    /// <summary>
    ///    Constructor.
    /// </summary>
    /// <param name="outside">Side of the plane to be considered 'outside'.</param>
    public PlaneBoundedVolume(PlaneSide outside) {
      this.outside = outside;
    }

    #endregion Constructors

    #region Methods
  
    /// <summary>
    ///    Intersection test with an <see cref="AxisAlignedBox"/>.
    /// </summary>
    /// <remarks>
    ///    May return false positives but will never miss an intersection.
    /// </remarks>
    /// <param name="box">Box to test.</param>
    /// <returns>True if interesecting, false otherwise.</returns>
    public bool Intersects(AxisAlignedBox box) {
      if(box.IsNull) {
        return false;
      }

      // If all points are on outside of any plane, we fail
      Vector3[] points = box.Corners;

      for (int i = 0; i < planes.Count; i++) {
        Plane plane = (Plane)planes[i];

        // Test which side of the plane the corners are
        // Intersection fails when at all corners are on the
        // outside of one plane
        bool splittingPlane = true;
        for (int corner = 0; corner < 8; corner++) {
          if (plane.GetSide(points[corner]) != outside) {
            // this point is on the wrong side
            splittingPlane = false;
            break;
          }
        }
        if (splittingPlane) {
          // Found a splitting plane therefore return not intersecting
          return false;
        }
      }

      // couldn't find a splitting plane, assume intersecting
      return true;
    }

    /// <summary>
    ///    Intersection test with <see cref="Sphere"/>.
    /// </summary>
    /// <param name="sphere">Sphere to test.</param>
    /// <returns>True if the sphere intersects this volume, and false otherwise.</returns>
    public bool Intersects(Sphere sphere) {
      for (int i = 0; i < planes.Count; i++) {
        Plane plane = (Plane)planes[i];

        // Test which side of the plane the sphere is
        float d = plane.GetDistance(sphere.Center);

        // Negate d if planes point inwards
        if(outside == PlaneSide.Negative) {
          d = -d;
        }

        if((d - sphere.Radius) > 0) {
          return false;
        }
      }

      // assume intersecting
      return true;
    }

    #endregion Methods
  }
}
www.java2v.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.