|
|
@ -16,6 +16,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
constructor(x: number, y: number, z: number, w: number) { |
|
|
|
// TODO: Set the data member components to the given values
|
|
|
|
this.data = [x, y, z, w]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -24,7 +25,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get x(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[0]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -33,6 +34,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set x(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[0] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -41,7 +43,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get r(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[0]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -50,6 +52,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set r(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[0] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -58,7 +61,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get y(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[1]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -67,6 +70,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set y(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[1] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -75,7 +79,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get g(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[1]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -84,6 +88,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set g(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[1] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -92,7 +97,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get z(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[2]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -101,6 +106,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set z(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[2] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -109,7 +115,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get b(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[2]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -118,6 +124,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set b(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[2] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -126,7 +133,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get w(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[3]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -135,6 +142,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set w(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[3] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -143,7 +151,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get a(): number { |
|
|
|
// TODO: Return actual value
|
|
|
|
return null; |
|
|
|
return this.data[3]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -152,6 +160,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
set a(val: number) { |
|
|
|
// TODO: Set actual value
|
|
|
|
this.data[3] = val; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -161,7 +170,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
add(other: Vector): Vector { |
|
|
|
// TODO: Return new vector with result
|
|
|
|
return null; |
|
|
|
return new Vector(this.data[0]+other.x,this.data[1]+other.y,this.data[2]+other.z,this.data[3]+other.w); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -171,7 +180,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
sub(other: Vector): Vector { |
|
|
|
// TODO: Return new vector with result
|
|
|
|
return null; |
|
|
|
return new Vector(this.data[0]-other.x,this.data[1]-other.y,this.data[2]-other.z,this.data[3]-other.w); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -181,7 +190,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
mul(other: number): Vector { |
|
|
|
// TODO: Return new vector with result
|
|
|
|
return null; |
|
|
|
return new Vector(this.data[0]*other,this.data[1]*other,this.data[2]*other,this.data[3]*other); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -191,7 +200,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
div(other: number): Vector { |
|
|
|
// TODO: Return new vector with result
|
|
|
|
return null; |
|
|
|
return new Vector(this.data[0]/other,this.data[1]/other,this.data[2]/other,this.data[3]/other); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -201,8 +210,12 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
dot(other: Vector): number { |
|
|
|
// TODO: Compute and return dot product
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
var temp = [other.x, other.y, other.z, other.w]; |
|
|
|
let result = 0; |
|
|
|
for (let i = 0; i < 4; i++) { |
|
|
|
result += this.data[i] * temp[i]; |
|
|
|
} |
|
|
|
return result; } |
|
|
|
|
|
|
|
/** |
|
|
|
* Cross product |
|
|
@ -213,7 +226,10 @@ export default class Vector { |
|
|
|
cross(other: Vector): Vector { |
|
|
|
// TODO: Return new vector with result
|
|
|
|
// TODO: The fourth component should be set to 0
|
|
|
|
return null; |
|
|
|
var x = this.data[1]*other.z - this.data[2]*other.y; |
|
|
|
var y = this.data[2]*other.x - this.data[0]*other.z; |
|
|
|
var z = this.data[0]*other.y - this.data[1]*other.x; |
|
|
|
return new Vector(x,y,z,0); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -222,7 +238,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
normalize(): Vector { |
|
|
|
// TODO: Normalize this vector and return it
|
|
|
|
return this; |
|
|
|
return this.div(Math.sqrt(Math.pow(this.data[0],2)+Math.pow(this.data[1],2)+Math.pow(this.data[2],2))); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -234,6 +250,15 @@ export default class Vector { |
|
|
|
// TODO: Perform comparison and return result
|
|
|
|
// TODO: Respect inaccuracies: coordinates within 0.000001 of each other
|
|
|
|
// TODO: should be considered equal
|
|
|
|
if(this.data[0] < other.x + 0.000001 && this.data[0] > other.x - 0.000001) { |
|
|
|
if(this.data[1] < other.y + 0.000001 && this.data[1] > other.y - 0.000001) { |
|
|
|
if(this.data[2] < other.z + 0.000001 && this.data[2] > other.z - 0.000001) { |
|
|
|
if(this.data[3] < other.w + 0.000001 && this.data[3] > other.w - 0.000001) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
@ -243,7 +268,7 @@ export default class Vector { |
|
|
|
*/ |
|
|
|
get length(): number { |
|
|
|
// TODO: Calculate and return length
|
|
|
|
return 0; |
|
|
|
return Math.sqrt(Math.pow(this.data[0],2)+Math.pow(this.data[1],2)+Math.pow(this.data[2],2)); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|