Threejs - Updating Line at Center vs non-center

by black strings

HTML

<script src="https://rawgit.com/mrdoob/three.js/dev/build/three.js"></script>
<script src="https://rawgit.com/mrdoob/three.js/dev/examples/js/controls/OrbitControls.js"></script>

CSS

/* fix mouse click offset errors when doing drags */
body {
  margin: 0;
}

JavaScript

// a class encapsulting a math line and a actual line.
class Line {
	constructor(originAtCenter=false, length, p1, p2){
  	this.mat = new THREE.LineBasicMaterial({color: 0xff0000});
   
   if(originAtCenter && length) {
   	this.createAtCenter(length);
   } else if(p1 && p2){
   	this.createAtPoints(p1, p2);
   }
    
  }
  
  createAtPoints(p1,p2){
  	this.start = p1;
    this.end = p2;
    
  	this.line3 = new THREE.Line3(p1, p2);
    
    var lineGeo = new THREE.Geometry();
    lineGeo.vertices.push(this.line3.start, this.line3.end);
    this.mesh = new THREE.Line(lineGeo, this.mat);
    
    var normal = this.getVectorNormal();
    
    console.log(normal);
  }
  
  createAtCenter(length){
  	var halfLength = length/2;
  	this.start = new THREE.Vector3(halfLength, 0, 0);
    this.end = new THREE.Vector3(-halfLength, 0 , 0);
    
  	this.line3 = new THREE.Line3(this.start, this.end);
    
    var lineGeo = new THREE.Geometry();
    lineGeo.vertices.push(this.line3.start, this.line3.end);
    this.mesh = new THREE.Line(lineGeo, this.mat);
    
    var normal = this.getVectorNormal();
  }
  
  getVectorNormal(){
  	var normal = new THREE.Vector3();
    normal.subVectors(this.end.clone(), this.start.clone());
    var angle = THREE.Math.degToRad(90);
    normal.applyAxisAngle(new THREE.Vector3(0,0,1), angle);
    
    this.zeroOutNearZeroValues(normal);
    
    return normal;
  }
  
  getLength(){
  	return this.start.distanceTo(this.end);
  }
  
  updateLength(length){
  	if(length){
    	var start = this.mesh.geometry.vertices[0];
      var end = this.mesh.geometry.vertices[1];
    	start.x = length / 2;
      end.x = -length / 2;
      this.mesh.geometry.verticesNeedUpdate = true;
      
      // math line
      this.line3.start = start;
      this.line3.end = end;
    }
  }
  
  zeroOutNearZeroValues(vec){
  	 var x = parseInt(vec.x.toFixed(3));
     var y = parseInt(vec.y.toFixed(3));
     var z = parseInt(vec.z.toFixed(3));
     vec.x = x === 0 ? 0 :...