- Hands-On C++ Game Animation Programming
- Gabor Szauer
- 377字
- 2021-06-30 14:46:01
Comparison operations
Comparing two quaternions can be done component-wise. Two quaternions can represent the same rotation even if they are not identical on a component level. This happens because a quaternion and its inverse rotate to the same spot but they take different routes:
- Overload the == and != operators in quat.cpp. Add the declaration for these functions to quat.h:
bool operator==(const quat& left, const quat& right) {
return (fabsf(left.x - right.x) <= QUAT_EPSILON &&
fabsf(left.y - right.y) <= QUAT_EPSILON &&
fabsf(left.z - right.z) <= QUAT_EPSILON &&
fabsf(left.w - right.w) <= QUAT_EPSILON);
}
bool operator!=(const quat& a, const quat& b) {
return !(a == b);
}
- To test whether two quaternions represent the same rotation, the absolute difference between the two needs to be tested. Implement the sameOrientation function in quat.cpp. Add the function declaration to quat.h:
bool sameOrientation(const quat&l, const quat&r) {
return (fabsf(l.x - r.x) <= QUAT_EPSILON &&
fabsf(l.y - r.y) <= QUAT_EPSILON &&
fabsf(l.z - r.z) <= QUAT_EPSILON &&
fabsf(l.w - r.w) <= QUAT_EPSILON) ||
(fabsf(l.x + r.x) <= QUAT_EPSILON &&
fabsf(l.y + r.y) <= QUAT_EPSILON &&
fabsf(l.z + r.z) <= QUAT_EPSILON &&
fabsf(l.w + r.w) <= QUAT_EPSILON);
}
Most of the time, you will want to use the equality operator to compare quaternions. The sameOrientation function is not as useful because the rotation that a quaternion takes can be changed if the quaternion is inverted.
In the next section, you will learn how to implement a quaternion dot product.
- Mastering OpenLayers 3
- JavaScript前端開發模塊化教程
- Python量化投資指南:基礎、數據與實戰
- Android Jetpack開發:原理解析與應用實戰
- Learning Flask Framework
- Ext JS Data-driven Application Design
- OpenStack Cloud Computing Cookbook(Fourth Edition)
- PLC編程及應用實戰
- Windows Phone 7.5:Building Location-aware Applications
- 一本書講透Java線程:原理與實踐
- Node.js開發指南
- Unity 2018 Augmented Reality Projects
- 創意UI Photoshop玩轉移動UI設計
- INSTANT LESS CSS Preprocessor How-to
- JavaScript Unit Testing