# Binormal vector not plotting as expected

I cannot see why the binormal vector is not plotting orthogonal to T and N. Surely I am overlooking something. Do you see what it might be?

x[t_] = Cos[t];
y[t_] = Sin[t];
z[t_] = t;
r[t_] = {x[t], y[t], z[t]};
UnitTangent[t_] := Simplify[r'[t]/Norm[r'[t]], t \[Element] Reals];
UnitNormal[t_] := Simplify[UnitTangent'[t]/Norm[UnitTangent'[t]], t \[Element] Reals];
UnitBinormal[t_] := Simplify[Cross[UnitTangent[t], UnitNormal[t]], t \[Element] Reals];
Manipulate[
Show[
ParametricPlot3D[r[t], {t, 0, T}, PlotStyle -> {Thick, Blue},
PlotRange -> {{-1.5, 1.5}, {-1.5, 1.5}, {0, 20}},
BoxRatios -> {1, 1, 1}, ImageSize -> 400],
Arrow[{r[T], r[T] + UnitTangent[T]}]}, Axes -> True,
PlotRange -> {{-1, 1}, {-1, 1}, {0, 20}}],
Arrow[{r[T], r[T] + UnitNormal[T]}]}, Axes -> True,
PlotRange -> {{-1, 1}, {-1, 1}, {0, 20}}],
Arrow[{r[T], r[T] + UnitBinormal[T]}]}, Axes -> True,
PlotRange -> {{-1, 1}, {-1, 1}, {0, 20}}]],
{T, .01, 20}]

• It's probably because you don't have BoxRatios -> Automatic. Rescaling with different factors along the axes does not preserve angles. I'd recommend using something like z[t] = t / 10. – Michael E2 Sep 20 '17 at 20:47
• That did it, thanks. I thought that by setting them all to 1 I would avoid the very problem that it created. If you want to add this as an answer, I will accept it. – JohnD Sep 20 '17 at 20:57

It's because you don't have BoxRatios -> Automatic. Rescaling with BoxRatios -> {1, 1, 1}, which gives equal-length axes in the output, does not preserve angles, unless the plot ranges on each axis are equal in length. I'd recommend using something like the following together with BoxRatios -> Automatic:
z[t] = t / 10 