-
Notifications
You must be signed in to change notification settings - Fork 0
/
vectors.js
81 lines (70 loc) · 1.71 KB
/
vectors.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
y
| z
| /
| /
*---------x
*/
var Vector2d = function(x,y){
//functions w/ prefix _ alters variable, w/o it returns a variable
if (arguments.length==1 && arguments.length.x != undefined){
this.x = x.x;
this.y = x.y;
} else {
this.x = x || 0;
this.y = y || 0;
}
this._add = function(vec){
this.x += vec.x;
this.y += vec.y;
}
this.add = function(vec){
if (arguments.length==2) vec = {x: arguments[0]||0, y: arguments[1]||0};
return new Vector2d(this.x + vec.x, this.y + vec.y);
}
this.distanceFrom = function(vec){
var a2 = Math.pow(this.x - vec.x, 2);
var b2 = Math.pow(this.y - vec.y, 2);
var c = Math.sqrt(a2 + b2);
return c;
}
this._norm = function(){
var sum = Math.abs(this.x) + Math.abs(this.y);
this.x = this.x / sum;
this.y = this.y / sum;
}
this.norm = function(){
var sum = Math.abs(this.x) + Math.abs(this.y);
return new Vector2d(this.x / sum, this.y / sum);
}
}
var Vector3d = function(x,y,z){
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
this._add = function(vec){
this.x += vec.x;
this.y += vec.y;
this.z += vec.z;
}
this.add = function(vec){
return new Vector3d(this.x + vec.x, this.y + vec.y, this.z + vec.z);
}
this.distanceFrom = function(vec){
var a2 = Math.pow(this.x - vec.x, 2);
var b2 = Math.pow(this.y - vec.y, 2);
var c2 = Math.pow(this.z - vec.z, 2);
var c = Math.sqrt(a2 + b2 + c2);
return c;
}
this._norm = function(){
var s = Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
this.x = this.x / s;
this.y = this.y / s;
this.z = this.z / s;
}
this.norm = function(){
var s = Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
return new Vector3d(this.x / s, this.y / s, this.z / s);
}
}