libQGLViewer Version 2.9.1
|
The Vec class represents 3D positions and 3D vectors. More...
#include <QGLViewer/vec.h>
Public Attributes | |
qreal | x |
qreal | y |
qreal | z |
Setting the value | |
Vec () | |
Vec (qreal X, qreal Y, qreal Z) | |
template<class C > | |
Vec (const C &c) | |
void | setValue (qreal X, qreal Y, qreal Z) |
Accessing the value | |
qreal | operator[] (int i) const |
qreal & | operator[] (int i) |
operator const qreal * () const | |
operator qreal * () | |
operator const float * () const | |
Algebraic computations | |
Vec & | operator+= (const Vec &a) |
Vec & | operator-= (const Vec &a) |
Vec & | operator*= (qreal k) |
Vec & | operator/= (qreal k) |
Vec | orthogonalVec () const |
Vec | operator+ (const Vec &a, const Vec &b) |
Vec | operator- (const Vec &a, const Vec &b) |
Vec | operator- (const Vec &a) |
Vec | operator* (const Vec &a, qreal k) |
Vec | operator* (qreal k, const Vec &a) |
Vec | operator/ (const Vec &a, qreal k) |
bool | operator!= (const Vec &a, const Vec &b) |
bool | operator== (const Vec &a, const Vec &b) |
qreal | operator* (const Vec &a, const Vec &b) |
Vec | operator^ (const Vec &a, const Vec &b) |
Vec | cross (const Vec &a, const Vec &b) |
Norm of the vector | |
qreal | squaredNorm () const |
qreal | norm () const |
qreal | normalize () |
Vec | unit () const |
Projection | |
void | projectOnAxis (const Vec &direction) |
void | projectOnPlane (const Vec &normal) |
XML representation | |
Vec (const QDomElement &element) | |
QDomElement | domElement (const QString &name, QDomDocument &document) const |
void | initFromDOMElement (const QDomElement &element) |
Output stream | |
std::ostream & | operator<< (std::ostream &o, const qglviewer::Vec &) |
The Vec class represents 3D positions and 3D vectors.
Vec is used as a parameter and return type by many methods of the library. It provides classical algebraic computational methods and is compatible with OpenGL:
This makes of Vec a good candidate for representing positions and vectors in your programs. Since it is part of the qglviewer
namespace, specify qglviewer::Vec
or use the qglviewer namespace:
Vec implements a universal explicit converter, based on the []
operator
. Everywhere a const
Vec&
argument is expected, you can use your own vector type instead, as long as it implements this operator (see the Vec(const
C& c) documentation).
See also the Quaternion and the Frame documentations.
Vec | ( | ) |
Default constructor. Value is set to (0,0,0).
Vec | ( | qreal | X, |
qreal | Y, | ||
qreal | Z | ||
) |
Standard constructor with the x, y and z values.
|
explicit |
Universal explicit converter from any class to Vec. You can use your own vector class everywhere a const
Vec&
parameter is required, as long as it implements the operator
[ ]:
Note that standard vector types (STL, qreal
[3], ...) implement this operator and can hence be used in place of Vec. See also operator const qreal*() .
|
explicit |
Constructs a Vec from a QDomElement
representing an XML code of the form
If one of these attributes is missing or is not a number, a warning is displayed and the associated value is set to 0.0.
See also domElement() and initFromDOMElement().
QDomElement domElement | ( | const QString & | name, |
QDomDocument & | document | ||
) | const |
Returns an XML QDomElement
that represents the Vec.
name
is the name of the QDomElement tag. doc
is the QDomDocument
factory used to create QDomElement.
When output to a file, the resulting QDomElement will look like:
Use initFromDOMElement() to restore the Vec state from the resulting QDomElement
. See also the Vec(const QDomElement&) constructor.
Here is complete example that creates a QDomDocument and saves it into a file:
See also Quaternion::domElement(), Frame::domElement(), Camera::domElement()...
void initFromDOMElement | ( | const QDomElement & | element | ) |
Restores the Vec state from a QDomElement
created by domElement().
The QDomElement
should contain x
, y
and z
attributes. If one of these attributes is missing or is not a number, a warning is displayed and the associated value is set to 0.0.
To restore the Vec state from an xml file, use:
See also the Vec(const QDomElement&) constructor.
qreal norm | ( | ) | const |
Returns the norm of the vector.
qreal normalize | ( | ) |
Normalizes the Vec and returns its original norm.
Normalizing a null vector will result in NaN
values.
operator const float * | ( | ) | const |
Conversion operator returning the memory address of the vector.
Very convenient to pass a Vec pointer as a float
parameter to OpenGL functions:
Vec
instances. operator const qreal * | ( | ) | const |
Conversion operator returning the memory address of the vector.
Very convenient to pass a Vec pointer as a parameter to GLdouble
OpenGL functions:
operator qreal * | ( | ) |
Non const conversion operator returning the memory address of the vector.
Useful to pass a Vec to a method that requires and fills a qreal*
, as provided by certain libraries.
Vec & operator*= | ( | qreal | k | ) |
Multiply the vector by a scalar k
.
Vec & operator+= | ( | const Vec & | a | ) |
Adds a
to the vector.
Vec & operator-= | ( | const Vec & | a | ) |
Subtracts a
to the vector.
Vec & operator/= | ( | qreal | k | ) |
Divides the vector by a scalar k
.
An absolute k
value lower than 1E-10 will print a warning if the library was compiled with the "debug" Qt CONFIG
flag. Otherwise, no test is performed for efficiency reasons.
std::ostream & operator<< | ( | std::ostream & | o, |
const qglviewer::Vec & | |||
) |
Output stream operator. Enables debugging code like:
qreal & operator[] | ( | int | i | ) |
Bracket operator returning an l-value. i
must range in [0..2].
qreal operator[] | ( | int | i | ) | const |
Bracket operator, with a constant return value. i
must range in [0..2].
Vec orthogonalVec | ( | ) | const |
Returns a Vec orthogonal to the Vec. Its norm() depends on the Vec, but is zero only for a null Vec. Note that the function that associates an orthogonalVec() to a Vec is not continous.
void projectOnAxis | ( | const Vec & | direction | ) |
Projects the Vec on the axis of direction direction
that passes through the origin.
direction
does not need to be normalized (but must be non null).
void projectOnPlane | ( | const Vec & | normal | ) |
Projects the Vec on the plane whose normal is normal
that passes through the origin.
normal
does not need to be normalized (but must be non null).
void setValue | ( | qreal | X, |
qreal | Y, | ||
qreal | Z | ||
) |
Equal operator. Vec &operator=(const Vec &v) { x = v.x; y = v.y; z = v.z; return *this; }
Set the current value. May be faster than using operator=() with a temporary Vec(x,y,z).
qreal squaredNorm | ( | ) | const |
Returns the squared norm of the Vec.
Vec unit | ( | ) | const |
Returns a unitary (normalized) representation of the vector. The original Vec is not modified.
|
friend |
Cross product of the two Vec. Mind the order !
|
friend |
Returns true
only when the two vector are not equal (see operator==()).
|
friend |
Dot product of the two Vec.
|
friend |
Returns the product of the vector with a scalar.
|
friend |
Returns the product of a scalar with the vector.
|
friend |
Returns the sum of the two vectors.
|
friend |
Unary minus operator.
|
friend |
Returns the difference of the two vectors.
|
friend |
Returns the division of the vector with a scalar.
Too small k
values are not tested (unless the library was compiled with the "debug" Qt CONFIG
flag) and may result in NaN
values.
|
friend |
Returns true
when the squaredNorm() of the difference vector is lower than 1E-10.
|
friend |
Cross product of the two vectors. Same as cross().
qreal x |
The internal data representation is public. One can use v.x, v.y, v.z. See also operator[]().
qreal y |
qreal z |