Building a Local Coordinate Transformation Matrix in 3D Using MATLAB
- Adisorn O.
- Apr 28
- 2 min read
Updated: Jun 7
by alpsdev

When working with 3D structural elements such as beams, frames, or trusses, it is often necessary to define a local coordinate system aligned with the element. This local frame allows for easier formulation of element stiffness, loads, and deformations.
In this blog, we'll walk through how to compute a local transformation matrix from two given points (start and end nodes) using MATLAB, and ensure it is a right-handed orthonormal system. It should be noted that in this example, there is no "angle of roll" of the section. See this blog how to apply angle of roll transformation.
Problem Statement
Given two nodes:
Node i: (x1, y1, z1)
Node j: (x2, y2, z2)
We want to build a transformation matrix T that defines a local coordinate system aligned with the line connecting these two nodes.
Local x'-axis: points from node i to node j.
Local y'-axis: constructed to be perpendicular to x'-axis.
Local z'-axis: completes the right-handed system.
The resulting matrix T will have:
Each row representing a unit basis vector (x', y', z') in the global coordinate system.
Step-by-Step MATLAB Script
% Node coordinates
node_i_coord = [0, 0, 0];
node_j_coord = [5, 3, 2];
% Compute local x' axis (from node i to j)
vec_x = node_j_coord - node_i_coord;
dx = vec_x / norm(vec_x); % Normalize to unit vector
% Define global reference axes
global_Z = [0, 0, 1];
global_Y = [0, 1, 0];
% Check for near vertical case
if abs(dot(dx, global_Z)) > 0.99
% x' is almost vertical; use Y-axis to construct local z'
dz = cross(dx, global_Y);
else
% Normal case; use Z-axis to construct local z'
dz = cross(dx, global_Z);
end
% Normalize local z' axis
dz = dz / norm(dz);
% Compute local y' axis by cross product
% (Ensure right-handed system: dy = dz x dx)
dy = cross(dz, dx);
dy = dy / norm(dy);
% Assemble Transformation matrix
T = [dx; dy; dz];
Concept Behind Each Step
Local x'-axis (dx):
Defined by the direction from node i to node j.
Normalized to ensure unit length.
Choosing Reference Axis:
To define the other two axes (y', z'), we need a second reference direction.
Normally, we use the global Z-axis ([0 0 1]).
However, if dx is almost vertical, the cross product with Z becomes unstable.
In that case, we switch to Y-axis ([0 1 0]).
Local z'-axis (dz):
Cross dx with the reference axis.
Normalize to ensure unit length.
Local y'-axis (dy):
Cross dz and dx to form the third axis.
This ensures a right-handed orthonormal system.
Building T Matrix:
Stack dx, dy, dz as rows.
Now T transforms vectors from local to global coordinates.
Why This Method is Robust
Handles near vertical elements: switching reference axes automatically.
Ensures orthogonality: by using cross products.
Normalized basis vectors: each axis has unit length.
You can check correctness by confirming that:
T * T' % Should be approximately Identity matrix
Final Thoughts
This method is essential for constructing the transformation matrices used in:
Finite Element Analysis (FEA)
Frame element stiffness matrix assembly
Post-processing stresses and strains in local coordinates
Building a reliable transformation matrix ensures your element behavior is correctly represented no matter how they are oriented in space.

