gpt4 book ai didi

c++ - 获取单个平面中两个 vector 之间角度的有效方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:20 26 4
gpt4 key购买 nike

如果我知道 vector 的 x 和 z 值将相同,因此我只关心测量 y 平面差异的“垂直”角度,与计算点积相比,是否有更有效的方法来做到这一点?

我目前使用点积法的代码如下:

float a_mag = a.magnitude(); 
float b_mag = b.magnitude();
float ab_dot = a.dot(b);
float c = ab_dot / (a_mag * b_mag);

// clamp d to from going beyond +/- 1 as acos(+1/-1) results in infinity
if (c > 1.0f) {
c = 1.0;
} else if (c < -1.0) {
c = -1.0;
}

return acos(c);

我希望能够去掉这些平方根

最佳答案

假设您的两个 vector 位于 u = (x, y1, z)v = (x, y2, z),并且您对两个 vector 所跨越的平面上两者之间的平面角。您必须计算点积和大小,但可以节省一些操作:

u.v = x.x + y1.y2 + z.z
u^2 = x.x + y1.y1 + z.z
v^2 = x.x + y2.y2 + z.z

所以我们应该预先计算:

float xz = x*x + z*z, y11 = y1*y1, y12 = y1*y2, y22 = y2*y2;

float cosangle = (xz + y12) / sqrt((xz + y11) * (xz + y22));
float angle = acos(cosangle);

关于c++ - 获取单个平面中两个 vector 之间角度的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com