first
This commit is contained in:
commit
59426d62fb
102 changed files with 42796 additions and 0 deletions
143
Controls/Paint/Math/Vector.js
Normal file
143
Controls/Paint/Math/Vector.js
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
////////////////////////////////////////////////////////////
|
||||
//// © Microsoft. All rights reserved. ////
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
(function (AppNS) {
|
||||
'use strict';
|
||||
|
||||
// The Vector class represents a position-less vector in 2-Dimensional space.
|
||||
// A Vector has direction and length, both represented in the form of change in x and change in y.
|
||||
var Vector = WinJS.Class.define(
|
||||
|
||||
// Constructor
|
||||
function (x, y) {
|
||||
this.x = x || 0; // The x-component of this vector
|
||||
this.y = y || 0; // The y-component of this vector
|
||||
},
|
||||
|
||||
// Variables and Functions
|
||||
{
|
||||
// The length of this vector, as calculated by it's x and y components
|
||||
length: {
|
||||
get: function () {
|
||||
return Math.sqrt(this.x * this.x + this.y * this.y);
|
||||
},
|
||||
set: function (length) {
|
||||
this.normalize();
|
||||
this.scale(length);
|
||||
}
|
||||
},
|
||||
|
||||
// Return the dot product of this vector and v
|
||||
dot: function (vector) {
|
||||
return this.x * vector.x + this.y * vector.y;
|
||||
},
|
||||
|
||||
// Sets this vector to the given x and y
|
||||
fromXY: function (x, y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
},
|
||||
|
||||
// Set this vector to the given vector
|
||||
fromVector: function (vector) {
|
||||
this.x = vector.x;
|
||||
this.y = vector.y;
|
||||
},
|
||||
|
||||
// Create a vector from point1 pointing towards point2
|
||||
fromPoints: function (point1, point2) {
|
||||
this.x = point2.x - point1.x;
|
||||
this.y = point2.y - point1.y;
|
||||
},
|
||||
|
||||
// Rotates this vector by 90 degrees counter-clockwise, making it perpendicular to what it was
|
||||
toPerp: function () {
|
||||
var temp = this.x;
|
||||
this.x = -1 * this.y
|
||||
this.y = temp;
|
||||
},
|
||||
|
||||
// Rotates this vector counter-clockwise by angle in radians
|
||||
rotate: function (angle) {
|
||||
var cos = Math.cos(angle);
|
||||
var sin = Math.sin(angle);
|
||||
var x = this.x;
|
||||
var y = this.y;
|
||||
this.x = x * cos - y * sin;
|
||||
this.y = x * sin + y * cos;
|
||||
},
|
||||
|
||||
// Scales this vector by a constant
|
||||
scale: function (constant) {
|
||||
this.x = this.x * constant;
|
||||
this.y = this.y * constant;
|
||||
},
|
||||
|
||||
// Returns the angle in radians between this vector and v
|
||||
angle: function (vector) {
|
||||
var l1 = this.length;
|
||||
var l2 = vector.length;
|
||||
if (l1 !== 0 && l2 !== 0) {
|
||||
var val = this.dot(vector) / (l1 * l2);
|
||||
val = val > 1.0 ? 1.0 : val;
|
||||
val = val < -1.0 ? -1.0 : val;
|
||||
return Math.acos(val);
|
||||
}
|
||||
},
|
||||
|
||||
// Returns the slope (dy/dx) of this vector
|
||||
getSlope: function () {
|
||||
return this.y / this.x;
|
||||
},
|
||||
|
||||
// Normalizes (sets to length 1) this vector
|
||||
normalize: function () {
|
||||
var length = this.length;
|
||||
if (length !== 0) {
|
||||
this.scale(1 / length);
|
||||
}
|
||||
},
|
||||
|
||||
// Sets this vector to the result of subtracting the given vector from this
|
||||
sub: function (vector) {
|
||||
this.x = this.x - vector.x;
|
||||
this.y = this.y - vector.y;
|
||||
},
|
||||
|
||||
// Sets this vector to the result of adding the given vector to this
|
||||
add: function (vector) {
|
||||
this.x = this.x + vector.x;
|
||||
this.y = this.y + vector.y;
|
||||
},
|
||||
|
||||
// Returns true if this vector is equal to another
|
||||
equals: function (vector) {
|
||||
return this.x === vector.x && this.y === vector.y;
|
||||
},
|
||||
|
||||
// Returns a copy of this vector
|
||||
copy: function () {
|
||||
return new AppNS.Painter.Math.Vector(this.x, this.y);
|
||||
},
|
||||
|
||||
// Projects this vector onto the given direction.
|
||||
// Note: the length of the direction vector is irrelevant.
|
||||
project: function (vector) {
|
||||
var direction = vector.copy();
|
||||
var length = this.componentIn(direction);
|
||||
direction.length = length;
|
||||
this.fromVector(direction);
|
||||
},
|
||||
|
||||
// Returns the length of the component of this vector in the given vector's direction
|
||||
componentIn: function (vector) {
|
||||
return this.dot(vector) / vector.length;
|
||||
}
|
||||
});
|
||||
|
||||
WinJS.Namespace.defineWithParent(AppNS, "Painter.Math", {
|
||||
Vector: Vector
|
||||
});
|
||||
|
||||
})(Microsoft.Paint);
|
||||
Reference in a new issue