diff --git a/src/05/vector.ts b/src/05/vector.ts index 9efa4b4..50ff1ad 100644 --- a/src/05/vector.ts +++ b/src/05/vector.ts @@ -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)); } /**