# How can I calculate the Vector3 b using Vector 3 a pos with an angle?

I am trying to calculate a point in space using some parameters and a starting point.
The code to do this in 2D space is:

``````Vector3 startLimbA = new Vector3(0,1,0);
float length = 2;
float angle = 45;

private void CalculateB()
{
float newx = length * Mathf.Cos(radian(angle));
float newy = length * Mathf.Sin(radian(angle));
float NA = ??;
startLimbB = new Vector3(startLimbA.x + newx, startLimbA.y + newy, startLimbA.z + NA);
}
``````

If anyone could give me a solution to his problem and/or point me in the direction of some resources that would be greatly appreciated.

@JamesEvanNeal, a lot depends on the nature of 3D orientation, which is to say if you have a rotation to apply that isn’t aligned on an axis.

In the example code you’ve given the angle assumes the rotation is on the Z axis (producing new x and y coordinates). In that case NA is 0, because when the rotation as aligned to the Z axis this way, z will not change.

Also, length is assumed to be on the X axis before the rotation. That’s implied by your particular use of the rotation formula (the y portion of the classical rotation has been omitted because y is zero).

If the rotation isn’t aligned on an axis, you’d probably express that as a Quaternion. The Quaternion could be created from Euler angles with

``````Quaternion q = Quaternion.Euler( x, y, z );
``````

where each x, y and z parameter is an angle of rotation in degrees for each axis. This results in what is visually a rotation that may not be aligned to an axis.

To use q, a Quaternion, similarly to your 2D example, you could:

``````Vector3 va = new Vector3( 2, 0, 0 );
Vector3 vr = ( q * va ) + startLimbA;
``````

The equivalent to your example, where NA is zero because this is a rotation on the Z axis is:

``````Vector3 va = new Vector3( 2, 0, 0 );
Quaternion q = Quaternion.Euler( 0, 0, 45 );
Vector3 startLimbA = new Vector3( 0, 1, 0 );

Vector3 vr = ( q * va ) + startLimbA;
``````