Test errors

by ikatyang

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r76/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js"></script>
<script src='https://ikatyang.github.io/three.badminton.js/build/three.badminton.js'></script>

CSS

body {
  margin: 0;
  overflow: hidden;
}

JavaScript

var camera, scene, renderer, controls;
var ball;
var startX = -100;
var startY = 100;
var under = false;
var v0 = new THREE.Vector3(1, 1, 0).setLength(1000);

var endX;
var ph = startY + (135.282819831419 * 3 / 4);

var results = [];

init();
animate();

function init() {

  scene = new THREE.Scene();

  camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 20000);
  camera.position.set(0, 300, 500);
  scene.add(camera);

  ball = createBadminton();
  ball.position.set(startX, startY, 0);
  ball.velocity.copy(v0);
  scene.add(ball);

  var gridXZ = new THREE.GridHelper(200, 20, 0xff0000, 0x88888888);
  gridXZ.position.y = startY;
  scene.add(gridXZ);

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

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

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

function onWindowResize() {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(window.innerWidth, window.innerHeight);
}

function updatePosition(delta) {
  var force = new THREE.Vector3(0, -980, 0);
  ball.velocity.addScaledVector(force, delta);
  ball.position.addScaledVector(ball.velocity, delta);
}

var elapsed = 0;
var vDownElapsed = 0;

function animate() {
		var delta = 1 / 60 / 5;
    var posPrev = ball.position.clone();
    ball.update(delta);
    elapsed += delta;
    var posNext = ball.position.clone();
    scene.add(createLine(posPrev, posNext, 5, 'red'));
  if (!under && ball.velocity.y < 0) {
  	if (vDownElapsed === 0) {
    	console.log(ball.position.y - startY);
    	vDownElapsed = elapsed;
    }
  	var dh = ball.position.y - ph;
    var ratio = -dh / ball.velocity.y;
  	var predicted = ball.position.clone().addScaledVector(ball.velocity, ratio);
    //console.log(dh, ratio, ball.position,...