官术网_书友最值得收藏!

The angle between vectors

If two vectors are of unit length, the angle between them is the cosine of their dot product:

If the two vectors are not normalized, the dot product needs to be divided by the product of the length of both vectors:

To find the actual angle, not just the cosine of it, we need to take the inverse of the cosine on both sides, which is the arccosine function:

Implement the angle function in vec3.cpp. Don't forget to add the function declaration to vec3.h:

float angle(const vec3 &l, const vec3 &r) {

    float sqMagL = l.x * l.x + l.y * l.y + l.z * l.z;

    float sqMagR = r.x * r.x + r.y * r.y + r.z * r.z;

    if (sqMagL<VEC3_EPSILON || sqMagR<VEC3_EPSILON) {

        return 0.0f;

    }

    float dot = l.x * r.x + l.y * r.y + l.z * r.z;

    float len = sqrtf(sqMagL) * sqrtf(sqMagR);

    return acosf(dot / len);

}

Important note:

The acosf function returns angles in radians. To convert radians to degrees, multiply by 57.2958f. To convert degrees to radians, multiply by 0.0174533f.

主站蜘蛛池模板: 唐河县| 江达县| 同江市| 温州市| 六盘水市| 明溪县| 博客| 宜丰县| 拉孜县| 南通市| 青海省| 江永县| 房产| 德钦县| 云安县| 深水埗区| 巴塘县| 古蔺县| 密云县| 西乌珠穆沁旗| 石棉县| 秦安县| 句容市| 濮阳县| 天气| 宜君县| 墨竹工卡县| 扎兰屯市| 奉节县| 元谋县| 平利县| 商南县| 昭通市| 景谷| 苏尼特右旗| 绥宁县| 仙游县| 苏尼特右旗| 灵宝市| 吐鲁番市| 吐鲁番市|