mxwcore-wotlk/deps/g3dlite/include/G3D/Cone.h

82 lines
1.9 KiB
C++

/**
@file Cone.h
Cone class
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
@cite Portions based on Dave Eberly's Magic Software Library at <A HREF="http://www.magic-software.com">http://www.magic-software.com</A>
@created 2001-06-02
@edited 2006-02-23
Copyright 2000-2006, Morgan McGuire.
All rights reserved.
*/
#ifndef G3D_CONE_H
#define G3D_CONE_H
#include "G3D/platform.h"
#include "G3D/g3dmath.h"
#include "G3D/Vector3.h"
namespace G3D {
/**
An infinite cone.
*/
class Cone {
private:
Vector3 tip;
Vector3 direction;
/** Angle from the center line to the edge. */
float angle;
public:
/**
@param angle Angle from the center line to the edge, in radians
*/
Cone(const Vector3& tip, const Vector3& direction, float angle);
/**
Forms the smallest cone that contains the box. Undefined if
the tip is inside or on the box.
*/
Cone(const Vector3& tip, const class Box& box);
virtual ~Cone() {}
/**
Returns true if the cone touches, intersects, or contains b.
If c.intersects(s) and c.intersects(Sphere(s.center, s.radius * 2)
then the sphere s is entirely within cone c.
*/
bool intersects(const class Sphere& s) const;
/**
True if v is a point inside the cone.
*/
bool contains(const class Vector3& v) const;
/** Returns the solid angle (in steradians) subtended by a cone with half-angle \a halfAngle */
static float solidAngleFromHalfAngle(float halfAngle);
static double solidAngleFromHalfAngle(double halfAngle);
/** Returns the half-angle (in radians) of a cone that subtends \a solidAngle (in steradians) */
static float halfAngleFromSolidAngle(float solidAngle);
static double halfAngleFromSolidAngle(double solidAngle);
Vector3 randomDirectionInCone(Random& rng) const;
};
} // namespace
#endif