HW5
by SunnyHsu
HTML
<div id="info">HW5_1
<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 mCen = [], cov = [], localCoor = [], centroid = [], xy = [],
size = [], PCA1 = [], PCA2 = [];
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,講義P.5
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
ev =...