Building a Local Coordinate Transformation Matrix in 3D Using MATLAB
- Adisorn O.
- Apr 28
- 2 min read
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.
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.