/////////////////////////////////////// // 创建 Vector 3D 类及其方法 // // --Violet_Meteor// /////////////////////////////////////// // v3d 类构造函数 _global.v3d = function(x, y, z) { this.x = x; this.y = y; this.z = z; }; // v3d 创建副本方法 v3d.prototype.clone = function() { return new this.constructor(this.x, this.y, this.z); }; // v3d 重设方法 v3d.prototype.reset = function(x, y, z) { this.constructor(x, y, z); }; // v3d 返回字符串方法 v3d.prototype.string = function() { return ("("+this.x+","+this.y+","+this.z+")"); }; // v3d 比较两个向量方法 v3d.prototype.equal = function(v) { return (this.x == v.x && this.y == v.y && this.z == v.z); }; // v3d 向量加法方法 v3d.prototype.plus = function(v) { return new this.constructor(this.x+v.x, this.y+v.y, this.z+v.z); }; // v3d 向量减法方法 v3d.prototype.minus = function(v) { return new this.constructor(this.x-v.x, this.y-v.y, this.z-v.z); }; // v3d 向量求逆方法 v3d.prototype.negate = function() { return new this.constructor(-this.x, -this.y, -this.z); }; // v3d 向量缩放方法 v3d.prototype.scale = function(s) { return new this.constructor(this.x*s, this.y*s, this.z*s); }; // v3d 向量求模方法 v3d.prototype.getmod = function() { return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z); }; // v3d 向量设模方法 v3d.prototype.setmod = function(len) { var r = this.getmod(); if (r) { var n = this.scale(len/r); this.x = n.x; this.y = n.y; this.z = n.z; } else { this.x = len; } }; // v3d 向量点积方法 v3d.prototype.dot = function(v) { return (this.x*v.x+this.y*v.y+this.z*v.z); }; // v3d 向量叉乘方法 v3d.prototype.cross = function(v) { var cx = this.y*v.z-this.z*v.y; var cy = this.z*v.x-this.x*v.z; var cz = this.x*v.y-this.y*v.x; return new this.constructor(cx, cy, cz); }; // v3d 向量夹角方法 v3d.prototype.angle = function(v, b) { var dp = this.dot(v); var cosAngle = dp/(this.getmod()*v.getmod()); var angle = Math.acos(cosAngle); if (b) { return angle*180/Math.PI; } else { return angle; } }; // v3d 向量的平面的投影方法 v3d.prototype.v3dtov2d = function(d) { var nx = this.y*d/(d-this.x); var ny = this.z*d/(d-this.x); return new v2d(nx, ny); }; // v3d 向量按照给定角度围绕X轴旋转的方法 v3d.prototype.Xrotate = function(xw, b) { if (b) { xw *= (Math.PI/180); } var ny = this.y*Math.cos(xw)+this.z*Math.sin(xw); var nz = this.z*Math.cos(xw)-this.y*Math.sin(xw); return new this.constructor(this.x, ny, nz); }; // v3d 向量按照给定角度围绕Y轴旋转的方法 v3d.prototype.Yrotate = function(yw, b) { if (b) { yw *= (Math.PI/180); } var nz = this.z*Math.cos(yw)+this.x*Math.sin(yw); var nx = this.x*Math.cos(yw)-this.z*Math.sin(yw); return new this.constructor(nx, this.y, nz); }; // v3d 向量按照给定角度围绕Z轴旋转的方法 v3d.prototype.Zrotate = function(zw, b) { if (b) { zw *= (Math.PI/180); } var nx = this.x*Math.cos(zw)+this.y*Math.sin(zw); var ny = this.y*Math.cos(zw)-this.x*Math.sin(zw); return new this.constructor(nx, ny, this.z); }; // v3d 向量按照给定三角函数值围绕X轴旋转的方法 v3d.prototype.Xrotate2 = function(c, s) { var ny = this.y*c+this.z*s; var nz = this.z*c-this.y*s; return new this.constructor(this.x, ny, nz); }; // v3d 向量按照给定三角函数值围绕Y轴旋转的方法 v3d.prototype.Yrotate2 = function(c, s) { var nz = this.z*c+this.x*s; var nx = this.x*c-this.z*s; return new this.constructor(nx, this.y, nz); }; // v3d 向量按照给定三角函数值围绕Z轴旋转的方法 v3d.prototype.Zrotate2 = function(c, s) { var nx = this.x*c+this.y*s; var ny = this.y*c-this.x*s; return new this.constructor(nx, ny, this.z); }; // 使用二维向量给指定 MC 定位 var stagewidth = Stage.width/2; var stageheight = Stage.height/2; MovieClip.prototype.setXY = function(v, b) { if (b) { this._x = stagewidth+v.x; this._y = stageheight-v.y; } else { this._x = v.x; this._y = v.y; } }; // v2d 类的构造函数 _global.v2d = function(x, y) { this.x = x; this.y = y; }; /* mc.setXY(vector,distance,boolean); //设置mc的坐标,true以影片中心为坐标原点,false为原始坐标 Vector 3D 功能语法列表 my3d=new v3d(x,y,z); //创建构造函数 my3d.string(); //返回my3d的字符串 my3d.reset(); //重设my3d的x,y坐标 your3d=my3d.clone(); //返回my3d的副本给your3d your3d.equal(my3d); //返回布尔值,比较两个向量是否相等 his3d=your3d.plus(my3d); //返回两个向量的和 his3d=your3d.minus(my3d); //返回两个向量的差 your3d=my3d.negate(); //返回my3d的逆向量 your3d=my3d.scale(s); //返回my3d的s倍放缩 my3d.getmod(); //返回向量的模 my3d.setmod(len); //设置向量的模 my3d.dot(your3d); //返回两个向量的点积 my3d.cross(your3d); //返回两个向量的叉积 my3d.angle(your3d,boolean); //返回两个向量的差角,true为角度,flase为弧度 my2d=my3d.v3dtov2d(distance); //返回三维向量在距离为distance平面投影的二维向量 your3d=my3d.Xrotate(xw,boolean); //将向量绕X轴旋转xw并返回,true为角度,flase为弧度 your3d=my3d.Yrotate(yw,boolean); //将向量绕Y轴旋转yw并返回,true为角度,flase为弧度 your3d=my3d.Zrotate(zw,boolean); //将向量绕Z轴旋转zw并返回,true为角度,flase为弧度 your3d=my3d.Xrotate2(cos,sin); //将向量绕X轴旋转并返回,cos sin 分别为旋转角度的三角函数值 your3d=my3d.Yrotate2(cos,sin); //将向量绕Y轴旋转并返回,cos sin 分别为旋转角度的三角函数值 your3d=my3d.Zrotate2(cos,sin); //将向量绕Z轴旋转并返回,cos sin 分别为旋转角度的三角函数值 */