NRBREVOLVE: Construct a NURBS surface by revolving a NURBS curve, or construct a NURBS volume by revolving a NURBS surface. Calling Sequence: srf = nrbrevolve(crv,pnt,vec[,ang]) INPUT: crv : NURBS curve or surface to revolve, see nrbmak. pnt : Coordinates of the point used to define the axis of rotation. vec : Vector defining the direction of the rotation axis. ang : Angle to revolve the curve, default 2*pi OUTPUT: srf : constructed surface or volume Description: Construct a NURBS surface by revolving the profile NURBS curve around an axis defined by a point and vector. Examples: Construct a sphere by rotating a semicircle around a x-axis. crv = nrbcirc(1.0,[0 0 0],0,pi); srf = nrbrevolve(crv,[0 0 0],[1 0 0]); nrbplot(srf,[20 20]); NOTE: The algorithm: 1) vectrans the point to the origin (0,0,0) 2) rotate the vector into alignment with the z-axis for each control point along the curve 3) determine the radius and angle of control point to the z-axis 4) construct a circular arc in the x-y plane with this radius and start angle and sweep angle theta 5) combine the arc and profile, coefs and weights. next control point 6) rotate and vectrans the surface back into position by reversing 1 and 2. Copyright (C) 2000 Mark Spink Copyright (C) 2010 Rafael Vazquez This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
The following code
sphere = nrbrevolve(nrbcirc(1,[],0.0,pi),[0.0 0.0 0.0],[1.0 0.0 0.0]); nrbplot(sphere,[40 40],'light','on'); title('Ball and tori - surface construction by revolution'); hold on; torus = nrbrevolve(nrbcirc(0.2,[0.9 1.0]),[0.0 0.0 0.0],[1.0 0.0 0.0]); nrbplot(torus,[40 40],'light','on'); nrbplot(nrbtform(torus,vectrans([-1.8])),[20 10],'light','on'); hold off;
Produces the following figure
Figure 1 |
---|
The following code
pnts = [3.0 5.5 5.5 1.5 1.5 4.0 4.5; 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.5 1.5 4.5 3.0 7.5 6.0 8.5]; crv = nrbmak(pnts,[0 0 0 1/4 1/2 3/4 3/4 1 1 1]); xx = vecrotz(25*pi/180)*vecroty(15*pi/180)*vecrotx(20*pi/180); nrb = nrbtform(crv,vectrans([5 5])*xx); pnt = [5 5 0]'; vec = xx*[0 0 1 1]'; srf = nrbrevolve(nrb,pnt,vec(1:3)); p = nrbeval(srf,{linspace(0.0,1.0,100) linspace(0.0,1.0,100)}); surfl(squeeze(p(1,:,:)),squeeze(p(2,:,:)),squeeze(p(3,:,:))); title('Construct of a 3D surface by revolution of a curve.'); shading interp; colormap(copper); axis equal; hold off
Produces the following figure
Figure 1 |
---|
The following code
crv1 = nrbcirc(1,[0 0],0, pi/2); crv2 = nrbcirc(2,[0 0],0, pi/2); srf = nrbruled (crv1, crv2); srf = nrbtform (srf, [1 0 0 0; 0 1 0 1; 0 0 1 0; 0 0 0 1]); vol = nrbrevolve (srf, [0 0 0], [1 0 0], pi/2); nrbplot(vol, [30 30 30], 'light', 'on')
Produces the following figure
Figure 1 |
---|
Package: nurbs