I need a tube with only one end capped. I can do this relatively easily with:
monoTube[{pt1_, pt2_}, r_] := {
EdgeForm[None],
Cylinder[{pt1, pt2}, r],
Sphere[pt2, r]}
I would also like the entire object to have the length EuclideanDistance[pt1, pt2], which means I really need a pt3 lying on the object's path that is closer to pt1 than pt2 is by the distance r. While I know this is a simple vector operation, I do not know how to do it properly.

