- Hands-On C++ Game Animation Programming
- Gabor Szauer
- 381字
- 2021-06-30 14:45:51
Vector length
Vectors represent a direction and a magnitude; the magnitude of a vector is its length. The formula for finding the length of a vector comes from trigonometry. In the following figure, a two-dimensional vector is broken down into parallel and perpendicular components. Notice how this forms a right triangle, with the vector being the hypotenuse:

Figure 2.5: A vector broken down into parallel and perpendicular components
The length of the hypotenuse of a right triangle can be found with the Pythagorean theorem, A2 + B2 = C2. This function extends to three dimensions by simply adding a Z component—X2 + Y2 + Z2 = length2.
You may have noticed a pattern here; the squared length of a vector equals the sum of its components. This could be expressed as a dot product—Length2(A) = dot(A, A):
Important note:
Finding the length of a vector involves a square root operation, which should be avoided when possible. When checking the length of a vector, the check can be done in squared space to avoid the square root. For example, if you wanted to check if the length of vector A is less than 5, that could be expressed as (dot(A, A) < 5 * 5).
- To implement the square length function, sum the result of squaring each component of the vector. Implement the lenSq function in vec3.cpp. Don't forget to add the function declaration to vec3.h:
float lenSq(const vec3& v) {
return v.x * v.x + v.y * v.y + v.z * v.z;
}
- To implement the length function, take the square root of the result of the square length function. Take care not to call sqrtf with 0. Implement the lenSq function in vec3.cpp. Don't forget to add the function declaration to vec3.h:
float len(const vec3 &v) {
float lenSq = v.x * v.x + v.y * v.y + v.z * v.z;
if (lenSq < VEC3_EPSILON) {
return 0.0f;
}
return sqrtf(lenSq);
}
Important note:
You can find the distance between two vectors by taking the length of the difference between them. For example, float distance = len(vec1 - vec2).
- Data Visualization with D3 4.x Cookbook(Second Edition)
- Visual FoxPro程序設計教程(第3版)
- SQL Server 2016從入門到精通(視頻教學超值版)
- 劍指JVM:虛擬機實踐與性能調優
- 樂學Web編程:網站制作不神秘
- Unity 2020 Mobile Game Development
- Mastering Natural Language Processing with Python
- Processing互動編程藝術
- SAP BusinessObjects Dashboards 4.1 Cookbook
- Linux Shell核心編程指南
- Python項目實戰從入門到精通
- Access 2010數據庫應用技術實驗指導與習題選解(第2版)
- Raspberry Pi Robotic Blueprints
- 深度學習入門:基于Python的理論與實現
- Koa與Node.js開發實戰