为什么我在 class 中执行方法时得到 NaN,但在单独执行时却没有?
Why am I getting NaN when executing a method within my class, but not when executing in isolation?
我正在尝试学习编码培训中丹尼尔·希夫曼 (Daniel Shiffman) 提供的 'Autonomous Steering Behavior' 课程。 See Video Tutorials Here
这些课程是使用 P5.js 库提供的,但是我想继续使用纯 JavaScript。
我已经创建了我自己的 vector
class,以及一个 vehicle
class 代表一个被力控制的对象。
当我 运行 vector
class 方法孤立时,add
和 subtract
方法按预期工作。但是,当我尝试在 vehicle
class 中执行 this.velocity.add(desiredVelocity)
时,velocity
向量 returns 'NaN'
代码 运行 隔离(按预期工作)是
let v1 = new Vector(10, 10)
let v2 = new Vector(20, 30)
console.log(v1.add(v2)) // Outputs Vector(30, 40)
我忽略或没有意识到导致 this.velocity.add(desiredVelocity)
到 return NaN
的原因?
class Vector{
constructor(x, y){
this.x = x == undefined ? 0 : x,
this.y = y == undefined ? 0 : y
}
magnitude(){
return Math.sqrt(this.x * this.x + this.y * this.y);
}
setMagnitude(newMagnitude){
this.x = this.x * newMagnitude / this.magnitude();
this.y = this.y * newMagnitude / this.magnitude();
return new Vector(this.x, this.y);
}
add(vector){
this.x += vector.x;
this.y += vector.y;
return new Vector(this.x, this.y)
}
static subtract(vector1, vector2){
return new Vector(vector1.x - vector2.x, vector1.y - vector2.y);
}
}
class Vehicle {
constructor(){
this.position = new Vector();
this.velocity = new Vector();
this.maxSpeed = 10;
}
seek(target) {
let desiredVelocity = Vector.subtract(target.position, this.position);
desiredVelocity.setMagnitude(this.maxSpeed);
this.velocity.add(desiredVelocity)
console.log('new velocity', this.velocity) // Returns NaN
}
}
class Target{
constructor(){
this.position = new Vector();
}
}
const vehicle = new Vehicle();
const target = new Target()
vehicle.seek(target)
在 Vector#setMagnitude
中,您除以 Vector#magnitude
returns 的值,可以是 0
。当 newMagnitude
也是 0
时,您会得到 0 / 0
,这会导致 NaN
.
我正在尝试学习编码培训中丹尼尔·希夫曼 (Daniel Shiffman) 提供的 'Autonomous Steering Behavior' 课程。 See Video Tutorials Here
这些课程是使用 P5.js 库提供的,但是我想继续使用纯 JavaScript。
我已经创建了我自己的 vector
class,以及一个 vehicle
class 代表一个被力控制的对象。
当我 运行 vector
class 方法孤立时,add
和 subtract
方法按预期工作。但是,当我尝试在 vehicle
class 中执行 this.velocity.add(desiredVelocity)
时,velocity
向量 returns 'NaN'
代码 运行 隔离(按预期工作)是
let v1 = new Vector(10, 10)
let v2 = new Vector(20, 30)
console.log(v1.add(v2)) // Outputs Vector(30, 40)
我忽略或没有意识到导致 this.velocity.add(desiredVelocity)
到 return NaN
的原因?
class Vector{
constructor(x, y){
this.x = x == undefined ? 0 : x,
this.y = y == undefined ? 0 : y
}
magnitude(){
return Math.sqrt(this.x * this.x + this.y * this.y);
}
setMagnitude(newMagnitude){
this.x = this.x * newMagnitude / this.magnitude();
this.y = this.y * newMagnitude / this.magnitude();
return new Vector(this.x, this.y);
}
add(vector){
this.x += vector.x;
this.y += vector.y;
return new Vector(this.x, this.y)
}
static subtract(vector1, vector2){
return new Vector(vector1.x - vector2.x, vector1.y - vector2.y);
}
}
class Vehicle {
constructor(){
this.position = new Vector();
this.velocity = new Vector();
this.maxSpeed = 10;
}
seek(target) {
let desiredVelocity = Vector.subtract(target.position, this.position);
desiredVelocity.setMagnitude(this.maxSpeed);
this.velocity.add(desiredVelocity)
console.log('new velocity', this.velocity) // Returns NaN
}
}
class Target{
constructor(){
this.position = new Vector();
}
}
const vehicle = new Vehicle();
const target = new Target()
vehicle.seek(target)
在 Vector#setMagnitude
中,您除以 Vector#magnitude
returns 的值,可以是 0
。当 newMagnitude
也是 0
时,您会得到 0 / 0
,这会导致 NaN
.