diff options
author | Karl Berry <karl@freefriends.org> | 2010-10-15 23:09:30 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-10-15 23:09:30 +0000 |
commit | 19b68112afa7a9fefc611f2e796e82a3884d0e08 (patch) | |
tree | 569ff823f08987a1733ee6de9d4507b15599632d /Master/texmf-dist/doc | |
parent | 1df1829282a57c887b9dc8ceefc83905a3359252 (diff) |
pst-bspline (15oct10)
git-svn-id: svn://tug.org/texlive/trunk@20115 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bspline/README | 4 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.pdf | bin | 86397 -> 101556 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.tex | 132 |
3 files changed, 106 insertions, 30 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-bspline/README b/Master/texmf-dist/doc/generic/pst-bspline/README index a5bc5e71956..3e8dd393146 100644 --- a/Master/texmf-dist/doc/generic/pst-bspline/README +++ b/Master/texmf-dist/doc/generic/pst-bspline/README @@ -2,10 +2,10 @@ %% %% Michael Sharpe <msharpe@ucsd.edu> %% -%% Version 1.3, 2010/09/04 +%% Version 1.4, 2010/10/14 %% %% License: Free -This package draws uniform, cubic Bspline curves, open and closed, based on a sequence of Bspline control points. There is also code which permits drawing the open or closed cubic Bspline curve interplating a sequence of points. +This package draws uniform, cubic Bspline curves, open and closed, based on a sequence of Bspline control points. There is also code which permits drawing the open or closed cubic Bspline curve interplating a sequence of points. This version adds a \thickBspline macro. The .tex and .sty files should be installed in a folder searched by TeX. All documentation is in pst-bspline-doc.pdf.
\ No newline at end of file diff --git a/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.pdf b/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.pdf Binary files differindex c116ed3af90..6c395adbf4f 100644 --- a/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.pdf +++ b/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.pdf diff --git a/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.tex b/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.tex index 1de47c211ac..9e08c19d7f1 100644 --- a/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.tex +++ b/Master/texmf-dist/doc/generic/pst-bspline/pst-bspline-doc.tex @@ -3,7 +3,7 @@ \usepackage{amsthm} \usepackage{graphicx} \usepackage{pstricks} -\usepackage{multido,pst-bspline,pstricks-add} +\usepackage{multido,pst-node,pst-bspline,pstricks-add} \usepackage{amssymb} \usepackage[parfill]{parskip} \usepackage{hyperref} @@ -35,7 +35,7 @@ The {\tt pst-Bspline} package implements this algorithm as \verb|\psBspline|, wh \noindent \verb|\psBspline(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4)| -\noindent The coordinates are the B-spline control points. Aside from the usual keywords, like {\tt linestyle}, {\tt linecolor} and {\tt arrows}, there is a Boolean keyword {\tt showframe}. The effect of {\tt showframe} is to show the intermediate points and lines in the algorithm described above. +\noindent The coordinates are the B-spline control points. Aside from the usual keywords, like {\tt linestyle}, {\tt linecolor} and {\tt arrows}, there is a Boolean keyword {\tt showframe}. The effect of {\tt showframe=true} is to show the intermediate points and lines in the algorithm described above. There is another optional argument that can be applied if you wish to be able to refer to any of the points constructed in the algorithm. By example, @@ -44,7 +44,7 @@ There is another optional argument that can be applied if you wish to be able to \noindent sets the root of the naming scheme to {\tt B}, the effect of which is that the B-spline control points will be nodes of type \verb|\pnode| with names {\tt B0}, {\tt B1} and so on, the other points being similarly named {\tt BL0}, {\tt BL1}, ... , {\tt BR0}, {\tt BR1}, ... , {\tt BS0}, {\tt BS1}, ... . For example, to draw a line between {\tt BL1} and {\tt BS4}, just use \verb|\ncline(BL1)(BS4)|. -The algorithm is implemented entirely in PSTricks code, without any PostScript programming at all, depending for the most part on the flexibility of nodes, and above all the \verb|\multido| macro, which allows one to construct with relative ease items that look and feel like arrays. Use of \verb|\SpecialCoor| is essential. +The algorithm is implemented entirely in PSTricks code with PostScript specials, but no PostScript header file, depending for the most part on the flexibility of nodes, and above all the \verb|\multido| macro, which allows one to construct with relative ease items that look and feel like arrays. Use of \verb|\SpecialCoor| is essential. There is a closely related macro \verb|\psBsplineE| which removes the first and last B\'ezier segments, much as \verb|\psecurve| acts in relation to \verb|\pscurve|, allowing one one to draw B-splines with non-zero curvature at the endpoints. @@ -56,8 +56,8 @@ There is a closely related macro \verb|\psBsplineE| which removes the first and \begin{document} \SpecialCoor % essential for pst-bspline package \psset{unit=.6in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\psBspline[showframe]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\psBspline[showframe=true]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) \multido{\i=0+1}{5}{\uput[20](B\i){B\i}} \uput[90](B5){B5} \uput[90](BS1){S1} @@ -73,8 +73,8 @@ There is a closely related macro \verb|\psBsplineE| which removes the first and \vspace{1pc} \begin{center} \psset{unit=.6in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\psBspline[showframe]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\psBspline[showframe=true]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) \multido{\i=0+1}{5}{\uput[20](B\i){B\i}} \uput[90](B5){B5} \uput[90](BS1){S1} @@ -94,8 +94,8 @@ There is a closely related macro \verb|\psBsplineE| which removes the first and \begin{document} \SpecialCoor % essential for pst-bspline package \psset{unit=.6in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\psBsplineE[showframe]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\psBsplineE[showframe=true]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) \multido{\i=0+1}{5}{\uput[20](B\i){B\i}} \uput[90](B5){B5} \uput[90](BS1){S1} @@ -111,8 +111,8 @@ There is a closely related macro \verb|\psBsplineE| which removes the first and \vspace{1pc} \begin{center} \psset{unit=.6in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\psBsplineE[showframe]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\psBsplineE[showframe=true]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) \multido{\i=0+1}{5}{\uput[20](B\i){B\i}} \uput[90](B5){B5} \uput[90](BS1){S1} @@ -146,8 +146,8 @@ The macro in this case is \verb|\psBsplineC|, where the {\tt C} stands for Close \begin{document} \SpecialCoor % essential for pst-bspline package \psset{unit=.6in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\psBsplineC[showframe]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\psBsplineC[showframe=true]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) \multido{\i=0+1}{5}{\uput[20](B\i){B\i}} \uput[90](B5){B5}\uput[90](BS1){S1} \uput[90](BS2){S2}\uput[180](BS3){S3} @@ -160,8 +160,8 @@ The macro in this case is \verb|\psBsplineC|, where the {\tt C} stands for Close \vspace{1pc} \begin{center} \psset{unit=.6in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\psBsplineC[showframe]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\psBsplineC[showframe=true]{B}(.5,.5)(2,0)(5,2)(6,4)(4,5)(2,4) \multido{\i=0+1}{5}{\uput[20](B\i){B\i}} \uput[90](B5){B5} \uput[90](BS1){S1} @@ -205,7 +205,7 @@ for the $B_k$. In matrix form, this becomes the tridiagonal system &1&4&1\\ &&\cdots&&1\\ &&&1&4\end{pmatrix} -\begin{pmatrix}B_1\\B_2\\B_3\\ \cdots\\ B_{n-1}\end{pmatrix}=§ +\begin{pmatrix}B_1\\B_2\\B_3\\ \cdots\\ B_{n-1}\end{pmatrix}=ß \begin{pmatrix}6S_1-S_0\\6S_2\\6S_3\\ \cdots\\6S_{n-1}-S_{n}\end{pmatrix} \] The LU decomposition of the tridiagonal matrix may be seen to take the form @@ -262,7 +262,7 @@ for the $B_k$, $1\le k\le n$. In matrix form, this becomes the system &1&4&1\\ &&\cdots&&1\\ 1&&&1&4\end{pmatrix} -\begin{pmatrix}B_1\\B_2\\B_3\\ \cdots\\ B_{n}\end{pmatrix}=§ +\begin{pmatrix}B_1\\B_2\\B_3\\ \cdots\\ B_{n}\end{pmatrix}=ß \begin{pmatrix}6S_1\\6S_2\\6S_3\\ \cdots\\6S_{n}\end{pmatrix} \] Let $(x_k,y_k)=6S_k$. We perform Gaussian elimination on the matrix @@ -336,10 +336,10 @@ The following example illustrates that there is a difference between \verb|\pscc \usepackage{pstricks} \usepackage{pst-bspline,pstricks-add} \begin{document} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\pnodes{P}(0,1)(2,0)(5,2)(6,4)(4,5)(2,4) -\psBsplineInterpC{P}{5} -\psBsplineNodesC*[linecolor=gray!40]{PB}{5} +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\pnodes{P}(0,1)(2,0)(5,2)(6,4)(4,5)(2,4)% +\psBsplineInterpC{P}{5}% +\psBsplineNodesC*[linecolor=gray!40]{PB}{5}% \psccurve[linecolor=red,showpoints=true](0,1)(2,0)(5,2)(6,4)(4,5)(2,4) \end{pspicture} \end{document} @@ -349,15 +349,33 @@ The following example illustrates that there is a difference between \verb|\pscc \begin{center} Slight difference between psccurve and B-spline interpolation\\ \vspace*{2pc} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) -\pnodes{P}(0,1)(2,0)(5,2)(6,4)(4,5)(2,4) -\psBsplineInterpC{P}{5} -\psBsplineNodesC*[linecolor=gray!40]{PB}{5} +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\pnodes{P}(0,1)(2,0)(5,2)(6,4)(4,5)(2,4)% +\psBsplineInterpC{P}{5}% +\psBsplineNodesC*[linecolor=gray!40]{PB}{5}% \psccurve[linecolor=red,showpoints=true](0,1)(2,0)(5,2)(6,4)(4,5)(2,4) \end{pspicture} \end{center} +A B-spline curve can in many cases provide a good function interpolation mechanism, but the result is not guaranteed to be the graph of a function. +\begin{verbatim} +\begin{center} +\begin{pspicture}[showgrid=true](-.5,-.5)(6,4) +\psdots(0,3.5)(1,.5)(3,2.5)(4,0)(5,2)(6,.5) +\psaxes(0,0)(-.5,-.5)(6,4) +\psbspline(0,3.5)(1,.5)(3,2.5)(4,0)(5,2)(6,.5) +\end{pspicture} +\end{center} +\end{verbatim} + +\begin{center} +\begin{pspicture}(-.5,-.5)(6,4) +\psdots(0,3.5)(1,.5)(3,2.5)(4,0)(5,2)(6,.5) +\psbspline(0,3.5)(1,.5)(3,2.5)(4,0)(5,2)(6,.5) +\psaxes(0,0)(-.5,-.5)(6,4) +\end{pspicture} +\end{center} +\vspace{12pt} -\newpage \begin{verbatim} \documentclass{article} \usepackage{graphicx} @@ -365,7 +383,7 @@ Slight difference between psccurve and B-spline interpolation\\ \usepackage{pst-bspline,pstricks-add} \begin{document} \psset{unit=.25in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) \pnodes{P}(0,1)(2,0)(5,2)(6,4)(4,5)(2,4) \pnode(3,3){C} \multido{\ra=0+.05,\rb=1+.05,\i=30+1}{40}{% @@ -380,7 +398,7 @@ Slight difference between psccurve and B-spline interpolation\\ \vspace{1pc} \begin{center} \psset{unit=.25in} -\begin{pspicture}[showgrid](-.5,-.5)(6,5) +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) \pnodes{P}(0,1)(2,0)(5,2)(6,4)(4,5)(2,4) \pnode(3,3){C} \multido{\ra=0+.05,\rb=1+.05,\i=30+1}{40}{% @@ -390,4 +408,62 @@ Slight difference between psccurve and B-spline interpolation\\ ([nodesep=\ra]{C}P4)([nodesep=\ra]{C}P5)} \end{pspicture} \end{center} +\section{Thick B-spline curves} +Inspired by the package {\tt pst-thick}, we provide a similar option for curves generated as B-spline interpolations. The new macro that accomplishes this is +\begin{verbatim} +\thickBspline#1#2#3#4 +%#1=root | #2=nsegments | #3=thickness | #4=items to clip +\end{verbatim} + which expects the following data. + \begin{itemize} +\item +A node sequence. This can be constructed with a command like +\begin{verbatim} +\pnodes{S}(0,0)(5,1)(4,4)(1,3)% +\end{verbatim} +which declares nodes S0..S3, and sets the macro \verb|\Snodecount| to 3. +\item An interpolation command, such as +\begin{verbatim} +\psBsplineInterp{S}{\Snodecount}% +\end{verbatim} +which creates a framework of B-spline control points {\tt SB0..SB3}. +\item Create the interpolating curve and the B\'ezier control points for its components, with names like {\tt SBR0..SBR2,SBL1..SBL3} etc, using +\begin{verbatim} +\psBsplineNodes[linestyle=none]{SB}{\Snodecount}% +\end{verbatim} +(The {\tt [linestyle=none]} may be omitted if you want the curve to show.) +\item Create a clipping path of specified thickness around the interpolating curve and place graphics to be clipped: +\begin{verbatim} +\thickBspline[plotpoints=50,linestyle=none]{S}{3}{20pt}{\psline[linecolor=red,linestyle=solid](0,0)(6,6)}% +\end{verbatim} +(The {\tt [linestyle=none]} controls whether the clipping path is rendered, and {\tt plotpoints} controls the number of subdivisions of each B\'ezier component. Its default value is 50.) +\end{itemize} +The clipping path is drawn by default positively oriented so that objects are clipped to its interior. By specifying the keyword {\tt reverseclip}, the clipping path will be reversed so that objects are clipped to the exterior. + +\begin{verbatim} +\documentclass{article} +\usepackage{pstricks} +\usepackage{pst-bspline,pstricks-add} +\begin{document} +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\pnodes{S}(1,0)(5,1)(4,4)(1,3)% +\psdots(1,0)(5,1)(4,4)(1,3)% +\psBsplineInterp{S}{\Snodecount}% +\psBsplineNodes[linestyle=none]{SB}{\Snodecount}% +\thickBspline[plotpoints=50,linestyle=none]{S}{3}{20pt}% +{\psframe[fillstyle=crosshatch](-1,-1)(6,6)}% +\end{pspicture} +\end{document} +\end{verbatim} + +\begin{center} +\begin{pspicture}[showgrid=true](-.5,-.5)(6,5) +\pnodes{S}(1,0)(5,1)(4,4)(1,3)% +\psdots(1,0)(5,1)(4,4)(1,3)% +\psBsplineInterp{S}{\Snodecount}% +\psBsplineNodes[linestyle=none]{SB}{\Snodecount}% +\thickBspline[plotpoints=50,linestyle=none]{S}{\Snodecount}{20pt}{\psframe[fillstyle=crosshatch](-1,-1)(6,6)}% +\end{pspicture} +\end{center} + \end{document}
\ No newline at end of file |