世嘉MD游戏开发进阶篇【一】:两点之间的距离

标签: C语言开发世嘉MD游戏-进阶篇  C语言  世嘉MD  SGDK  游戏开发  计算距离

开发游戏免不了要计算两个坐标之间的距离,计算两点之间的距离我们可以用勾股定理,比如说A代表直角三角形的一条直角边,B代表另一条直角边,C代表斜边,得到公式A²+B²=C²。C也就是两点之间的距离,根据公式可计算出C=根号(A²+B²);

以上就是常用的方法之一,但是世嘉MD机能有限,又是平方又是开方的,性能开销太大了,现在我给大家说一个简单的方法,只需要几句代码就能计算出两点之间的距离了,而且计算速度比上述方法快很多倍,虽然这个方法得到的结果不是很精确,但两个点水平或者垂直的时候是没有误差的,不怎么影响计算。

代码如下:

//u32是SGDK里定义的一个整数类型,相当于unsigned long
//Vect2D_s32是SGDK里定义的一个向量结构体,包含x和y两个值,而且x和y都是s32类型,相当于long类型

u32 get_approx_distance(Vect2D_s32 _p1, Vect2D_s32 _p2)
{
    // x的距离
    u32 dx = abs(_p1.x - _p2.x);

    // y的距离
    u32 dy = abs(_p1.y - _p2.y);
    
    //返回:最大值 + ( 最小值 >> 2 )
    return max(dx, dy) + (min(dx, dy) >> 2);
}

至于这个原理是啥我也不懂,我也是从国外网站找到的,知道原理的大神可以指点一下,这个方法简单明了,记起来也很容易。

这是一个讲解类似原理的文档:https://www.flipcode.com/archives/Fast_Approximate_Distance_Functions.shtml

版权声明:本文为qq272508839原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq272508839/article/details/103957819