| 网站首页 | VB.Net实例分析 | .Net技术文摘 | 下载中心 | VB.Net书籍笔记 | .Net源码 | VBS脚本与组件调用 | Windows2008技术文摘 | 给我们留言 | 
最新公告:

  没有公告

您现在的位置: 乐博网 >> VB.Net书籍笔记 >> 游戏编程 >> VB.Net书籍笔记正文
最新推荐 更多内容
[组图]VB.Net游戏编程入门经典(4)         ★★★
VB.Net游戏编程入门经典(4)
作者:(美)威勒… 文章来源:.Net游戏编程入门经典 点击数: 更新时间:2007-11-4

准确度(accuracy)和精度(precision)的区别

绝大多数程序员对有关“准确度”和“精度”的问题感到困惑,但它们是根本不同的两回事。我们来看一下两个例子,假设您和您的朋友在玩箭术,您的朋友射中目标的外围环,那么她的射箭是准确的,但不是精确的。如果您拉弓并射中公牛的眼睛(在与您朋友的射击目标完全一致的情况下),那么您的射箭可以用“精确”而不是“准确”来形容。另一个例子是π值,3可以代表π值,但它不是精确的。然而3与2.14159相比,3是一个较好的选择。2.14159是精确的但不是准确的。

计算机对于像1、2、3这样的可数的整数值而言是精确且准确的,但是对于实数而言,在这方面却面临着挑战。这种挑战基于现代计算机技术的两个基础性问题。第一,实数必须以二进制格式存储,这一点看起来好像是微不足道的事情,但是实际上它是一个非常大的挑战性问题。例如,简单数1/10不能始终如一地使用一种计算机浮点格式来表示,因为数值是基于二进制存储的(基于二进制情况下,1/10将产生一串重复的数字)。第二个挑战来自于可以用多少位(bit)来表示一个实数这个问题,它限制了数的准确度。这导致了聚束效应(bunching),即当数值接近零或者非常大时准确度非常高,而介于两者之间的数却没有那么高的准确度。如果想要进一步了解有关该问题的前沿技术文档,请参见附录A中的“What Every Computer Scientist Should Know About Floating-Point Arithmetic”。

1.4.2  邻近性检测算法

在前面的代码示例中,我们讨论了一种检测两个限定框邻近性的简单方法。这里我们将介绍计算圆形之间以及圆形和正方形之间邻近性的其他方法。

此类算法的基本思想是首先计算两个对象中心之间的距离,然后检查某个公式的值,该公式近似地描述了对象的形状。而该方法则如同用来近似对象形状的公式一样精确,例如,在台球模拟游戏中,使用恰当的公式就可以对球之间的冲突检测获得非常好的效果。

一些最常见的公式可以用来计算正方形、圆形和多边形之间的距离。

1. 计算圆形对象之间的冲突

图1-13说明了针对那些可以用圆形框来近似表示的图形的邻近性检测算法。

当处理圆形对象时,使用毕达哥拉斯定理可以获得理想的计算效果,该定理允许使用直角三角形的其他边(除斜边外的其他两条边)平方和的平方根来计算对象中心之间的距离(即直角三角形的斜边)。

图1-13  圆形对象的邻近性检测

Dim Dx As Single = Math.Abs(Object1.CenterX - Object2.CenterX);

Dim Dy As Single = Math.Abs(Object1.CenterY - Object2.CenterY);

Dim double Distance As Double = Math.Sqrt(Dx*Dx + Dy*Dy);

If (Distance > Object1.radius Radius + Object2.radiusRadius Then)

// => The circles do not collide.

Else

// => The circles are overlapping.

End If

如果仅仅希望使用一个常量值检测距离,则不必计算它的平方根,从而使得操作更加快速。

2. 计算圆形和正方形之间的冲突

接下来要介绍的算法实际上是一个普遍使用的公式,我们称之为Arvo算法(Arvo’s Algorithm)(该算法是以Jim Arvo的名字命名的,此人提出了许多图形算法)。算法基于一个法则,该法则类似于圆形之间的邻近性检测,它再次使用毕达哥拉斯定理来帮助判定圆形和正方形是否相交。图1-14描述了圆形和正方形之间可能发生的一些不同的邻近类型。

图1-14  正方形/圆形之间的邻近

上一页  [1] [2] [3] [4] [5] 下一页

  • 上一篇:

  • 下一篇:
  • 【字体: 】【打印此文】【关闭窗口
      相关文章:
    VB.Net游戏编程入门经典(11)
    VB.Net游戏编程入门经典(10)
    VB.Net游戏编程入门经典(9)
    VB.Net游戏编程入门经典(8)
    VB.Net游戏编程入门经典(7)
    VB.Net游戏编程入门经典(6)
    VB.Net游戏编程入门经典(5)
    VB.Net游戏编程入门经典(3)
    VB.Net游戏编程入门经典(2)
    VB.Net游戏编程入门经典(1)

    | 设为首页 | 加入收藏 | 联系站长 | | 友情链接 | 版权申明 |
    乐博网欢迎各种媒体转载我们的原创作品[转载请注明出处];我们鼓励更多VB.Net开发者一起加入研究与探讨;如发现文章访问错误、内容错误或版权疑问、内容有违相关法律(如涉及政治、色情、反动或散布虚假有害信息)等情况,请及时向我们举报,我们将及时纠正!
    联系邮箱:Shiny#vip.qq.com (#替换为@) QQ交流群: 40797788 [闽ICP备05014267号]