多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
你一直在关注数值,所以或早或晚,必定会对值进行一些数学运算。如果回想在学校的时间,关于三角函数和微积分等,可能会记得使用科学计算器计算来解决困难的数学问题,比如涉及正弦余弦等可怕的数学函数。在Haxe里,所有这些数学函数都被存储在 Math 类中。 幸运的是,本书不是一本数学教科书,所以本章会排除一些数学理论,但是向你展示一些常见的Math类的方法,所以至少了解一些基础。下表是Math类中的一些方法: |Math 字段|描述| | -- | -- | |NEGATIVE_INFINITY: Float|负无穷大,代表一个负的被0除| |NaN:Float|代表非数字| |PI:Float|PI的值| |POSITIVE_INFINITY: Float|正无穷大,代表一个正数的被0除| |abs(value:Float):Float|绝对值| |acos(value:Float):Float|返回一个弧度表示的角的反余弦| |asin(value:Float):Float|返回一个弧度表示的角的反正弦| |atan(value:Float):Float|返回一个弧度表示的角的反正切| |atan2(value1:Float, value2:Float):Float|Returns the angle of the point x / y in radians| |ceil(value:Float):Int|向下取整| |cos(value : Float) : Float |返回一个弧度表示的角的余弦| |exp(value : Float) : Float |Returns the base of the natural logarithm to the power of the supplied float | |floor(value:Float):Int|向上取整| |isFinite(value:Float):Bool|如果等于正负无穷大则返回true,否则返回 false| |isNaN(value:Float):Bool|如果不是一个数字返回true,否则false| |log(value:Float):Float|寻找一个数值的对数| |max(value1 : Float, value2 : Float) : Float|返回两者之中的最大的值| |min(value1:Float,value2:Float):Float|返回两者之中的最小值| |pow(value:Float,value2:Float):Float|返回value1的value2次方| |random():Float|返回0到1之间的一个随机数| |round(value:Float):Int|四舍五入取整| |sin(value:Float):Float|返回一个弧度表示的角的正弦| |sqrt(value:Float):Float|返回平方根| |tan(value:Float):Float|返回一个弧度表示的角的正切| # 除以0的难题 * * * * * 当在Haxe中使用数值,可能会触及一些障碍,即使最有经验的开发者难以避免。大概多数这些骚扰来自于除以0的问题。问题是,无论什么样的计算机处理数据,任何数除以0都会产生一个非常大的数据,即使Haxe里的Float类型可以处理再大的数字,也没有办法包含一个无限的值。为了解决这个问题,Haxe的Math类提供两个常数,允许你测试这个错误:NEGATIVE_INFINITY 和 POSITIVE_INFINITY。 这两个常数值都是Float类型,但是不表示实际的值。只是让你比较自己的Float值来知道是否他们是有效的数字: ~~~ var myFlt : Float = 2 / 0; var isValid : Bool = (myFlt != Math.POSITIVE_INFINITY); ~~~ 也可以使用Math类的方法 isFinite,如果数值不是一个有限的值,则返回true: ~~~ var myFlt : Float = 2 / 0; var isValid : Bool = Math.isFinite(myFlt); ~~~ # NaN * * * * * 另外一个测试数字有效性的方法是使用NaN常量。NaN,也就是说 Not A Number ,用来检查是否一个 Float或者Int是有效的数值类型。如果一个数值类型无效,那么它的值就是NaN。 ~~~ var myFlt : Float; untyped { myFlt = “Not a Number”; } var isValid : Bool = (myFlt != Math.NaN); ~~~ 在Neko,这样一个表达式是有效的,isValid变量会测试true,在Flash,结果就不是一个有效的数字,结果将是false 。Haxe的Math类也提供一个方法叫做isNaN 。这个方法会在数值无效的时候返回true,可以以下方式使用: ~~~ var myFlt : Float; untyped { myFlt = “Not a Number”; } var isValid : Bool = !Math.isNaN(myFlt); ~~~ 如你所见,否定操作符用来返回true,如果结果是一个有效的数值类型。 # Float和Int的转换函数 * * * * * 当转换一个浮点数为整数,虚拟机只会简单的无视小数点后的数字。这相当于向下浮动到最接近的整数。Haxe的Math类提供一些其他的控制方法来转换Float到Int。包括 floor,ceil和round: floor 方法执行和投射一个Float到Int相同的功能,向下取整。ceil方法,执行向上取整。而round方法,会根据四舍五入的原则取整。