导航

  • 首页
  • Tags列表
  • 管理
  • 简繁转换
Search Engine Optimization 站外搜索 站内搜索
« 什么是iso感光度什么是快门/快门优先模式 »

Vector(向量)类

二维向量,也可称为点向量:
点击这里查看:myMath类

import myMath;
class Vector {
var x:Number;
var y:Number;
/*格式化输出向量坐标,(将坐标舍入为3个十进制小数位)对实际数值不造成任何影响*/
function toString():String{
var rx = Math.round (this.x * 1000) / 1000;
var ry = Math.round (this.y * 1000) / 1000;
return ""["" + rx + "", "" + ry + ""]"";
}
/*重置Vector类*/
function reset(x:Number,y:Number):Void {
this.x=x;
this.y=y;
}
/*构造函数*/
function Vector(x:Number,y:Number){
this.x=x;
this.y=y;
}
/*复制Vector类*/
function getClone():Vector{
return new Vector(this.x,this.y);
}
/*比较两个Vector类是否相等*/
function equals(v:Vector):Boolean{
  return (this.x==v.x && this.y==v.y);
}
/*向量加法,改变的是当前对象*/
function plus(v:Vector):Void{
   with (this) {
x += v.x;
y += v.y;
}
}
/*将两个向量和存储在一个新的对象中*/
function plusNew(v:Vector):Vector{
  return new Vector(this.x+v.x,this.y+v.y);
}
/*向量减法,改变的是当前对象*/
function minus(v:Vector):Void{
   with (this) {
x -= v.x;
y -= v.y;
}
}
/*将两个向量差存储在一个新的对象中*/
function minusNew(v:Vector):Vector{
  return new Vector(this.x-v.x,this.y-v.y);
}
/*向量求逆,改变的是当前对象*/
function negate():Void{
   with (this) {
x = -x;
y = -y;
}
}
/*向量求逆后存储在一个新的对象中*/
function negateNew():Vector{
  return new Vector(-this.x,-this.y);
}
/*向量缩放*/
function scale(s:Number):Void{
   with (this) {
x *= s;
y *= s;
}
}
function scaleNew(s:Number):Vector{
  return new Vector(this.x * s, this.y * s);
}
/*向量长度*/
function getLength():Number{
with (this) return Math.sqrt (x*x + y*y);
}
/*跟据给定向量长度,重新设置Vector对象的大小*/
function setLength(len:Number):Void{
    var r:Number = this.getLength();
  if (r) this.scale (len / r);
  else this.x = len;
}
/*向量角度*/
function getAngle():Number{
  return myMath.atan2D(this.y, this.x);
}
/*重置向量角度*/
function setAngle(ang:Number):Void{
with (this) {
var r:Number = getLength();
x = r * myMath.cosD (ang);
y = r * myMath.sinD (ang);
}
}
/*向量旋转,指的是角度的变化,而不是目标角度本身*/
function rotate(ang:Number):Void{
var ca:Number = myMath.cosD (ang);
var sa:Number = myMath.sinD (ang);
with (this) {
var rx:Number = x * ca - y * sa;
var ry:Number = x * sa + y * ca;
x = rx;
y = ry;
}
}  
function rotateNew(ang:Number):Vector{
  var v:Vector=new Vector(this.x,this.y);
  v.rotate(ang);
  return v;
}
/*点积*/
function dot(v:Vector):Number{
with (this) return x * v.x + y * v.y;
}
/*法向量*/
function getNormal():Vector{
  return new Vector(-this.y,this.x);
}
/*垂直验证*/
function isPerpTo(v:Vector):Boolean{
return (this.dot (v) == 0);
}
/*向量的夹角*/
function angleBetween(v:Vector):Number{
var dp:Number = this.dot (v);
var cosAngle:Number = dp / (this.getLength() * v.getLength());
return myMath.acosD (cosAngle);
}
}

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Search



  • 互联网 站内搜索

最新留言

最近发表

站点统计

  • 文章总数:244
  • 评论总数:246
  • 引用总数:0
  • 浏览总数:380993
  • 当前样式:default
  • 当前语言:zh-CN

图标汇集

  • 订阅到抓虾
    新闻蚂蚁
    周博通
    订阅到狗狗
    google reader
    bloglines
    my yahoo
    newsgator
    netvibes
    Rojo
  • 通过 W3C XHTML 1.0 Transitional 校验
  • 通过 W3C CSS 校验
  • 订阅本站的 ATOM 1.0 新闻聚合
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-Blog 1.6 Final Build 60802

Copyright Yufuzi Some Rights Reserved.
E-mail:yufuzi80@126.com QQ:20168130
备案序号:苏ICP备06015492号