- 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.
- 零起步玩轉掌控板與Mind+
- 數據結構(Java語言描述)
- Selenium Design Patterns and Best Practices
- FreeSWITCH 1.6 Cookbook
- jQuery從入門到精通 (軟件開發視頻大講堂)
- Mastering macOS Programming
- C語言程序設計
- 零基礎入門學習Python(第2版)
- Learning Node.js for .NET Developers
- Beginning C++ Game Programming
- Mastering Elixir
- OpenCV Android Programming By Example
- 軟件測試分析與實踐
- Oracle Database XE 11gR2 Jump Start Guide
- HikariCP數據庫連接池實戰