Translate Point Along a Vector

Translate Point Along a Vector

This is done in a series of small steps;

  • Calculate the Magnitude of the Vector
  • Calculate the Unit Vector
  • Translate the Point

Translate Reference Point (R) = 10 ; 20 ; 30 10units along Vector (N) = 5 ; 2 ; 7

Magnitude of Vector N

||N|| = \sqrt{I^2 + J^2 + K^2} \\
= \sqrt{5^2 + 2^2 + 7^2} \\
= \sqrt{ 25 + 4 + 49} \\
 = \sqrt{ 78 } \\
= 8.8317

Unit Vector of Vector N

\widehat{N} = \overrightarrow{N} / ||{N}|| \\
= 5 / 8.8317 ; 2 / 8.8317 ; 7 / 8.8317 \\
= 0.5661 ; 0.2264 ; 0.7925

Translate the Point

Point(T) = (\widehat{N} \cdotp Translation \space Length ) + Point(R) \\
X\tiny{T}\cdotp \normalsize = (0.5661 \cdotp 10) + 10 = 15.66139 \\
Y\tiny{T}\cdotp \normalsize = (0.2264 \cdotp 10) + 20 = 22.26455 \\
Z\tiny{T}\cdotp \normalsize = (0.7925 \cdotp 10) + 30 = 37.92594 \\

We can write a simple C# method for doing this with three inputs:

  • A Reference Point, a location in space to start the translation from.
  • A Reference Vector, the direction along which we want to translate the vector.
  • The Offset amount, the distance by which we want to translate the point.
private IPointBase3D TranslatePointAlongVector(IPointBase3D iRefPoint, IVectorBase3D iRefVector, double iOffset)
{
  IPointBase3D ReturnPoint = new PointBase3D();
  ReturnPoint.X = (iRefVector.UnitVector.I * iOffset) + iRefPoint.X;
  ReturnPoint.Y = (iRefVector.UnitVector.J * iOffset) + iRefPoint.Y;
  ReturnPoint.Z = (iRefVector.UnitVector.K * iOffset) + iRefPoint.Z;
  return ReturnPoint;
}

We can take this one step further and use a Reference Axis System to create a Point by Coordinates, using the translation method above.

public PointByCoordinates(IAxisSystemBase3D iRefAxisSystem, double iX, double iY, double iZ)
        {
            this.RefAxisSystem = iRefAxisSystem;
            IPointBase3D NewPoint = this.TranslatePointAlongVector(iRefAxisSystem.Origin, iRefAxisSystem.XAxis,iX);
            NewPoint = this.TranslatePointAlongVector(NewPoint, iRefAxisSystem.YAxis, iY);
            NewPoint = this.TranslatePointAlongVector(NewPoint, iRefAxisSystem.ZAxis, iZ);
            this.X = NewPoint.X;
            this.Y = NewPoint.Y;
            this.Z = NewPoint.Z;
        }

You can download an excel spreadsheet here with the proof.