Rotating TwoPointLine

with orbitControls, XZgrid, info

by yi hom

HTML

<div id="info">Rotate hermite cruve
<div id="state"></div>
</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>

CSS

#info {
    position: absolute;
    top: 0px;
    width: 100%;
    padding: 10px;
    text-align: center;
    color: #ffff00
}
body {
    overflow: hidden;
}
#state {
    position: absolute;
    top: 50px;
	right: 150px;
    width: 100%;
    color: #ffffff;
    text-align: center;
}

JavaScript

//var camera, scene, renderer, border;
var pos = new THREE.Vector3();
var q0,q1,q2,q3;
var ans,pt;
q0 = new THREE.Vector3(0, 0, 0);
q1 = new THREE.Vector3(0, 15, 0);
q2 = new THREE.Vector3(14, -10, 0);
q3 = new THREE.Vector3(13, 12, 0);

var p1 = new THREE.Vector3(0, 0, 0);
var t1 = q1.clone().sub(q0);
var p2 = new THREE.Vector3(13, 12, 0);
var t2 = q3.clone().sub(q2);
var stateInfo;
var coeff,tt0,tt1,tt2,tt3,sol0,sol1,sol2;

init();
animate();

function solve (q0,q1,q2,q3) {
  
    p1 = q0;
    t1 = q1.clone().sub(q0);
    p2 = q3;
    t2 = q3.clone().sub(q2);
    
	return[Math.pow(p1.y,2)/25+Math.pow(p1.x,2)/100-1,
           
           2*p1.y*t1.y/25 + p1.x*t1.x/50,
           
           (-2*p1.y*t2.y/25) - p1.x*t2.x/50 + Math.pow(t1.y,2)/25 - 4*p1.y*t1.y/25 + Math.pow(t1.x,2)/100 - p1.x*t1.x/25 + 
6*p1.y*p2.y/25 + 3*p1.x*p2.x/50 - 6*Math.pow(p1.y,2)/25 - 3*Math.pow(p1.x,2)/50,
           
           (-2*t1.y*t2.y/25) + 2*p1.y*t2.y/25 - t1.x*t2.x/50 + p1.x*t2.x/50 - 4*Math.pow(t1.y,2)/25 + 6*p2.y*t1.y/25 - 
4*p1.y*t1.y/25 - Math.pow(t1.x,2)/25 + 3*p2.x*t1.x/50 - p1.x*t1.x/25 - 4*p1.x*p2.y/25 - p1.x*p2.x/25 + 
4*Math.pow(p1.y,2)/25 + Math.pow(p1.x,2)/25,
           
           Math.pow(t2.y,2)/25 + 6*t1.y*t2.y/25 - 6*p2.y*t2.y/25 + 6*p1.y*t2.y/25 + Math.pow(t2.x,2)/100 + 3*t1.x*t2.x/50 - 
3*p2.x*t2.x/50 + 3*p1.x*t2.x/50 + 6*Math.pow(t1.y,2)/25 - 16*p2.y*t1.y/25 + 16*p1.y*t1.y/25 + 3*Math.pow(t1.x,2)/50 - 
4*p2.x*t1.x/25 + 4*p1.x+t1.x/25 + 9*Math.pow(p2.y,2)/25 - 18*p1.y*p2.y/25 + 9*Math.pow(p2.x,2)/100 - 9*p1.x*p2.x/50 + 
9*Math.pow(p1.y,2)/25 + 9*Math.pow(p1.x,2)/100,
           
           (-2*Math.pow(t2.y,2)/25) - 6*t1.y*t2.y/25 + 2*p2.y*t2.y/5 - 2*p1.y*t2.y/5 - Math.pow(t2.x,2)/50 - 3*t1.x*t2.x/50 + 
p2.x*t2.x/10 - p1.x*t2.x/10 - 4*Math.pow(t1.y,2)/25 + 14*p2.y*t1.y/25 - 14*p1.y*t1.y/25 - Math.pow(t1.x,2)/25 + 
7*p2.x*t1.x/50 - 7*p1.x*t1.x/50 - 12*Math.pow(p2.y,2)/25 + 24*p1.y*p2.y/25 - 3*Math.pow(p2.x,2)/25 + 6*p1.x*p2.x/25 - 
12*Math.pow(p1.y,2)/25 -...