# 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;
}