/**
  * Calulates vector which divides v1 and v2 in 1:s
  *
  * @return Vector dividing v1,v2 in 1:s
  */
 public static Vector3D intepolate(Vector3D v1, Vector3D v2, double s) {
   if (s == -1) return null;
   return (v1.scale(s).add(v2)).scale(1 / (s + 1));
 }
 /** @return v1.v3(v2)-v1.v2(v3) */
 public static Vector3D vectorTripleProduct(Vector3D v1, Vector3D v2, Vector3D v3) {
   Vector3D rv;
   rv = v3.scale(v1.DotProduct(v3));
   rv = rv.subtract(v2.scale(v1.DotProduct(v2)));
   return rv;
 }
 /** @return Component of this vector parallel to given vector */
 public Vector3D Get_Parallel_Component(Vector3D dirVector3D) {
   return dirVector3D.scale(this.DotProduct(dirVector3D.getUnitVector()));
 }