Vegastrike 0.5.1 rc1
1.0
Original sources for Vegastrike Evolved
|
#include <IcePoint.h>
Public Member Functions | |
inline_ | Point () |
Empty constructor. More... | |
inline_ | Point (float _x, float _y, float _z) |
Constructor from a single float. More... | |
inline_ | Point (const float f[3]) |
Constructor from array. More... | |
inline_ | Point (const Point &p) |
Copy constructor. More... | |
inline_ | ~Point () |
Destructor. More... | |
inline_ Point & | Zero () |
Clears the vector. More... | |
inline_ Point & | SetPlusInfinity () |
inline_ Point & | SetMinusInfinity () |
Point & | PositiveUnitRandomVector () |
Sets positive unit random vector. More... | |
Point & | UnitRandomVector () |
Sets unit random vector. More... | |
inline_ Point & | Set (float _x, float _y, float _z) |
Assignment from values. More... | |
inline_ Point & | Set (const float f[3]) |
Assignment from array. More... | |
inline_ Point & | Set (const Point &src) |
Assignment from another point. More... | |
inline_ Point & | Add (const Point &p) |
Adds a vector. More... | |
inline_ Point & | Add (float _x, float _y, float _z) |
Adds a vector. More... | |
inline_ Point & | Add (const float f[3]) |
Adds a vector. More... | |
inline_ Point & | Add (const Point &p, const Point &q) |
Adds vectors. More... | |
inline_ Point & | Sub (const Point &p) |
Subtracts a vector. More... | |
inline_ Point & | Sub (float _x, float _y, float _z) |
Subtracts a vector. More... | |
inline_ Point & | Sub (const float f[3]) |
Subtracts a vector. More... | |
inline_ Point & | Sub (const Point &p, const Point &q) |
Subtracts vectors. More... | |
inline_ Point & | Neg () |
this = -this More... | |
inline_ Point & | Neg (const Point &a) |
this = -a More... | |
inline_ Point & | Mult (float s) |
Multiplies by a scalar. More... | |
inline_ Point & | Mult (const Point &a, float scalar) |
this = a * scalar More... | |
inline_ Point & | Mac (const Point &a, const Point &b, float scalar) |
this = a + b * scalar More... | |
inline_ Point & | Mac (const Point &a, float scalar) |
this = this + a * scalar More... | |
inline_ Point & | Msc (const Point &a, const Point &b, float scalar) |
this = a - b * scalar More... | |
inline_ Point & | Msc (const Point &a, float scalar) |
this = this - a * scalar More... | |
inline_ Point & | Mac2 (const Point &a, const Point &b, float scalarb, const Point &c, float scalarc) |
this = a + b * scalarb + c * scalarc More... | |
inline_ Point & | Msc2 (const Point &a, const Point &b, float scalarb, const Point &c, float scalarc) |
this = a - b * scalarb - c * scalarc More... | |
inline_ Point & | Mult (const Matrix3x3 &mat, const Point &a) |
this = mat * a More... | |
inline_ Point & | Mult2 (const Matrix3x3 &mat1, const Point &a1, const Matrix3x3 &mat2, const Point &a2) |
this = mat1 * a1 + mat2 * a2 More... | |
inline_ Point & | Mac (const Matrix3x3 &mat, const Point &a) |
this = this + mat * a More... | |
inline_ Point & | TransMult (const Matrix3x3 &mat, const Point &a) |
this = transpose(mat) * a More... | |
inline_ Point & | Lerp (const Point &a, const Point &b, float t) |
Linear interpolate between two vectors: this = a + t * (b - a) More... | |
inline_ Point & | Herp (const Point &p0, const Point &p1, const Point &p2, const Point &p3, float t) |
inline_ Point & | Transform (const Point &r, const Matrix3x3 &rotpos, const Point &linpos) |
this = rotpos * r + linpos More... | |
inline_ Point & | InvTransform (const Point &r, const Matrix3x3 &rotpos, const Point &linpos) |
this = trans(rotpos) * (r - linpos) More... | |
inline_ float | Min () const |
Returns MIN(x, y, z);. More... | |
inline_ float | Max () const |
Returns MAX(x, y, z);. More... | |
inline_ Point & | Min (const Point &p) |
Sets each element to be componentwise minimum. More... | |
inline_ Point & | Max (const Point &p) |
Sets each element to be componentwise maximum. More... | |
inline_ Point & | Clamp (float min, float max) |
Clamps each element. More... | |
inline_ float | SquareMagnitude () const |
Computes square magnitude. More... | |
inline_ float | Magnitude () const |
Computes magnitude. More... | |
inline_ float | Volume () const |
Computes volume. More... | |
inline_ bool | ApproxZero () const |
Checks the point is near zero. More... | |
inline_ bool | IsZero () const |
Tests for exact zero vector. More... | |
inline_ bool | IsValid () const |
Checks point validity. More... | |
void | Tweak (udword coord_mask, udword tweak_mask) |
Slighty moves the point. More... | |
inline_ void | TweakBigger () |
Slighty moves the point out. More... | |
inline_ void | TweakSmaller () |
Slighty moves the point in. More... | |
inline_ Point & | Normalize () |
Normalizes the vector. More... | |
inline_ Point & | SetLength (float length) |
Sets vector length. More... | |
inline_ Point & | ClampLength (float limit_length) |
Clamps vector length. More... | |
inline_ float | Distance (const Point &b) const |
Computes distance to another point. More... | |
inline_ float | SquareDistance (const Point &b) const |
Computes square distance to another point. More... | |
inline_ float | Dot (const Point &p) const |
Dot product dp = this|a. More... | |
inline_ Point & | Cross (const Point &a, const Point &b) |
Cross product this = a x b. More... | |
inline_ udword | VectorCode () const |
Vector code ( bitmask = sign(z) | sign(y) | sign(x) ) More... | |
inline_ PointComponent | LargestAxis () const |
Returns largest axis. More... | |
inline_ PointComponent | ClosestAxis () const |
Returns closest axis. More... | |
inline_ PointComponent | SmallestAxis () const |
Returns smallest axis. More... | |
Point & | Refract (const Point &eye, const Point &n, float refractindex, Point &refracted) |
Refracts the point. More... | |
Point & | ProjectToPlane (const Plane &p) |
Projects the point onto a plane. More... | |
void | ProjectToScreen (float halfrenderwidth, float halfrenderheight, const Matrix4x4 &mat, HPoint &projected) const |
Projects the point onto the screen. More... | |
Point & | Unfold (Plane &p, Point &a, Point &b) |
Unfolds the point onto a plane according to edge(a,b) More... | |
inline_ udword | GetHashValue () const |
Hash function from Ville Miettinen. More... | |
void | SetNotUsed () |
Stuff magic values in the point, marking it as explicitely not used. More... | |
bool | IsNotUsed () const |
Checks the point is marked as not used. More... | |
inline_ Point | operator- () const |
Unary operator for Point Negate = - Point. More... | |
inline_ Point | operator+ (const Point &p) const |
Operator for Point Plus = Point + Point. More... | |
inline_ Point | operator- (const Point &p) const |
Operator for Point Minus = Point - Point. More... | |
inline_ Point | operator* (const Point &p) const |
Operator for Point Mul = Point * Point. More... | |
inline_ Point | operator* (float s) const |
Operator for Point Scale = Point * float. More... | |
inline_ Point | operator/ (const Point &p) const |
Operator for Point Div = Point / Point. More... | |
inline_ Point | operator/ (float s) const |
Operator for Point Scale = Point / float. More... | |
inline_ float | operator| (const Point &p) const |
Operator for float DotProd = Point | Point. More... | |
inline_ Point | operator^ (const Point &p) const |
Operator for Point VecProd = Point ^ Point. More... | |
inline_ Point & | operator+= (const Point &p) |
Operator for Point += Point. More... | |
inline_ Point & | operator+= (float s) |
Operator for Point += float. More... | |
inline_ Point & | operator-= (const Point &p) |
Operator for Point -= Point. More... | |
inline_ Point & | operator-= (float s) |
Operator for Point -= float. More... | |
inline_ Point & | operator*= (const Point &p) |
Operator for Point *= Point. More... | |
inline_ Point & | operator*= (float s) |
Operator for Point *= float. More... | |
inline_ Point & | operator/= (const Point &p) |
Operator for Point /= Point. More... | |
inline_ Point & | operator/= (float s) |
Operator for Point /= float. More... | |
inline_ bool | operator== (const Point &p) const |
Operator for "if(Point==Point)". More... | |
inline_ bool | operator!= (const Point &p) const |
Operator for "if(Point!=Point)". More... | |
inline_ Point | operator* (const Matrix3x3 &mat) const |
Operator for Point Mul = Point * Matrix3x3. More... | |
inline_ Point | operator* (const Matrix4x4 &mat) const |
Operator for Point Mul = Point * Matrix4x4. More... | |
inline_ Point & | operator*= (const Matrix3x3 &mat) |
Operator for Point *= Matrix3x3. More... | |
inline_ Point & | operator*= (const Matrix4x4 &mat) |
Operator for Point *= Matrix4x4. More... | |
operator HPoint () const | |
Cast a Point to a HPoint. w is set to zero. More... | |
inline_ float | operator[] (int n) const |
inline_ float & | operator[] (int n) |
bool | operator== (const Point &other) |
bool | operator!= (const Point &other) |
Point () | |
Point (float cx, float cy) | |
Public Attributes | |
float | x |
float | y |
float | z |
Friends | |
inline_ friend Point | operator* (float s, const Point &p) |
Operator for Point Scale = float * Point. More... | |
inline_ friend Point | operator/ (float s, const Point &p) |
Operator for Point Scale = float / Point. More... | |
3D point.
The name is "Point" instead of "Vector" since a vector is N-dimensional, whereas a point is an implicit "vector of dimension 3". So the choice was between "Point" and "Vector3", the first one looked better (IMHO).
Some people, then, use a typedef to handle both points & vectors using the same class: typedef Point Vector3; This is bad since it opens the door to a lot of confusion while reading the code. I know it may sounds weird but check this out:
This compiles fine, although you should have written:
Subtle things like this are not caught at compile-time, and when you find one in the code, you never know whether it's a mistake from the author or something you don't get.
One way to handle it at compile-time would be to use different classes for Point & Vector3, only overloading operator "-" for vectors. But then, you get a lot of redundant code in thoses classes, and basically it's really a lot of useless work.
Another way would be to use homogeneous points: w=1 for points, w=0 for vectors. That's why the HPoint class exists. Now, to store your model's vertices and in most cases, you really want to use Points to save ram.
Definition at line 25 of file IcePoint.h.
|
inline |
|
inline |
|
inline |
|
inline |
inline_ Point& Point::InvTransform | ( | const Point & | r, |
const Matrix3x3 & | rotpos, | ||
const Point & | linpos | ||
) |
this = trans(rotpos) * (r - linpos)
bool Point::IsNotUsed | ( | ) | const |
Checks the point is marked as not used.
Checks point validity.
Definition at line 234 of file IcePoint.h.
References FALSE, IsValidFloat(), TRUE, x, y, and z.
|
inline |
inline_ Point& Point::Mult2 | ( | const Matrix3x3 & | mat1, |
const Point & | a1, | ||
const Matrix3x3 & | mat2, | ||
const Point & | a2 | ||
) |
this = mat1 * a1 + mat2 * a2
Point& Point::PositiveUnitRandomVector | ( | ) |
Sets positive unit random vector.
void Point::ProjectToScreen | ( | float | halfrenderwidth, |
float | halfrenderheight, | ||
const Matrix4x4 & | mat, | ||
HPoint & | projected | ||
) | const |
Projects the point onto the screen.
Refracts the point.
void Point::SetNotUsed | ( | ) |
Stuff magic values in the point, marking it as explicitely not used.
|
inline |
Computes square magnitude.
Definition at line 217 of file IcePoint.h.
Referenced by OPC_PointTriangleSqrDist(), OPC_SegmentSegmentSqrDist(), OPC_SegmentTriangleSqrDist(), and SphereCollider::SphereTriOverlap().
this = rotpos * r + linpos
this = transpose(mat) * a
Slighty moves the point.
Definition at line 243 of file IcePoint.h.
|
inline |
Slighty moves the point out.
Definition at line 253 of file IcePoint.h.
|
inline |
Slighty moves the point in.
Definition at line 261 of file IcePoint.h.
Unfolds the point onto a plane according to edge(a,b)
Point& Point::UnitRandomVector | ( | ) |
Sets unit random vector.
Vector code ( bitmask = sign(z) | sign(y) | sign(x) )
Definition at line 335 of file IcePoint.h.
References IR, SIGN_BITMASK, x, y, and z.
float Point::x |
Definition at line 522 of file IcePoint.h.
Referenced by AABBCollider::AABBAABBOverlap(), Add(), TriList::AddTri(), OBBCollider::BoxBoxOverlap(), Scroller::calcLayout(), Case000(), CaseNoZeros(), Rect::center(), ComputeMinMax(), BaseComputer::createModeButtons(), Cross(), Distance(), Dot(), Slider::draw(), Picker::draw(), ScrollerButton::draw(), WindowManager::draw(), PaintText::drawLines(), drawLowRightShadow(), drawUpLeftShadow(), Matrix3x3::GetCol(), Matrix4x4::GetCol(), Matrix3x3::GetRow(), Matrix4x4::GetRow(), Matrix4x4::GetTrans(), Herp(), Control::hitTest(), Rect::inset(), Rect::inside(), Rect::left(), Lerp(), Mac(), Mac2(), HPoint::Max(), Max(), HPoint::Min(), Min(), Msc(), Msc2(), Mult(), Neg(), OPC_PointAABBSqrDist(), HPoint::operator!=(), operator!=(), HPoint::operator*(), Matrix4x4::operator*(), operator*(), HPoint::operator*=(), Matrix4x4::operator*=(), Matrix3x3::operator*=(), operator*=(), HPoint::operator+(), operator+(), HPoint::operator+=(), operator+=(), HPoint::operator-(), operator-(), HPoint::operator-=(), operator-=(), HPoint::operator/(), operator/(), HPoint::operator/=(), operator/=(), HPoint::operator==(), operator==(), operator^(), HPoint::operator|(), operator|(), Slider::processMouseDown(), Slider::processMouseDrag(), Rect::right(), Matrix3x3::Scale(), Matrix4x4::Scale(), HPoint::Set(), Set(), Matrix3x3::SetCol(), Matrix4x4::SetCol(), Matrix3x3::SetRow(), Matrix4x4::SetRow(), Matrix3x3::SetScale(), Matrix4x4::SetScale(), Matrix4x4::SetTrans(), Matrix3x3::SkewSymmetric(), SqrDistance(), SquareDistance(), Sub(), TransformPoint(), TransformPoint3x3(), TransformPoint4x3(), AABBCollider::TriBoxOverlap(), and OBBCollider::TriBoxOverlap().
float Point::y |
Definition at line 522 of file IcePoint.h.
Referenced by AABBCollider::AABBAABBOverlap(), Add(), TriList::AddTri(), Rect::bottom(), OBBCollider::BoxBoxOverlap(), Scroller::calcLayout(), Case000(), CaseNoZeros(), Picker::cellForMouse(), Rect::center(), ComputeMinMax(), Cross(), Distance(), Dot(), Slider::draw(), Picker::draw(), ScrollerButton::draw(), WindowManager::draw(), PaintText::drawLines(), drawLowRightShadow(), drawUpLeftShadow(), Matrix3x3::GetCol(), Matrix4x4::GetCol(), Matrix3x3::GetRow(), Matrix4x4::GetRow(), Matrix4x4::GetTrans(), Herp(), Control::hitTest(), Rect::inset(), Rect::inside(), Lerp(), Mac(), Mac2(), HPoint::Max(), Max(), HPoint::Min(), Min(), Msc(), Msc2(), Mult(), Neg(), OPC_PointAABBSqrDist(), HPoint::operator!=(), operator!=(), HPoint::operator*(), Matrix4x4::operator*(), operator*(), HPoint::operator*=(), Matrix4x4::operator*=(), Matrix3x3::operator*=(), operator*=(), HPoint::operator+(), operator+(), HPoint::operator+=(), operator+=(), HPoint::operator-(), operator-(), HPoint::operator-=(), operator-=(), HPoint::operator/(), operator/(), HPoint::operator/=(), operator/=(), HPoint::operator==(), operator==(), operator^(), HPoint::operator|(), operator|(), Slider::processMouseDown(), Slider::processMouseDrag(), Matrix3x3::Scale(), Matrix4x4::Scale(), HPoint::Set(), Set(), Matrix3x3::SetCol(), Matrix4x4::SetCol(), Matrix3x3::SetRow(), Matrix4x4::SetRow(), Matrix3x3::SetScale(), Matrix4x4::SetScale(), Matrix4x4::SetTrans(), Matrix3x3::SkewSymmetric(), SqrDistance(), SquareDistance(), Sub(), Rect::top(), TransformPoint(), TransformPoint3x3(), TransformPoint4x3(), AABBCollider::TriBoxOverlap(), and OBBCollider::TriBoxOverlap().
float Point::z |
Definition at line 522 of file IcePoint.h.
Referenced by AABBCollider::AABBAABBOverlap(), Add(), TriList::AddTri(), OBBCollider::BoxBoxOverlap(), Case000(), CaseNoZeros(), ComputeMinMax(), Cross(), Distance(), Dot(), Matrix3x3::GetCol(), Matrix4x4::GetCol(), Matrix3x3::GetRow(), Matrix4x4::GetRow(), Matrix4x4::GetTrans(), Herp(), Lerp(), Mac(), Mac2(), HPoint::Max(), Max(), HPoint::Min(), Min(), Msc(), Msc2(), Mult(), Neg(), OPC_PointAABBSqrDist(), HPoint::operator!=(), operator!=(), HPoint::operator*(), Matrix4x4::operator*(), operator*(), HPoint::operator*=(), Matrix4x4::operator*=(), Matrix3x3::operator*=(), operator*=(), HPoint::operator+(), operator+(), HPoint::operator+=(), operator+=(), HPoint::operator-(), operator-(), HPoint::operator-=(), operator-=(), HPoint::operator/(), operator/(), HPoint::operator/=(), operator/=(), HPoint::operator==(), operator==(), operator^(), HPoint::operator|(), operator|(), Matrix3x3::Scale(), Matrix4x4::Scale(), HPoint::Set(), Set(), Matrix3x3::SetCol(), Matrix4x4::SetCol(), Matrix3x3::SetRow(), Matrix4x4::SetRow(), Matrix3x3::SetScale(), Matrix4x4::SetScale(), Matrix4x4::SetTrans(), Matrix3x3::SkewSymmetric(), SqrDistance(), SquareDistance(), Sub(), TransformPoint(), TransformPoint3x3(), TransformPoint4x3(), AABBCollider::TriBoxOverlap(), and OBBCollider::TriBoxOverlap().