calculate start tangent vector polymorphically
fixed strange corner-case with acos floating-point numbers suck >.<