Core 1.0
|
A simple torus. More...
#include <torus.h>
Public Member Functions | |
Torus (const Vector &, const Vector &, const double &=1.0, const double &=1.0) | |
Creates a torus. More... | |
Torus (const Circle &, const double &=1.0) | |
Create a torus. More... | |
Torus (const double &, const double &=1.0) | |
Create a horizontal torus centered at origin. More... | |
~Torus () | |
Empty. | |
int | Intersect (const Ray &, double *, Vector *) const |
Computes the intersection depths and the normals between a ray and a torus. More... | |
bool | Inside (const Vector &) const |
Check if a point is inside or outside the torus. More... | |
Box | GetBox () const |
Computes the bounding box of a torus. | |
double | R (const Vector &) const |
Compute the squared Euclidean distance between a point and the torus. More... | |
double | Signed (const Vector &) const |
Compute the signed Euclidean distance between a point and the torus. More... | |
Vector | Normal (const Vector &) const |
Computes the distance vector between a torus and a given point. More... | |
double | Area () const |
Compute the surface area of a torus. | |
double | Volume () const |
Compute the volume of a torus. | |
double | Small () const |
Return the small radius of the torus. More... | |
void | Scale (const double &) |
Uniformly scales a torus. More... | |
Vector | RandomInside (Random &=Random::R239) const |
Generate a random vector inside the dodecahedron. More... | |
Public Member Functions inherited from Circle | |
Circle () | |
Empty. | |
Circle (const double &) | |
Creates a circle. More... | |
Circle (const Vector &, const Vector &, const double &) | |
Creates a circle. More... | |
Circle (const Vector &, const Vector &, const Vector &) | |
Creates a circle given three vertices. More... | |
~Circle () | |
Empty. | |
bool | Intersect (const Ray &, double &) const |
Compute the ray-disc intersection. More... | |
Vector | Center () const |
Gets the center of a circle. | |
Vector | Axis () const |
Axis of the circle. | |
double | Radius () const |
Radius of the circle. | |
double | R (const Vector &) const |
Compute the distance between a point and a circle. More... | |
Vector | Normal (const Vector &) const |
Computes the distance vector between a circle and a point. More... | |
void | Rotate (const Matrix &) |
Rotates a circle. More... | |
void | Translate (const Vector &) |
Transltes a circle. More... | |
void | Scale (const double &) |
Uniformly scales a circle. More... | |
Box | GetBox () const |
Compute the axis aligned bounding box of a circle. More... | |
double | Area () const |
Area of a circle. More... | |
Vector | RandomInside (Random &=Random::R239) const |
Generate a random vector inside the circle. More... | |
Vector | RandomOn (Random &=Random::R239) const |
Generate a random vector on the circle. More... | |
Static Public Attributes | |
static constexpr const double | epsilon = 1e-06 |
Epsilon constant for some inside-outside functions. | |
static const Torus | Unit |
Unit vertical torus, major and minor radii equal to 1. | |
Protected Attributes | |
double | s |
Small radius of the torus. | |
Protected Attributes inherited from Circle | |
Vector | c = Vector::Null |
Center of the circle. | |
Vector | axis = Vector::Z |
Axis. | |
double | r = 1.0 |
Radius. | |
Friends | |
std::ostream & | operator<< (std::ostream &, const Torus &) |
Overloaded. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from Circle | |
static double | Area (const double &) |
Area of a circle given its radius. More... | |
Static Protected Attributes inherited from Circle | |
static constexpr const double | epsilon = 1.0e-10 |
Internal epsilon constant. | |
A simple torus.
The structure does not store the squared radius of the torus so as to save memory.
Rotation and translation are inherited from Circle.
|
explicit |
Creates a torus.
c | Center. |
axis | Axis, which should be normalized. |
r | Major radius. |
s | Minor (small) radius. |
|
explicit |
Create a torus.
c | Circle. |
s | Minor (small) radius. |
|
explicit |
Create a horizontal torus centered at origin.
r,s | Major and minor radii. |
bool Torus::Inside | ( | const Vector & | p | ) | const |
Check if a point is inside or outside the torus.
p | Point. |
Computes the intersection depths and the normals between a ray and a torus.
The quartic polynomial in t is derived from the canonical algebraic expression. Roots are found using the fast analytical Quartic::Solve() function of the Quartic class. This function returns an integer which is the number of intersections found. Note that intersections are sorted.
Computes the distance vector between a torus and a given point.
This function projects the point in the plane of the circle and computes the distance to the circle in its plane, before adding the extra term along the normal.
p | Point. |
double Torus::R | ( | const Vector & | p | ) | const |
Compute the squared Euclidean distance between a point and the torus.
p | Point. |
Vector Torus::RandomInside | ( | Random & | random = Random::R239 | ) | const |
Generate a random vector inside the dodecahedron.
Uses a simple rejection method.
random | Random number generator. |
void Torus::Scale | ( | const double & | s | ) |
Uniformly scales a torus.
s | Scaling factor. |
double Torus::Signed | ( | const Vector & | p | ) | const |
Compute the signed Euclidean distance between a point and the torus.
p | Point. |
|
inline |
Return the small radius of the torus.
Use Torus::Radius() to get the major radius.
|
friend |
Overloaded.
s | Stream. |
torus | The torus. |