游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7842|回复: 11

[请教]关于用麦克劳林级数简化开方运算的问题

[复制链接]

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2006-4-1 19:20:00 | 显示全部楼层 |阅读模式
今天在《Windows游戏编程大师技巧》中看到了一段求两点间距离的代码。代码中用了一个数学技巧,就是用麦克劳林级数简化了计算两点间距离时的开方运算。但是我怎么也看不明白代码到底如何运用了麦克劳林级数。特在此请教大家,谢谢!代码如下:

//求a,b的最值
#define  MIN( a, b )   ( ( a < b ) ? a : b )
#define  MAX( a, b )  ( ( a > b ) ? a : b )

//将a,b的值交换
#define  SWAP( a, b, t )  ( t = a; a = b; b = t; )

//求a的绝对值
#define ABS( a )  ( ( a > 0 ) ? a : ( -a ) )

//-------------------------------------------------------
// Name: Fast_Distance_2D()
// Desc:  计算2D平面任意点到原点的距离
//-------------------------------------------------------
int  Fast_Distance_2D( int  x, int  y )
{
    //求绝对值
    x = ABS( x );
    y = ABS( y );

    //求x,y中最小那个
    int  mn = MIN( x, y );

    //计算并返回点( x, y )到原点的距离
    return( x + y - ( mn >> 1 ) - ( mn >> 2 ) + ( mn >> 4 ) );
}

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-4-2 23:18:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

麦克劳林级数的公式如何??

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2006-4-4 11:08:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

我想知道的正是麦克劳林级数公式的运用是如何体现在这段代码中的。为什么最后那个语句用了4个加法和3个移位就搞定了两点之间的距离!?

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-4-4 13:10:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

那你查查麦克劳林级数的公式不就知道罗

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2006-4-4 22:58:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

公式我早查了。如果能自己搞定,我还会在这里请大家帮忙吗?还请各位高手不吝赐教。

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-4-5 09:12:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

那你把公式发上来让大家瞧瞧嘛,恐怕没几个人会记得计算方法的东西

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-4-5 09:20:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

我记得计算方法上面是有些级数公式计算平方根,好像例如计算65的平方根,变成计算
(64+1)的平方根,而且它的推导不难

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2006-4-6 22:12:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

f(x)的麦克劳林展开式:

f(x) = f(0) + (f'(0)*X)/1! + (f''(0)*X2)/2! + (f'''(0)*X3)/3! + ......

注:Xn ( n = 1,2,3...) 为X的n次方

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-4-7 13:18:00 | 显示全部楼层

Re: Re:[请教]关于用麦克劳林级数简化开方运算的问题

victor_chen: Re:[请教]关于用麦克劳林级数简化开方运算的问题

f(x)的麦克劳林展开式:

f(x) = f(0) + (f'(0)*X)/1! + (f''(0)*X2)/2! + (f'''(0)*X3)/3! + ......

...

应该还有个扩展式吧??

好像是这样:f(x+d) = f(x) + (f'(x)*d)/1! + (f''(x)*d2)/2! + (f'''(x)*d3)/3! + ......

如果有的话那应该可以导出来

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2006-4-7 22:22:00 | 显示全部楼层

Re:[请教]关于用麦克劳林级数简化开方运算的问题

扩展式?没听说过,可能是我孤陋寡闻,还请赐教!

不过,我知道麦克劳林级数是泰勒级数的一种特殊形式。泰勒级数的定义如下:

如果f(X)在X0的某邻域内有各阶导数,则f(X)的泰勒级数展开式为:

f(x) = f(X0) + f'(X0)*(X - X0)/1! + f''(X0)*(X - X0)2/2! + f'''(X0)*(X - X0)3/3! + ......

注:(X - X0)n ( n = 1,2,3...) 为(X - X0)的n次方

当X0取0时,就得到了f(X)的麦克劳林级数。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 04:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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