Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 雷达/战场类型游戏的数学_Math_Geometry - Fatal编程技术网

Math 雷达/战场类型游戏的数学

Math 雷达/战场类型游戏的数学,math,geometry,Math,Geometry,我很痛苦地说,当我年轻的时候,我在数学课上从来没有像我应该注意的那样多。。。因此,我正在向身边的社区征求一些关于从哪里开始寻找的想法 我最近一直在想,有些游戏,如战场、机器人坦克等,是如何在80年代制作的。如果我想做一个这样的游戏,我需要什么数学来实现这些游戏中使用的雷达,我如何将其转换为第一人称视图?有什么我可以分析的例子吗 谢谢你的帮助 最有可能的情况是,您试图将a(即x,y坐标)转换为(即,与“雷达”中心的角度和距离)。这是一个相对简单的三角变换。最有可能的情况是将a(即x,y坐标)转换为

我很痛苦地说,当我年轻的时候,我在数学课上从来没有像我应该注意的那样多。。。因此,我正在向身边的社区征求一些关于从哪里开始寻找的想法

我最近一直在想,有些游戏,如战场、机器人坦克等,是如何在80年代制作的。如果我想做一个这样的游戏,我需要什么数学来实现这些游戏中使用的雷达,我如何将其转换为第一人称视图?有什么我可以分析的例子吗


谢谢你的帮助

最有可能的情况是,您试图将a(即x,y坐标)转换为(即,与“雷达”中心的角度和距离)。这是一个相对简单的三角变换。

最有可能的情况是将a(即x,y坐标)转换为(即,与“雷达”中心的角度和距离)。这是一个相对简单的三角变换。

在这类游戏中,有几种常用的数学方法

  • 一种方法是在直角坐标系中跟踪所有对象(包括玩家)的位置,增加Y始终表示相同的方向(例如“北”)。为了使这种方法能够很好地工作,物体可以移动的空间应该有一个限制

  • 另一种方法是在上述固定方向坐标系中跟踪除玩家以外的所有物体的位置,但假设玩家始终处于0,0;要将玩家移动一定距离,请将所有其他对象的位置移动该距离。距离玩家太远的物体通常应该停止存在,尽管在某些情况下,坐标“包裹”也是可以接受的(因此,如果玩家在主罗盘方向上漂移足够远,物体将重新出现)

  • 另一种方法是使用以玩家为中心的坐标系,但不断旋转物体,以便不断增加的Y方向始终位于玩家的正前方。这种方法简化了绘图,但旋转播放器的成本要高得多,尤其是在希望避免其他对象稍微移动的情况下。另一方面,这种方法在某些游戏中可以接受,因为所有非玩家对象都在四处移动,因此数字快捷键引起的一些杂散运动不会太明显

  • 最后,我们可以尝试将除玩家之外的所有东西的位置存储在极坐标系中。如果一个人试图准确地描绘事物,这种方法就没有什么可取之处,但有些游戏使用了非常粗略的近似方法,并取得了合理的成功

关于现代硬件,我建议使用前两种方法之一。后两者有时在为1980年代的游戏机或计算机编写游戏时很有用,这些游戏机或计算机的内存不足1%(有时内存不足1/1000000,字面意思是!),运行速度不到今天机器的1/1000,但提到后两者主要是为了历史利益

如果游戏将对象位置保持在正Y为北的坐标系中,则可以通过首先计算相对于玩家位置的X和Y(如果坐标没有保持在该格式,则从真实位置减去玩家X和Y)来确定它们应该出现在屏幕上的位置。然后通过计算MX=X*sin(航向)+Y*cos(航向)和MY=Y*sin(航向)-X*cos(航向),将这些坐标转换为正Y-is-ahead坐标。MX、MY、Z点的屏幕坐标(Z坐标0和屏幕坐标0位于地平线)将为SX=MX/MY和SY=Z/MY


您可能需要使用缩放和单位来使对象显示适当的大小和比例,并避免绘制过于靠近玩家的对象(或更糟糕的是,向后),但上述公式应该可以让您开始使用。

在此类游戏中,有一些通用的数学方法

  • 一种方法是在直角坐标系中跟踪所有对象(包括玩家)的位置,增加Y始终表示相同的方向(例如“北”)。为了使这种方法能够很好地工作,物体可以移动的空间应该有一个限制

  • 另一种方法是在上述固定方向坐标系中跟踪除玩家以外的所有物体的位置,但假设玩家始终处于0,0;要将玩家移动一定距离,请将所有其他对象的位置移动该距离。距离玩家太远的物体通常应该停止存在,尽管在某些情况下,坐标“包裹”也是可以接受的(因此,如果玩家在主罗盘方向上漂移足够远,物体将重新出现)

  • 另一种方法是使用以玩家为中心的坐标系,但不断旋转物体,以便不断增加的Y方向始终位于玩家的正前方。这种方法简化了绘图,但旋转播放器的成本要高得多,尤其是在希望避免其他对象稍微移动的情况下。另一方面,这种方法在某些游戏中可以接受,因为所有非玩家对象都在四处移动,因此数字快捷键引起的一些杂散运动不会太明显

  • 最后,我们可以尝试将除玩家之外的所有东西的位置存储在极坐标系中。如果一个人试图准确地描绘事物,这种方法就没有什么可取之处,但有些游戏使用了非常粗略的近似方法,并取得了合理的成功

关于现代硬件,我建议使用前两种方法之一。后两者有时在为1980年代的游戏机或计算机编写游戏时很有用