Actionscript 3 是什么导致as3代码生成NaN?
我有一些碰撞检测,涉及任意角度的线,我不能提前知道。我已经设置了我的代码,将它们视为形式y=mx+b,每当我创建一条水平线时,所有字段都显示为NaN。我的问题是:AS3中的哪些操作会导致NaN返回。我想到的是,一条完全垂直的线会有一个数的斜率,正无穷大,我想这可能会导致潜在的错误。它不应该在一条水平线上,但逻辑问题会发生。问题是,是什么导致NaN在AS3中返回Actionscript 3 是什么导致as3代码生成NaN?,actionscript-3,nan,Actionscript 3,Nan,我有一些碰撞检测,涉及任意角度的线,我不能提前知道。我已经设置了我的代码,将它们视为形式y=mx+b,每当我创建一条水平线时,所有字段都显示为NaN。我的问题是:AS3中的哪些操作会导致NaN返回。我想到的是,一条完全垂直的线会有一个数的斜率,正无穷大,我想这可能会导致潜在的错误。它不应该在一条水平线上,但逻辑问题会发生。问题是,是什么导致NaN在AS3中返回 package { import flash.display.Sprite public class Line ex
package {
import flash.display.Sprite
public class Line extends Sprite{
var x1:Number, x2:Number, y1:Number, y2:Number;
var m:Number, b:Number; //y = mx + b
public function Line(x1C:Number, y1C:Number, x2C:Number, y2C:Number){
x1 = x1C;
x2 = x2C;
y1 = y1C;
y2 = y2C;
if(x2 - x1 == 0)
m = Number.POSITIVE_INFINITY;
else if(y2 - y1 == 0)
m = 0;
else
m = (y2 - y1) / (x2 - x1); //these calculations could be off....
b = y1 - (m * x1);
this.graphics.moveTo(x1, y1);
}
}
}
如果你声明了一个数字,但没有赋值,它将是NaN 例如:
var speed:Number;
trace(speed); // NaN
与默认为0的和int不同
var speed:int;
trace(speed); // 0
全局函数的文档提供了一些示例:
- 0除以0:
0/0
- 负数的平方根:
Math.sqrt(-1)
- 大于1或小于0的反正弦数:
Math.asin(2)
- 无法转换为数字的字符串
:[解析时]“5a”
1*someObject
或1+someUndefinedNumber
将计算为NaN
- 您的代码可能会在此处生成一个
:NaN
b = y1 - (m * x1);
m
是一个无穷大,而x1
是0
,那么乘以它应该得到NaN,这不仅适用于AS3
- 我建议您永远不要在坡度截距形式中使用直线方程,您正在使用(
),因为您无法以这种方式定义垂直线。始终使用常规形式:y=Ax+B
Ax+By+C=0
- 不要将浮点数与==进行比较,始终将浮点数与ε进行比较。如果
几乎等于x2
,代码中可能会出现问题x1
0*infinity
,infinity-infinity
当符号一致时,余数(任何,0.0)
和其他一些。我对涉及到您的最后一点的场景一直有疑问,我可以请您详细说明该断言的理由吗?(当x2几乎等于x1时)你提到用==比较浮点数,我的线坐标是用mouseX和mouseY获得的,用int代替是一个选项吗?作为参考,我用鼠标画线。如果AS3保证鼠标坐标是整数,用int
将是一个选项。我不太明白你到底想让我做什么重要的一点是,即使在一些“明显”的情况下,将浮点与==进行比较也是不好的。例如,sin(1.2)
并不总是等于(=)sin(1.2),虽然它们的值可能相差1e-16…但找不到证明。=\n谢谢,这很有帮助。再次感谢所有帮助我找到这个问题的人。我刚才说的正是这些。