## Documentation Center |

Put together rational spline

`rp = rpmak(breaks,coefs) rp = rpmak(breaks,coefs,d) rpmak(breaks,coefs,sizec) `

Both `rpmak` and `rsmak` put
together a rational spline from minimal information. `rsmak` is
also equipped to provide rational splines that describe standard geometric
shapes. A rational spline must be scalar- or vector-valued.

`rp = rpmak(breaks,coefs) `
has the same effect as the command `ppmak(breaks, coefs)` except
that the resulting ppform is tagged as a rational spline, i.e., as
a rpform.

To describe what this means, let *R* be the
piecewise-polynomial put together by the command `ppmak(breaks,coefs)`,
and let *r*(*x*) = *s*(*x*)/*w*(*x*)
be the rational spline put together by the command `rpmak(breaks,coefs)`.
If `v` is the value of *R* at *x*,
then `v(1:end-1)/v(end)` is the value of *r* at *x*.
In other words, *R*(*x*) = [*s*(*x*);*w*(*x*)].
Correspondingly, the dimension of the target of *r* is
one less than the dimension of the target of *R*.
In particular, the dimension (of the target) of *R* must
be at least 2, i.e., the coefficients specified by `coefs` must
be `d`-vectors with `d `> 1. See `ppmak` for
how the input arrays `breaks` and `coefs` are
being interpreted, hence how they are to be specified in order to
produce a particular piecewise-polynomial.

`rp = rpmak(breaks,coefs,d) `
has the same effect as `ppmak(breaks,coefs,d+1), `except
that the resulting ppform is tagged as being a rpform. Note that the
desire to have that optional third argument specify the dimension
of the target requires different values for it in `rpmak` and `ppmak` for
the same coefficient array `coefs`.

`rpmak(breaks,coefs,sizec) `
has the same effect as `ppmak(breaks,coefs,sizec)` except
that the resulting ppform is tagged as being a rpform, and the target
dimension is taken to be `sizec(1)-1`.

` rs = rsmak(knots,coefs) `
is similarly related to

` rs
= rsmak(shape,parameters) ` provides a rational
spline in rBform that describes the shape being specified by the string

rsmak('arc',radius,center,[alpha,beta]) rsmak('circle',radius,center) rsmak('cone',radius,halfheight) rsmak('cylinder',radius,height) rsmak('southcap',radius,center) rsmak('torus',radius,ratio)

with `1` the default value for `radius`, `halfheight` and `height`,
and the origin the default for `center`, and the
arc running through all the angles from `alpha` to `beta` (default
is `[-pi/2,pi/2]`), and the cone, cylinder, and torus
centered at the origin with their major circle in the (x,y)-plane,
and the minor circle of the torus having radius `radius*ratio`,
the default for `ratio` being `1/3`.

From these, one may generate related shapes by affine transformations,
with the help of `fncmb``(rs,transformation)`.

All `fn...` commands except `fnint`, `fnder`, `fndir` can
handle rational splines.

The commands

runges = rsmak([-5 -5 -5 5 5 5],[1 1 1; 26 -24 26]); rungep = rpmak([-5 5],[0 0 1; 1 -10 26],1);

both provide a description of the rational polynomial *r*(*x*)
= 1/(*x*^{2} + 1) on the
interval [-5 .. 5]. However, outside the interval [-5 .. 5], the function
given by `runges` is zero, while the rational spline
given by `rungep` agrees with 1/(*x*^{2} +
1) for every *x*.

The figure of a rotated cone is generated by the commands

fnplt(fncmb(rsmak('cone',1,2),[0 0 -1;0 1 0;1 0 0])) axis equal, axis off, shading interp

**A Rotated Cone Given by a Rational Quadratic
Spline**

A Helix, showing a helix with several windings, is generated by the commands

arc = rsmak('arc',2,[1;-1],[0 7.3*pi]); [knots,c] = fnbrk(arc,'k','c'); helix = rsmak(knots, [c(1:2,:);aveknt(knots,3).*c(3,:); c(3,:)]); fnplt(helix)

**A Helix**

For further illustrated examples, see NURBS and Other Rational Splines

Was this topic helpful?