OBB(2D)_random_oldVer

by YouTingKuo

HTML

<div id="info">OBB(2D)
    <br/> 
    <a href="javascript:random_number();">reset</a>
</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js">  
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/numeric/1.2.6/numeric.min.js">
</script>

CSS

#info {
    position: absolute;
    top: 0px;
    width: 100%;
    padding: 10px;
    text-align: center;
    color: #ffff00
}
a {
    color: white;
}
body {
    overflow: hidden;
}

JavaScript

var camera, scene, renderer, geometry, light, controls, border;
var pointGroup = new THREE.Object3D();
var avr = [], mCen = [], cov = [], localCoor = [], centroid = [], xy = [], 
		size = [], PC1 = [], PC2 = [], newCentroid = [];
var ev, xMax, xMin, yMax, yMin;
var p1=[], p2 = [], p3 = [], p4 = [];

init();
animate();

function init() {
    scene = new THREE.Scene();

    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
    camera.position.z = 200;
    scene.add(camera);

    random_number();

    light = new THREE.PointLight(0xffffff);
    light.position.set(100, 300, 200);
    scene.add(light);

    renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.setClearColor(0x888888);

    controls = new THREE.OrbitControls(camera, renderer.domElement);

    document.body.appendChild(renderer.domElement);
    window.addEventListener('resize', onWindowResize, false);
}

function computeCentroid() { //算形心
		centroid[0] = centroid[1] = 0;
		for(var i = 0; i < xy.length; i++) {
    		centroid[0] += xy[i][0];
        centroid[1] += xy[i][1];
    }
    centroid[0] /= xy.length;
    centroid[1] /= xy.length;
}

function minusCen() { //算座標減去形心
		mCen = [];
		for(var i = 0; i < xy.length; i++) {
    		mCen[i] = [];
    		mCen[i][0] = xy[i][0] - centroid[0];
    		mCen[i][1] = xy[i][1] - centroid[1];
    }
}

function calculateCov() { //算Covariance matrix
		cov = [];
    for(var i = 0; i < 2; i++) 
    		cov[i] = [];
    cov[0][0] = cov[0][1] = cov[1][0]= cov[1][1] = 0;
    for(var i = 0; i < xy.length; i++) {
    		cov[0][0] += mCen[i][0] * mCen[i][0];
        cov[0][1] += mCen[i][0] * mCen[i][1];
        cov[1][0] += mCen[i][1] * mCen[i][0];
        cov[1][1] += mCen[i][1] * mCen[i][1];
    }
    cov[0][0] /= (xy.length-1);
    cov[0][1] /= (xy.length-1);
    cov[1][0] /= (xy.length-1);
    cov[1][1] /= (xy.length-1);  
}

function calculateEigen() { //算eigenvectors...