我正在尝试在 JavaScript 中创建一系列 vector3,我正在尝试为 openGL 立方体创建顶点、边缘、面结构,现在我对 JavaScript 很陌生,但由于 HTML5 支持它,我觉得 JS 应该是我理解的语言,现在:),
现在我不知道如何在 JS 中声明一个结构,然后我将如何将它实现为数组类型?
我有类似的东西,但我不确定这是否正确。
var vector3 = (x=0,y=0,z=0);
但是那我将如何将它用于数组?
为帮助喝彩。
我正在尝试在 JavaScript 中创建一系列 vector3,我正在尝试为 openGL 立方体创建顶点、边缘、面结构,现在我对 JavaScript 很陌生,但由于 HTML5 支持它,我觉得 JS 应该是我理解的语言,现在:),
现在我不知道如何在 JS 中声明一个结构,然后我将如何将它实现为数组类型?
我有类似的东西,但我不确定这是否正确。
var vector3 = (x=0,y=0,z=0);
但是那我将如何将它用于数组?
为帮助喝彩。
我会写一个构造函数
function Vector(x,y,z){
this.dimension = 0;
if( undefined !== x ) this.dimension = 1, this.x = x || 0;
else this.x = 0;
if( undefined !== y ) this.dimension = 2, this.y = y || 0;
else this.y = 0;
if( undefined !== z ) this.dimension = 3, this.z = z || 0;
else this.z = 0;
}
Vector.prototype = Object.create(null, {
length: {
get: function(){
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
}
},
add : {
value: function(v){
var d = Math.max(this.dimension, v.dimension), x, y, z;
if( d > 0 ) x = (this.x || 0) + (v.x || 0);
if( d > 1 ) y = (this.y || 0) + (v.y || 0);
if( d > 2 ) z = (this.z || 0) + (v.z || 0);
return new Vector(x, y, z);
}
}
});
var vector3 = new Vector(0,0,0);
我会创建一个对象:
var vector3 = {
x:0,
y:0,
z:0
};
您可以使用以下代码访问各个字段:
var tmp = vector3.x;
在向量中放置点
var myPolygon = [
{x: 3, y: 8, z: -8},
{x: 3, y: 4, z: 10},
{x: 9, y: 8, z: -8},
];
你也可以用它写一个向量类型,这样你就不必每次都写x
, y
, 和:z
var vec3 = {x:0,y:0,z:0};
var demoVec = vec3;
var demo2Vec = vec3;
demoVec.x+=demo2Vec.y;
使用 javascript 对象:
var vector1 = {x:0,y:0,z:0};
var vector2 = {x:10,y:0,z:0};
//example function to find scalar distance between two points
function distance(v1,v2){
return Math.sqrt(Math.pow((v1.x-v2.x),2) + Math.pow((v1.y-v2.y),2) + Math.pow((v1.z-v2.z),2));
}
var d = distance(vector1,vector2); //returns 10
console.log(d);
我喜欢 Tobias Springer 的解决方案,但您也可以使用实用方法创建矢量对象:
Vector = function(x, y, z) {
this._init(x, y, z);
};
Vector.prototype = {
/**
* Fixed Constructor.
*/
constructor: Vector,
x: null,
y: null,
z: null,
/**
* Add documentation!
*/
_init: function(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
},
/**
* Add documentation!
*/
add: function(otherVector) {
return new Vector(this.x + otherVector.x,
this.y + otherVector.y, this.z + otherVector.z);
},
/**
* Add documentation!
*/
scalarProduct: function(otherVector) {
return this.x * otherVector.x + this.y * otherVector.y
+ this.z * otherVector.z;
},
/**
* From Asad's answer. Returns the distance between this vector
* and <code>otherVector</code>.
* @param otherVector {Vector}
* @returns {Number}
*/
distance: function(otherVector) {
return Math.sqrt(Math.pow((this.x-otherVector.x),2)
+ Math.pow((this.y-otherVector.y),2)
+ Math.pow((this.z-otherVector.z),2));
}
// and so on....
};
所以,你会像这样使用它:
var vector1 = new Vector (1, 1, 1);
var vector2 = new Vector (1, 0, 1);
var addedVector = vector1.add(vector2); // --> = (2, 1, 2)
var scalarProduct = vector1.scalarProduct(vector2); // --> = 2