import {Outline2} from './Outline2'; import {Vector2} from './Vector2'; //========================================================== // 三维轮廓。 // 00 ── 01 // │ │ // │ │ // 03 ── 02 // // @struct // @author maocy // @version 150912 //========================================================== export class Outline2d extends Outline2 { //.......................................................... // @attribute 中心点 public center: Vector2 = new Vector2(); public distance: Vector2 = new Vector2(); // @attribute 半径 public radius = 0; // @attribute 顶点集合 public points = new Array(8); //============================================================ // 接收一个三维轮廓。 // // @method // @param p:value:SOutline3 三维轮廓 //============================================================ public assign(value) { this.center.assign(value.center); this.distance.assign(value.distance); this.radius = value.radius; for (var i = 0; i < 8; i++) { this.points[i] = value.points[i]; } } //========================================================== // 设置参数。 // // @method // @param ix:minX:Number 最小X坐标 // @param iy:minY:Number 最小Y坐标 // @param ax:maxX:Number 最大X坐标 // @param ay:maxY:Number 最大Y坐标 //========================================================== public set(minX, minY, maxX, maxY) { this.min.set(minX, minY); this.max.set(maxX, maxY); this.update(); } //============================================================ // 根据轮廓更新数据。 // // @method //============================================================ public update() { // 获得数据 var min = this.min; var minX = min.x; var minY = min.y; var max = this.max; var maxX = max.x; var maxY = max.y; // 设置空间坐标 var ps = this.points; ps[0] = minX; ps[1] = maxY; ps[2] = maxX; ps[3] = maxY; ps[4] = maxX; ps[5] = minY; ps[6] = minX; ps[7] = minY; // 计算中心位置 var center = this.center; center.x = (minX + maxX) * 0.5; center.y = (minY + maxY) * 0.5; // 计算距离 var distance = this.distance; distance.x = maxX - minX; distance.y = maxY - minY; // 计算半径 var cx = maxX - minX; var cy = maxY - minY; this.radius = Math.sqrt(cx * cx + cy * cy) * 0.5; } }