我有一些碰撞檢測涉及任何角度的線,我不能提前知道。我已經建立了我的代碼,將它們視爲y = mx + b形式,並且每當創建水平線時,所有字段都以NaN形式出現。我的問題是:AS3中的哪些操作會導致返回NaN。想到的是,一條完美的垂直線將具有Number.POSITIVE_INFINITY的斜率,我想這可能會導致潛在的錯誤。它不應該在水平線上,但會發生邏輯問題。關鍵是,什麼導致NaN在AS3中返回?什麼原因導致as3代碼生成NaN?
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出現」。嗯 - 這聽起來像是被零除了,不是嗎?問:你能告訴我們一些代碼嗎?另外:看看這個鏈接:http:// stackoverflow。COM /問題/ 12123047 /數學隱藏碰撞 – paulsm4
每當聲明Number變量的缺省值將爲NaN,但它可能是不是這裏的情況 –
包{ \t \t進口flash.display.Sprite \t \t \t公共類線延伸雪碧{ \t \t \t \t VAR X1:數字,X2:號碼,Y1:號碼,Y2:號碼; \t \t var m:Number,b:Number; // Y = mx + b中 \t \t \t 公共\t函數線(X1C:數字,Y1C:數字,X2C:數字,Y 2 O:編號){ \t \t \t X1 = X1C; \t \t \t x2 = x2C; \t \t \t y1 = y1C; \t \t \t y2 = y2C; \t \t \t如果(X2 - X1 == 0) \t \t \t \t M = Number.POSITIVE_INFINITY; \t \t \t否則如果(Y2 - Y1 == 0) \t \t 米= 0; \t \t \t別的 \t \t \t \t M =(Y2 - Y1)/(X2 - X1); //這些計算可能是關閉的...... \t \t \t b = y1 - (m * x1); \t \t \t this.graphics.moveTo(x1,y1); \t \t} \t \t \t} \t } – avorum