World of Rigid Bodies (WoRB)
|
Data Structures | |
class | Collision |
Encalpsulates a collision event between two bodies; contains contact details. More... | |
class | CollisionResolver |
Encapsulates collision response framework. More... | |
class | Const |
Physical and mathematical constants. More... | |
class | Geometry |
Represents a geometry used to detect collisions against. More... | |
class | HalfSpace |
Represents a half-space defined by a plane where the normal of the plane points out of the half-space. More... | |
class | TruePlane |
Represents a true plane. More... | |
class | Sphere |
Encapsulates a sphere. More... | |
class | Cuboid |
Encapsulates a cuboid (rectangular parallelepiped). More... | |
class | QTensor |
Encapsulates a quaternionic tensor (q-tensor) as a 4x4 row-major matrix. More... | |
class | Quaternion |
Encapsulates Hamilton real quaternions. More... | |
class | SpatialVector |
Encapsulates a spatial vector. More... | |
class | RigidBody |
Encapsulates a rigid body. More... | |
class | GLUT_Renderer |
Interface for a GLUT-rendered rigid body. More... | |
class | GLTransform |
Establishes temporarily a GL transform from body-fixed into world frame. More... | |
class | GLOrthoScreen |
Establishes temporarily orthogonal projection in screen coordinates. More... | |
class | Ball |
Encapsulates a rigid body with geometry of a sphere. More... | |
class | Box |
Encapsulates a rigid body with geometry of a rectangular parallelepiped. More... | |
class | GLUT_Framework |
GLUT wrapper around a single instance of a GlutApplication template class. More... | |
class | WorldOfRigidBodies |
Encapsulates a system of rigid bodies. More... | |
Functions | |
void | Printf (const char *format,...) |
User defined ANSI C printf-style output routine. | |
void | Pause (unsigned long ms) |
Pauses execution for the given amount of milliseconds. | |
void | glutForegroundWindow () |
Brings the current GLUT window to the foreground. | |
void | OnGlutError (const char *format, va_list args) |
void | OnGlutWarning (const char *format, va_list args) |
void | SevereError (const char *errorId, const char *format,...) |
Reports a severe error (with errorId compatible with MATLAB) and quits. | |
static Quaternion | operator+ (double scalar, const Quaternion &q) |
static Quaternion | operator- (double scalar, const Quaternion &q) |
static Quaternion | operator* (double scalar, const Quaternion &q) |
double | RandomReal () |
Gets a uniform real number in range [0,1). | |
Quaternion | RandomQuaternion (double length=1.0) |
Gets a quaternion of the given length having a random orientation. | |
Quaternion | RandomQuaternion (const Quaternion &min, const Quaternion &max) |
Gets a random quaternion uniformly distributed in a 4D box. | |
void | RenderText (double x, double y, double z, const char *text) |
Renders the given text to the given location in body-fixed space. | |
int | RenderPrintf (int x, int y, const char *format,...) |
Renders the given text to the given location in screen space on the window. | |
void | RenderStateVariables (const RigidBody &body, const Quaternion &extent) |
Draws the geometry axes, angular velocity and angular momentum. | |
void | RenderAxes (double length) |
Draws the world axes. |
void WoRB::glutForegroundWindow | ( | ) |
Brings the current GLUT window to the foreground.
Definition at line 55 of file Platform.cpp.
Referenced by WoRB_TestBed::SetupAnimation().
{ #ifdef _WIN32 HWND hWnd = FindWindow( TEXT("FREEGLUT"), NULL ); if ( hWnd ) { SetForegroundWindow( hWnd ); } #endif }
void WoRB::OnGlutError | ( | const char * | format, |
va_list | args | ||
) |
Definition at line 69 of file Platform.cpp.
References Printf().
{ char buffer[ 2048 ]; vsprintf( buffer, format, args ); Printf( "WoRB: %s\n", buffer ); }
void WoRB::OnGlutWarning | ( | const char * | format, |
va_list | args | ||
) |
Definition at line 79 of file Platform.cpp.
References Printf().
{ char buffer[ 2048 ]; vsprintf( buffer, format, args ); Printf( "WoRB: %s\n", buffer ); }
static Quaternion WoRB::operator* | ( | double | scalar, |
const Quaternion & | q | ||
) | [inline, static] |
Definition at line 373 of file Quaternion.h.
References WoRB::Quaternion::w, WoRB::Quaternion::x, WoRB::Quaternion::y, and WoRB::Quaternion::z.
{
return Quaternion( scalar * q.w, scalar * q.x, scalar * q.y, scalar * q.z );
}
static Quaternion WoRB::operator+ | ( | double | scalar, |
const Quaternion & | q | ||
) | [inline, static] |
Definition at line 363 of file Quaternion.h.
References WoRB::Quaternion::w, WoRB::Quaternion::x, WoRB::Quaternion::y, and WoRB::Quaternion::z.
{
return Quaternion( scalar + q.w, scalar + q.x, scalar + q.y, scalar + q.z );
}
static Quaternion WoRB::operator- | ( | double | scalar, |
const Quaternion & | q | ||
) | [inline, static] |
Definition at line 368 of file Quaternion.h.
References WoRB::Quaternion::w, WoRB::Quaternion::x, WoRB::Quaternion::y, and WoRB::Quaternion::z.
{
return Quaternion( scalar - q.w, scalar - q.x, scalar - q.y, scalar - q.z );
}
void WoRB::Pause | ( | unsigned long | ms | ) |
Pauses execution for the given amount of milliseconds.
Definition at line 27 of file Platform.cpp.
Referenced by WoRB_TestBed::DisplayEventHandler(), and WoRB_TestBed::Simulate().
{ #ifdef _WIN32 Sleep( ms ); #else usleep( ms * 1000ul ); #endif }
void WoRB::Printf | ( | const char * | format, |
... | |||
) |
User defined ANSI C printf-style output routine.
Definition at line 36 of file Platform.cpp.
Referenced by WoRB::GLUT_Framework< GlutApplication >::Connect(), WoRB_MexFunction::CreateResultMatrix(), WoRB::GLUT_Framework< GlutApplication >::Disconnect(), WoRB_TestBed::Dump(), WoRB::Collision::Dump(), WoRB::Quaternion::Dump(), WoRB::GLUT_Framework< GlutApplication >::GLUT_Framework(), WoRB_TestBed::Initialize(), WoRB::GLUT_Framework< GlutApplication >::Initialize(), OnGlutError(), OnGlutWarning(), WoRB_MexFunction::Parse(), WoRB_TestBed::Run(), WoRB_TestBed::SetupAnimation(), WoRB::GLUT_Framework< GlutApplication >::Terminate(), and WoRB::GLUT_Framework< GlutApplication >::~GLUT_Framework().
{ va_list args; va_start( args, format ); char buffer[ 2048 ]; vsprintf( buffer, format, args ); va_end( args ); #ifdef MATLAB_MEX_FILE mexPrintf( "%s", buffer ); // mexEvalString( "drawnow;" ); // = flush #else fputs( buffer, stdout ); fflush( stdout ); #endif }
Quaternion WoRB::RandomQuaternion | ( | double | length = 1.0 | ) |
Gets a quaternion of the given length having a random orientation.
Definition at line 31 of file Utilities.cpp.
References WoRB::Quaternion::Normalize(), and RandomReal().
Referenced by WoRB_TestBed::ReconfigureTestBed().
{ return Quaternion( RandomReal (), RandomReal (), RandomReal (), RandomReal () ) .Normalize( length ); }
Quaternion WoRB::RandomQuaternion | ( | const Quaternion & | min, |
const Quaternion & | max | ||
) |
Gets a random quaternion uniformly distributed in a 4D box.
Definition at line 39 of file Utilities.cpp.
References RandomReal(), WoRB::Quaternion::w, WoRB::Quaternion::x, WoRB::Quaternion::y, and WoRB::Quaternion::z.
{ return Quaternion( min.w + ( max.w - min.w ) * RandomReal (), min.x + ( max.x - min.x ) * RandomReal (), min.y + ( max.y - min.y ) * RandomReal (), min.z + ( max.z - min.z ) * RandomReal () ); }
double WoRB::RandomReal | ( | ) |
Gets a uniform real number in range [0,1).
Definition at line 24 of file Utilities.cpp.
Referenced by RandomQuaternion().
{
return double( rand() ) / RAND_MAX;
};
void WoRB::RenderAxes | ( | double | length | ) |
Draws the world axes.
Definition at line 152 of file Utilities.cpp.
References RenderText().
Referenced by WoRB_TestBed::DisplayEventHandler().
{ glLineWidth( 2 ); ///////////////////////////////////////////////////////////////////////////////////// // Display X-axis for the world glColor3d( 1, 0, 0 ); glBegin( GL_LINES ); glVertex3d( 0, 0, 0 ); glVertex3d( length, 0, 0 ); glEnd (); RenderText( length + 0.3, 0, 0, "X" ); ///////////////////////////////////////////////////////////////////////////////////// // Display Y-axis for the world glColor3d( 0, 0.8, 0 ); glBegin( GL_LINES ); glVertex3d( 0, 0, 0 ); glVertex3d( 0, length, 0 ); glEnd (); RenderText( 0, length + 0.3, 0, "Y" ); ///////////////////////////////////////////////////////////////////////////////////// // Display Z-axis for the world glColor3d( 0, 0, 1 ); glBegin( GL_LINES ); glVertex3d( 0, 0, 0 ); glVertex3d( 0, 0, length ); glEnd (); RenderText( 0, 0, length + 0.3, "Z" ); glLineWidth( 1 ); }
int WoRB::RenderPrintf | ( | int | x, |
int | y, | ||
const char * | format, | ||
... | |||
) |
Renders the given text to the given location in screen space on the window.
Definition at line 193 of file Utilities.cpp.
Referenced by WoRB_TestBed::RenderDebugInfo().
{ char buffer[ 2048 ]; va_list args; va_start( args, format ); #ifdef _WIN32 #pragma warning(disable:4996) #endif vsprintf( buffer, format, args ); va_end( args ); // Loop through characters displaying them. // void* font = GLUT_BITMAP_8_BY_13; // GLUT_BITMAP_HELVETICA_10 glRasterPos2d( x, y ); for( const char* ch = buffer; *ch; ++ch ) { if ( *ch == '\n' ) { // Move down by the line-height on new-line y -= int( glutBitmapHeight( font ) * 1.2 ); glRasterPos2d( x, y ); } else { glutBitmapCharacter( font, *ch ); } } return y -= int( glutBitmapHeight( font ) * 1.2 ); }
void WoRB::RenderStateVariables | ( | const RigidBody & | body, |
const Quaternion & | extent | ||
) |
Draws the geometry axes, angular velocity and angular momentum.
Definition at line 75 of file Utilities.cpp.
References WoRB::RigidBody::AngularMomentum, WoRB::RigidBody::AngularVelocity, WoRB::Quaternion::ImSquaredNorm(), WoRB::Quaternion::Normalize(), WoRB::RigidBody::Position, RenderText(), WoRB::Quaternion::x, WoRB::Quaternion::y, and WoRB::Quaternion::z.
Referenced by WoRB::Ball::Render(), and WoRB::Box::Render().
{ double maxExtent = std::max( extent.x, std::max( extent.y, extent.z ) ) * 1.2; Quaternion pos = body.Position; Quaternion w = body.AngularVelocity; Quaternion L = body.AngularMomentum; glLineWidth( 2 ); ///////////////////////////////////////////////////////////////////////////////////// // Display angular velocity if ( w.ImSquaredNorm () > 1e-3 ) { w.Normalize( maxExtent ); glColor3d( 0, 0, 0 ); glBegin( GL_LINES ); glVertex3d( pos.x, pos.y, pos.z ); glVertex3d( pos.x + w.x, pos.y + w.y, pos.z + w.z ); glEnd (); RenderText( pos.x + w.x, pos.y + w.y * 1.08, pos.z + w.z, "w" ); } ///////////////////////////////////////////////////////////////////////////////////// // Display angular momentum if ( L.ImSquaredNorm () > 1e-3 ) { L.Normalize( maxExtent ); glColor3d( 0.5, 0.5, 0.5 ); glBegin( GL_LINES ); glVertex3d( pos.x, pos.y, pos.z ); glVertex3d( pos.x + L.x, pos.y + L.y, pos.z + L.z ); glEnd (); RenderText( pos.x + L.x, pos.y + L.y * 1.08, pos.z + L.z, "L" ); } glLineWidth( 1 ); GLTransform bodySpace( body ); ///////////////////////////////////////////////////////////////////////////////////// // Display body's X-axis glColor3d( 0.8, 0, 0 ); glBegin( GL_LINES ); glVertex3d( 0, 0, 0 ); glVertex3d( extent.x, 0, 0 ); glEnd (); RenderText( extent.x * 1.07, 0, 0, "X" ); ///////////////////////////////////////////////////////////////////////////////////// // Display body's Y-axis glColor3d( 0, 0.6, 0 ); glBegin( GL_LINES ); glVertex3d( 0, 0, 0 ); glVertex3d( 0, extent.y, 0 ); glEnd (); RenderText( 0, extent.y * 1.07, 0, "Y" ); ///////////////////////////////////////////////////////////////////////////////////// // Display body's Z-axis glColor3d( 0, 0, 0.8 ); glBegin( GL_LINES ); glVertex3d( 0, 0, 0 ); glVertex3d( 0, 0, extent.z ); glEnd (); RenderText( 0, 0, extent.z * 1.07, "Z" ); }
void WoRB::RenderText | ( | double | x, |
double | y, | ||
double | z, | ||
const char * | text | ||
) |
Renders the given text to the given location in body-fixed space.
Definition at line 53 of file Utilities.cpp.
Referenced by RenderAxes(), and RenderStateVariables().
{ void* font = GLUT_BITMAP_TIMES_ROMAN_10; // Loop through characters displaying them. // glRasterPos3d( x, y, z ); for( const char* ch = text; *ch; ++ch ) { if ( *ch == '\n' ) { // If we meet a newline, then move down by the line-height y -= glutBitmapHeight( font ) * 1.2; glRasterPos3d( x, y, z ); } glutBitmapCharacter( font, *ch ); } }
void WoRB::SevereError | ( | const char * | errorId, |
const char * | errorMsg, | ||
... | |||
) |
Reports a severe error (with errorId compatible with MATLAB) and quits.
Definition at line 89 of file Platform.cpp.
Referenced by Mex::Matrix::Initialize(), Mex::Scalar::Initialize(), Mex::Logical::Initialize(), Mex::String::Initialize(), Mex::Matrix::operator()(), WoRB_MexFunction::Parse(), and Mex::Matrix::VerifyDims().
{ va_list args; va_start( args, errorMsg ); char buffer[ 1024 ]; vsprintf( buffer, errorMsg, args ); va_end( args ); #if MATLAB_MEX_FILE mexErrMsgIdAndTxt( errorId, "%s", buffer ); #else fputs( errorId, stderr ); fputs( "\n", stderr ); fputs( buffer, stderr ); fflush( stderr ); exit(0); #endif }