正文

游戏数学(3)

精通C#游戏编程 作者:(英)斯库勒


 

成员变量_xPosition、_yPosition、_xLength和_yLength用于定位和描述图的大小。_sampleSize变量决定了图的平滑度。采样大小是指用于绘制图中的线的顶点数。每个顶点的y位置由特定的一个函数决定,例如sine或cosine。_frequency变量用于计算波形震荡的频率,频率越高,震荡次数越多。

默认值描述了一个位于(x:-100,y:-100)、每个轴长200像素的图。得到的图足够大,方便查看,但是DrawGraph函数会认为图的x轴和y轴的范围为0~1。

在成员变量后定义了一个委托。

public delegate double WaveFunction(double value);

图经常被定义为x=x',y=f(x'),其中x'是x的下一个值,普通的x是前一个值。x值通常递增固定的数值,而y值从x值计算得出。WaveFunction委托描述了公式中的f,该函数接受一个double值作为参数,并返回一个double值。这与cosine和sine函数的签名相同。通过使用WaveFunction类型,DrawGraph函数可以接受cosine、sine或其他任意波形函数作为参数,并不需要编写其他代码。

状态的构造函数将线宽设置为3像素,这样就更容易看到图中的线。它还关闭了纹理的状态。如果打开了纹理状态,线看上去可能有点暗,因为它们被错误地赋予了无效的纹理。

DrawGraph函数是游戏状态中最重要的函数,它负责绘制图。DrawGraph使用采样率决定如何分布顶点,使任意一条线都会占据整个图的长度。定义角度有两种常见的方式:度数和弧度。人们都很熟悉度数,知道整个圆周是360?,半个圆周是180?。弧度是使用Pi衡量度数的一种方法,整个圆周是2×Pi,半个圆周是Pi。C#中的Sin和Cos函数接受以弧度表示的角度作为参数,因此,计算y轴的值时,x轴的0~1之间的值会乘以Pi。

DrawGraph函数的内循环从原来的位置计算出新位置,然后绘制一条从原来的位置连接到新位置的线。为了实际演示代码,需要编写一个Render函数来为正弦函数和系弦函数调用DrawGraph。图的输出如图8-1所示。

public void Render()

{

DrawAxis();

DrawGraph(Math.Sin, new Color(1,0,0,1));

DrawGraph(Math.Cos, new Color(0, 0.5f, 0.5f, 1));


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号