游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4175|回复: 5

一个近似计算向量长度的算法,请问该公式是如何推导出

[复制链接]

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
发表于 2006-1-19 19:44:00 | 显示全部楼层 |阅读模式
代码如下,有两个,前者计算2D向量的长度,后者计算3D向量的长度,从《3D游戏编程大师技巧》上抄下来的。

========================================================

int Fast_Distance_2D(int x, int y)
{
// this function computes the distance from 0,0 to x,y with 3.5% error

// first compute the absolute value of x,y
x = abs(x);
y = abs(y);

// compute the minimum of x,y
int mn = MIN(x,y);

// return the distance
return(x+y-(mn>>1)-(mn>>2)+(mn>>4));

} // end Fast_Distance_2D

///////////////////////////////////////////////////////////////////////////////

float Fast_Distance_3D(float fx, float fy, float fz)
{
// this function computes the distance from the origin to x,y,z

int temp;  // used for swaping
int x,y,z; // used for algorithm

// make sure values are all positive
x = fabs(fx) * 1024;
y = fabs(fy) * 1024;
z = fabs(fz) * 1024;

// sort values
if (y < x) SWAP(x,y,temp)

if (z < y) SWAP(y,z,temp)

if (y < x) SWAP(x,y,temp)

int dist = (z + 11 * (y >> 5) + (x >> 2) );

// compute distance with 8% error
return((float)(dist >> 10));

} // end Fast_Distance_3D

======================================================

书上说是使用了泰勒级数,但我实在没法推导出来。

函数f(x)=x^1/2是没泰勒级数的,唯一比较近似的是函数f(x)=(1+x)^m的泰勒展开,但x又必须是在(-1,1)内。而一般计平方根都是用牛顿叠代法来逼近。

我数学本来就不咋样,算了半天,都快疯了,哪位前辈能教教我,谢谢!

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2006-1-20 08:51:00 | 显示全部楼层

Re:一个近似计算向量长度的算法,请问该公式是如何推导

学编程学得像你如此执着也是难得,我对自已的要求从来就是会用就行,不过你如果是数理系的,就值得深入研究一下。

没法帮你,但多谢你让我学会了两个有用的函数。

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
 楼主| 发表于 2006-1-21 04:36:00 | 显示全部楼层

Re:一个近似计算向量长度的算法,请问该公式是如何推导

晕,我的想法是,如果能够知道这个方法,以后遇到类似的问题,就可以自己设计出好的算法来了

尤其是在3D图形领域,除了数学,还是数学。

22

主题

191

帖子

217

积分

中级会员

Rank: 3Rank: 3

积分
217
QQ
发表于 2006-1-21 04:52:00 | 显示全部楼层

Re:一个近似计算向量长度的算法,请问该公式是如何推导

建立你去看一下《高效程序的奥秘》
学院派式的书
比较理论的东西,但是很深奥,可以看看

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2006-1-21 13:38:00 | 显示全部楼层

Re:一个近似计算向量长度的算法,请问该公式是如何推导

在不要求全精度浮点的情况下,现在的CPU用专门的浮点指令去算矢量长度只要几个周期,以上的近似算法已经失去意义了

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-1-22 12:35:00 | 显示全部楼层

Re:一个近似计算向量长度的算法,请问该公式是如何推导

汗呀,计算向量长度需要这么复杂吗????
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-12 20:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表