Revolution 2D spline to 3D surface
2 views (last 30 days)
Show older comments
Hi all,
I would like to revolute a 2D spline that I constructed (to describe a train wheel). How do I perform this revolution so the description in 3D remains a analytical (thus spline) expression?
Thank you
0 Comments
Answers (1)
Unai San Miguel
on 16 Mar 2017
It depends on what you mean by analytical expression. For example, it is not possible to express a circle and thus a revolution surface with polynomial splines and you should use rational splines if you wanted that.
But usually a polynomial spline with enough degrees of freedom can approximate well a circle.
Let su = spmak(knotsu, coefsu) be your 2D (2-valued, 1-variate) spline and size(coefsu) = [2, Nu]. The first component represents the radial coordinate r and the second the axial z.
Let sv = spmak(knotsv, coefsv) be the 2-valued, 1-variate spline approximation to a circle of radius 1 and centered at the origin of coordinates.
A general revolution surface is of the form [r(u) * cos(v), r(u) * sin(v), z(u)]', with the u=u0=const curves being circles of radius r(u0) at z = z(u0), and the v=v0=const curves rotations of the generatrix at angle v0 along the z-axis.
As sv is an approximation of [cos(v), sin(v)]' you can construct the tensor product spline
s = spmak({knotsu, knotsv}, coefs);
with size(coefs) = [3, su.number, sv.number] and the following definitions
coefs(1,:,:) = su.coefs(1,:)' * sv.coefs(1,:); % r(u) * cos(v)
coefs(2,:,:) = su.coefs(1,:)' * sv.coefs(2,:); % r(u) * sin(v)
coefs(3,:,:) = su.coefs(2,:)' * ones(size(sv.coefs(1,:))); % z(u)
taking advantage of the affine-conservation properties of splines.
I don't use rational splines, but in The NURBS Book by Piegl and Tiller this solution with NURBS is explained.
0 Comments
See Also
Categories
Find more on Spline Construction in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!