diff options
author | Karl Berry <karl@freefriends.org> | 2016-08-21 21:40:48 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-08-21 21:40:48 +0000 |
commit | 61f034941d65cf39d29d8b935d96af5bd35d72b5 (patch) | |
tree | 624754fa8e4b462f03d7502ee4cca44c0e1c889f /Master/texmf-dist/doc/generic | |
parent | 9c9dda62402e3156b09391a12663a213ae391ff1 (diff) |
pst-bezier (21aug16)
git-svn-id: svn://tug.org/texlive/trunk@41899 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic')
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bezier/Changes | 5 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bezier/README.md (renamed from Master/texmf-dist/doc/generic/pst-bezier/README) | 9 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.bib | 214 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.pdf | bin | 102996 -> 1163955 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.tex | 457 |
5 files changed, 553 insertions, 132 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-bezier/Changes b/Master/texmf-dist/doc/generic/pst-bezier/Changes index 66485d07ff9..149148692d8 100644 --- a/Master/texmf-dist/doc/generic/pst-bezier/Changes +++ b/Master/texmf-dist/doc/generic/pst-bezier/Changes @@ -1,10 +1,15 @@ -- pst-bezier.tex --- +0.02 2016-08-19 added macro \psRQBCmasse for a Bezier curve, + definied by three weighted points 0.01 2009-01-29 first CTAN version -- pst-bezier.sty --- +0.02 2016-08-19 - load expl3 for floating point operations + - define \pscalculation 0.01 2009-01-29 first CTAN version -- pst-bezier.pro --- +0.02 2016-08-19 added function tx@RQBCmasse for a Bezier curve 0.01 2009-01-29 first CTAN version diff --git a/Master/texmf-dist/doc/generic/pst-bezier/README b/Master/texmf-dist/doc/generic/pst-bezier/README.md index c8f371e9078..23a4246c098 100644 --- a/Master/texmf-dist/doc/generic/pst-bezier/README +++ b/Master/texmf-dist/doc/generic/pst-bezier/README.md @@ -1,9 +1,9 @@ Save the files pst-bezier.sty|tex in a directory, which is part of your local TeX tree. pst-bezier.pro should be saved in ../texmf/dvips/pstricks/ Then do not forget to run texhash to update this tree. -pst-bezier needs pst-plot and pst-tricks, which should be part of your -local TeX installation, otherwise get it from a CTAN server, f.ex. -http://www.CTAN.org +pst-bezier needs pst-plot and pstricks, which should be part of your +local TeX installation, otherwise get it from a CTAN server +http://mirror.CTAN.org Save the files @@ -37,6 +37,3 @@ latex on the documentation file. The intermediate DVI file works only with viewers which can interprete the embedded PostScript code. - -For another PDF output read the Introduction from -the documentation. diff --git a/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.bib b/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.bib index d4c75592e2a..4493f87ffce 100644 --- a/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.bib +++ b/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.bib @@ -1,110 +1,148 @@ -@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} } +@STRING{tugboat = {TUGboat} } +@STRING{beiprogramm = {{\TeX}-Beiprogramm} } +@STRING{bretter = {Bretter, die die Welt bedeuten} } +@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} } +@STRING{editorial = {Editorial} } +@STRING{fremdebuehne = {Von fremden B{\"u}hnen} } +@STRING{fundus = {Aus dem Fundus} } +@STRING{hinterbuehne = {Hinter der B{\"u}hne} } +@STRING{leserbrief = {Leserbrief(e)} } +@STRING{magazin = {Magazin} } +@STRING{rezension = {Rezensionen} } +@STRING{schonimmer = {Was Sie schon immer {\"u}ber {\TeX} wissen wollten \dots} } +@STRING{theaterkasse = {Von der Theaterkasse} } +@STRING{theatertage = {{\TeX}-Theatertage} } -@Book{PostScript, - Author = {Kollock, Nikolai G.}, - Title = {PostScript richtig eingesetzt: vom Konzept zum - praktischen Einsatz}, - Publisher = {IWT}, - Address = {Vaterstetten}, - year = 1989, +@Book{PSTricks2, + author = {Herbert Vo\ss}, + title = {{\PST} {G}rafik f\"ur \TeX{} und \LaTeX}, + edition = {7}, + publisher = {DANTE -- Lehmanns}, + year = {2016}, + address = {Heidelberg/Berlin} } -@Manual{pstricks, - Title = {PSTricks - {\PS} macros for Generic TeX}, - Author = {Timothy Van Zandt}, - Organization = {}, - Address = {\url{http://www.tug.org/application/PSTricks}}, - Note = {}, - year = 1993, +@Book{PSTricks-E, + author = {Herbert Vo\ss}, + title = {{\PST} {G}raphics for \LaTeX}, + edition = {1}, + publisher = {UIT}, + year = {2011}, + address = {Cambridge} } +@Book{companion04, + author = {Frank Mittelbach and Michel Goosens et al}, + title = {The {\LaTeX} {C}ompanion}, + edition = {second}, + publisher = {Addison-Wesley Publishing Company}, + year = {2004}, + address = {Boston} +} -@Manual{pdftricks, - Title = {PSTricks Support for pdf}, - Author = {Herbert Voss}, - Organization = {}, - Address = {\url{http://PSTricks.de/pdf/pdfoutput.phtml}}, - Note = {}, - year = 2002, +@Book{unbound, + author = {Alan Hoenig}, + title = {\TeX{} {U}nbound: \LaTeX{} \& \TeX{} {S}trategies, {F}onts, {G}raphics, and {M}ore}, + publisher = {Oxford University Press}, + year = {1998}, + address = {London} } -@Manual{miwi, - Title = {References for \TeX{} and Friends}, - Author = {Michael Wiedmann and Peter Karp}, - Organization = {}, - Address = {\url{http://www.miwie.org/tex-refs/}}, - Note = {}, - year = 2003, +@Book{tlgc2, + author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Denis Roegel and Herbert Vo{\ss}}, + title = {The {\LaTeX} {G}raphics {C}ompanion}, + publisher = {{Addison-Wesley Publishing Company}}, + edition = 2, + year = {2007}, + address = {Reading, Mass.} } +@Article{girou:01:, + author = {Denis Girou}, + title = {Pr\'esentation de {PST}ricks}, + journal = {Cahier {GUT}enberg}, + year = 1994, + volume = {16}, + month = apr, + pages = {21--70} +} -@Article{dtk02.2:jackson.voss:plot-funktionen, - author = {Laura E. Jackson and Herbert Vo{\ss}}, - title = {Die {P}lot-{F}unktionen von {\texttt{pst-plot}}}, - journal = dtk, - year = 2002, - volume = {2/02}, - altvolume = 2, - altnumber = 14, - month = jun, - pages = {27--34}, - annote = bretter, - keywords = {}, - abstract = { Im letzten Heft wurden die mathematischen Funktionen von - \PS~im Zusammenhang mit dem {\LaTeX}-Paket - \texttt{pst-plot} zum Zeichnen von Funktionen beschrieben - und durch Beispiele erl{\"a}utert. In diesem Teil werden - die bislang nur erw{\"a}hnten Plot-Funktionen f{\"u}r - externe Daten behandelt. } +@Article{girou:02:, + author = {{Timothy Van} Zandt and Denis Girou}, + title = {Inside {PST}ricks}, + journal = TUGboat, + year = 1994, + volume = {15}, + month = sep, + pages = {239--246} } -@Article{dtk02.1:voss:mathematischen, - author = {Herbert Vo{\ss}}, - title = {Die mathematischen {F}unktionen von {P}ostscript}, - journal = dtk, - year = 2002, - volume = {1/02}, - altvolume = 1, - altnumber = 14, - month = mar, - pages = {40-47}, - annote = bretter, - keywords = {}, - abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im - Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es - darum geht zu beurteilen, was es denn nun im eigentlichen - Sinne ist. Au{\ss}erdem wird h{\"a}ufig vergessen, dass - sich mit den \PS-Funktionen viele Dinge erledigen lassen, - bei denen sonst auf externe Programme zur{\"u}ckgegriffen - wird. Dies wird im Folgenden f{\"u}r die mathematischen - Funktionen im Zusammenhang mit dem Paket \texttt{pst-plot} - gezeigt. } +@Book{PostScript, + Author = {Kollock, Nikolai G.}, + Title = {PostScript richtig eingesetzt: vom {K}onzept zum + praktischen {E}insatz}, + Publisher = {IWT}, + Address = {Vaterstetten}, + year = 1989, } +@online{pstricks, + Title = {PSTricks - {\PS} macros for generic {\TeX}}, + Author = {{Timothy Van} Zandt}, + Organization = {\TeX\ Users Group}, + url = {http://www.tug.org/application/PSTricks}, + urldate={2016-08-21}, + year = 1993 +} -@Book{companion, - author = {Michel Goosens and Frank Mittelbach and Serbastian Rahtz and Denis Roegel and Herbert Vo\ss}, - title = {The {\LaTeX} {G}raphics {C}ompanion}, - publisher = {{Addison-Wesley Publishing Company}}, - year = {2007}, - edition = {2nd}, - address = {Reading, Mass.} +@ctan{pst-plot, + Title = {\texttt{pst-plot}: Plotting two dimensional functions and data}, + Author = {{Timothy Van} Zandt and Herbert Voß}, + Organization = {CTAN}, + url = {graphics/pstricks/generic/pst-plot.tex}, + year = 2016 } -@Book{PSTricks2, - author = {Herbert Vo\ss}, - title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX}, - edition = {5.}, - publisher = {DANTE/Lehmanns Media}, - year = {2008}, - address = {Heidelberg/Berlin} +@ctan{multido, + Title = {\texttt{multido.tex} - a loop macro, that supports fixed-point addition}, + Author = {{Timothy Van} Zandt}, + Organization = {CTAN}, + url = {/graphics/pstricks/generic/multido.tex}, + year = 1997 } -@Book{voss:math, - author = {Herbert Vo\ss}, - title = {Mathematik mit \LaTeX}, - publisher = {{DANTE/Lehmanns Media}}, - year = {2009}, - address = {Heidelberg/Berlin} +@inproceedings{GB16, + TITLE = {Mass points, {B}\'ezier curves and conics: a survey}, + AUTHOR = {Lionel Garnier and Jean-Paul Bécar}, + url = {http://ufrsciencestech.u-bourgogne.fr/$\sim$garnier/publications/adg2016/}, + BOOKTITLE = {Eleventh International Workshop on Automated Deduction in Geometry}, + ADDRESS = {Strasbourg, France}, + SERIES = {Proceedings of ADG 2016}, + PAGES = {97--116}, + date = {2016-06}, + urldate={2016-08-20}, +} + +@online{gb16a, + author={Lionel Garnier}, + title={Courbes de Bézier et coniques}, + url={http://ufrsciencestech.u-bourgogne.fr/~garnier/Migs/03_CourbesBezierPointsMassiquesEleve.pdf}, + urldate={2016-08-20}, +} +@online{gb16b, + author={Lionel Garnier and Jean-Paul Bécar and Lucie Drouton}, + title={Surfaces canal et courbes de Bézier rationnelles quadratiques}, + journal={Journées du Groupe de Travail en Modélisation Géométrique 2016}, + address={Dijon}, + url={http://ufrsciencestech.u-bourgogne.fr/~garnier/publications/hippocampe/64_GTMG2016_courbesBezierSurfacesCanal.pdf}, + urldate={2016-08-20}, +} + +@PhdThesis{Bec97, +author = {Jean-Paul Bécar}, +title = {Forme ({B}{R}) des coniques et de leurs faisceaux}, +school = {Universit\'e de Valenciennes et de Hainaut-Cambr\'esis, LIMAV}, +date = {1997-12-12}, +address= {Valenciennes, France}, } diff --git a/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.pdf b/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.pdf Binary files differindex 79ca40cd86b..2bfbd642d15 100644 --- a/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.pdf +++ b/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.pdf diff --git a/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.tex b/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.tex index 3be402bebd2..95fa8782722 100644 --- a/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.tex +++ b/Master/texmf-dist/doc/generic/pst-bezier/pst-bezier-doc.tex @@ -1,20 +1,34 @@ -%% $Id: pst-bezier-doc.tex 86 2009-01-29 10:34:00Z herbert $ -\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings - headexclude,footexclude,oneside]{pst-doc} +%% $Id: pst-bezier-doc.tex 134 2009-09-27 12:28:50Z herbert $ +\documentclass[11pt,english,bibliography=totoc,parskip=false,smallheadings, + oneside]{pst-doc} \usepackage[utf8]{inputenc} -\usepackage{pst-bezier} \usepackage{esvect} \let\vec\vv +\usepackage{animate} +\usepackage{pst-bezier} +\usepackage{bbold} +\addbibresource{pst-bezier-doc.bib} \let\pstBezierFV\fileversion \lstset{pos=l,wide=false,language=PSTricks, morekeywords={multidipole,parallel},basicstyle=\footnotesize\ttfamily} +\definecolor{navy}{rgb}{0 0 0.5} % +\def\bgImage{\pspicture[showgrid](0,1)(5,6) +\psset{showpoints} +\psbcurve[linecolor=blue,linewidth=0.01](1,1)% + (2,2)(3,1)(4,2)(4,4)(3,5)% + (2,4)(1,5) +\psbcurve(1,1)(2,2)(3,1)(4,2)% + T{0.5}(4,4)(3,5)(2,4)(1,5) +\endpspicture} +\newtheorem{definition}{Definition} +\def\dy{\displaystyle} \begin{document} \title{\texttt{pst-bezier}} \subtitle{A PSTricks package for drawing Bezier curves; v.\pstBezierFV} -\author{Tobias Nähring \\Herbert Vo\ss} +\author{Jean-Paul Bécar\\Lionel Garnier\\Tobias Nähring \\Manuel Luque\\Herbert Voß} \docauthor{} \date{\today} \maketitle @@ -37,7 +51,7 @@ control points without simultaneously changing the interpolated points. Note that some control is possible via the \Lkeyword{curvature} option. -The \Lcs{psbezier} macro gives full control over the +The \Lcs{psbcurve} macro gives full control over the interpolation points and the control points of one Bezier polynominal of degree three (two interpolated points and two control points). @@ -47,7 +61,7 @@ Thanks to: \\ Jean-C\^ome Charpentier. \end{abstract} -%% Author: Tobias N"ahring +\clearpage \section{Introduction} @@ -95,7 +109,7 @@ correctly installed the package: \usepackage{pstricks} \usepackage{pst-bezier} \begin{document} - \begin{pspicture}(6,4) + \begin{pspicture}(0,-0.4)(6,2) \psbcurve(1,2)(5,2) % Draw just one straight line. \end{pspicture} \end{document} @@ -107,8 +121,8 @@ In the most simple form you can specify any number of interpolation points as the argument of \Lcs{psbcurve}. \begin{LTXexample} -\begin{pspicture}[showgrid=true](5,3) - \psbcurve(1,1)(2,2)(3,1)(4,2) +\begin{pspicture}[showgrid](0,-0.4)(5,3) + \psbcurve[showpoints](1,1)(2,2)(3,1)(4,2) \end{pspicture} \end{LTXexample} @@ -116,8 +130,8 @@ As usual, options can be specified within brackets. \begin{LTXexample} -\begin{pspicture}[showgrid=true](5,3) - \psbcurve[showpoints=true](1,1)(2,2)(3,1)(4,2) +\begin{pspicture}[showgrid](0,-0.4)(5,3) + \psbcurve[showpoints](1,1)(2,2)(3,1)(4,2) \end{pspicture} \end{LTXexample} @@ -129,8 +143,8 @@ time labels are added to the points (this is just for the following description, it is not a feature of \Lcs{psbcurve}). \begin{LTXexample} -\begin{pspicture}[showgrid=true](5,3) - \psbcurve[showpoints=true](1,1)(2,2)(3,1)(4,2) +\begin{pspicture}[showgrid](0,-0.4)(5,3) + \psbcurve[showpoints](1,1)(2,2)(3,1)(4,2) \uput[-90](1,1){$\vec{p}_{0}=\vec{l}_{1}$} \uput[90](1.5,2){$\vec{r}_{1}$} \uput[90](2,2){$\vec{p}_{1}$} @@ -181,8 +195,8 @@ background in {\color{blue}blue} color. \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve(1,1)l(2,1)(2,2)(3,1)r(4,1)(4,2) @@ -192,8 +206,8 @@ background in {\color{blue}blue} color. \end{LTXexample} \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve(1,1)(2,2)l(2,1)(3,1)(4,2) @@ -208,7 +222,7 @@ interpolation point. \begin{LTXexample} -\pspicture(5,3) +\pspicture(0,-0.4)(5,3) \psbcurve(1,1)(2,2)l(2,1)(3,1)(4,2) \endpspicture \end{LTXexample} @@ -220,10 +234,10 @@ interpolation point $\vec{p}_{k-1}$. In that way you get a smooth joint as demonstrated in the next example. \begin{LTXexample} -\pspicture[showgrid=true](5,3) +\pspicture[showgrid](0,-0.4)(5,3) \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) -\psset{showpoints=true} +\psset{showpoints} \psbcurve(1,1)(2,2)L(2,1)(3,1)(4,2) \uput[-90](2,1){$\vec{l}_{2}$} \uput[0](2,2){$\vec{p}_{1}$} @@ -236,8 +250,8 @@ automatically computed control points of the current Bezier spline. \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve(1,1)(2,2)t{0.5}(3,1)(4,2) @@ -252,8 +266,8 @@ point you can use the \Lnotation{tl}\Largb{t} or \Lnotation{tr}\Largb{t} modifie respectively, as demonstrated in the following two examples. \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve(1,1)% @@ -263,8 +277,8 @@ respectively, as demonstrated in the following two examples. \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve(1,1)(2,2)tr{0.5}(3,1)(4,2) @@ -278,8 +292,8 @@ of the modifier. In the next example a negative tension value leads to a rather surprising effect. \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve(1,1)(2,2)ts{-0.5}(3,1)(4,2) @@ -291,8 +305,8 @@ The default value of the tension can be set with the option \begin{LTXexample} -\pspicture[showgrid=true](5,3) -\psset{showpoints=true} +\pspicture[showgrid](0,-0.4)(5,3) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2) \psbcurve[bcurveTension=0.5](1,1)% @@ -307,8 +321,8 @@ middle of a \Lcs{psbcurve}. Just use the modifier \Lnotation{T}\Largb{t} for that purpose as shown in the following example. \begin{LTXexample} -\pspicture[showgrid=true](5,6) -\psset{showpoints=true} +\pspicture[showgrid](0,0.6)(5,6) +\psset{showpoints} \psbcurve[linecolor=blue,linewidth=0.01](1,1)% (2,2)(3,1)(4,2)(4,4)(3,5)% (2,4)(1,5) @@ -324,7 +338,7 @@ The \texttt{linestyle} and \texttt{fillstyle} options (and several more) are respected by \Lcs{psbcurve} as the following example shows. \begin{LTXexample} -\pspicture[showgrid=true](5,3) +\pspicture[showgrid](0,-0.4)(5,3) \psbcurve[linestyle=dashed, linewidth=3pt, dash=0.5 0.2, @@ -333,7 +347,7 @@ more) are respected by \Lcs{psbcurve} as the following example shows. \endpspicture \end{LTXexample} -\section{Things that do not work (`known bugs')} +\subsection{Things that do not work (`known bugs')} As already mentioned this project is something like an experiment. So, there are many things that do not work. @@ -342,10 +356,375 @@ there are many things that do not work. \item The control points are computed in a rather crude way (see above). The \Lkeyword{curvature} option is not recognised. \item If \Lkeyword{fillstyle} is set to \Lkeyword{solid} and - \Lkeyset{showpoints=true} then the fill color covers the interpolation and control points. + \Lkeyword{showpoints} then the fill color covers the interpolation and control points. \item arrow heads do not work. \end{itemize} +\clearpage + +\section{Bezier curve with weighted points} + +\subsection{Mathemathical background} + +A mass point is a weighted point $\left(P;\omega\right)$ with $\omega \neq 0$ or a vector $\left(\overrightarrow{P};0\right)$ with a weight equal to $0$. A generic mass point is noted $\left(P;\omega\right)$. + +Using the quadratic Bernstein polynomials, a rational quadratic B\'ezier curve having three control +mass points $\left(P_{0};\omega_{0}\right)$, $\left(P_{1};\omega_{1}\right)$ +and $\left(P_{2};\omega_{2}\right)$, is defined as follow: + +\begin{definition}\label{fdef::DefRQBC_Fiorot}: Rational quadratic B\'ezier curve (BR curve) + +Let $\omega_{0}$, $\omega_{1}$ and $\omega_{2}$ be three real numbers. +Let $\left(P_{0};\omega_{0}\right)$, $\left(P_{1};\omega_{1}\right)$ +and $\left(P_{2};\omega_{2}\right)$ be three mass points, these points are not collinear. + +Define two sets $I = \left \{ i | \omega_i \neq 0 \right \}$ and +$J = \left \{ i | \omega_i = 0 \right \}$ + + +Define the function $\omega_{f}$ from $\left[0;1\right] $ to $\mathbb{R} $ as follows + +\begin{equation} +%\begin{array}{cccc} +%\omega_{f}: & \left[0;1\right] & \longrightarrow & \mathbb{R} \\ +%& t & \longmapsto &\omega_{f}\left(t\right)=\dy\sum_{i\in I}\omega_{i}\times B_{i}\left(t\right) +%\end{array} +\omega_{f}\left(t\right)=\dy\sum_{i\in I}\omega_{i}\times B_{i}\left(t\right) +\label{eq:DenominateurCbreBezier} +\end{equation} + +A mass point $\left(M;\omega\right)$ or $\left(\overrightarrow{u};0\right)$ +belongs to the quadratic B\'ezier curve defined by the three control +mass points $\left(P_{0};\omega_{0}\right)$, $\left(P_{1};\omega_{1}\right)$ +and $\left(P_{2};\omega_{2}\right)$, +if there is a real $t_{0}$ in $\left[0;1\right]$ such that: + +\begin{itemize} +\item [$\bullet$] if $\omega_{f}\left(t_{0}\right)\neq0$ then we have + +\hspace*{-0.75cm}\begin{minipage}{1.0\textwidth} +\begin{equation} +\overrightarrow{OM} = \dy \frac{1}{\omega_{f}\left(t_{0}\right)}\left(\dy \sum_{i\in I} \dy \omega_{i} B_{i}\left(t_{0}\right) + \overrightarrow{OP_{i}} \right) ++\vspace{0.2cm}\dy \frac{1}{\omega_{f}\left(t_{0}\right)}\left( \sum_{i\in J} B_{i}\left(t_{0}\right) \overrightarrow{P_{i}}\right) +\label{eq:DefRQBC_FiorotPoint} +\end{equation} +\end{minipage} + +\item [$\bullet$] if $\omega_{f}\left(t_{0}\right)=0$ then we have +\begin{equation} +\overrightarrow{u}=\sum_{i\in I}\omega_{i}B_{i}\left(t_{0}\right)\overrightarrow{OP_{i}}+\sum_{i\in J}B_{i}\left(t_{0}\right)\overrightarrow{P_{i}}\label{eq:DefRQBC_FiorotVecteur} +\end{equation} + +\end{itemize} +\hrulefill{}\end{definition} + +The reduced discriminant of the denominator $\omega_{f}\left(t_{0}\right)$ is +\begin{equation} +\Delta'=\omega_{1}^{2}-\omega_{2} \omega_{0}\label{eq:DiscrimantReduitCBRQnonStandard} +\end{equation} +and we can state the following fundamental result: +\begin{itemize} +\item[$\star$] +if $\omega_{1}^{2}-\omega_{2} \omega_{0}=0$ then the + denominator has one and only one root, the curve is a parabolic arc; +\item[$\star$] + if $\omega_{1}^{2}-\omega_{2} \omega_{0}>0$ then the + denominator has two distinct roots, the curve is a hyperbolic arc; +\item[$\star$] + if $\omega_{1}^{2}-\omega_{2} \omega_{0}<0$ then the + denominator does not vanish, the curve is an elliptical arc. +\end{itemize} + +We can note w.l.o.g.\footnote{We can permute the role of $P_0$ and $P_2$} that one of the weights can be equal to~$1$. If $\omega_0$ is not equal to $0$, we choose $\omega_0=1$, else, we choose $\omega_1=1$, and we can characterise the type of the conic from the mass points of the BR curve, see Table~\ref{tab::TypeConicEtcbeBr}. + +\begin{table}[!h] +\begin{center} +\begin{tabular}{|c||c|c|c|}\hline +Conic & Three weighted points & Points and vectors \\ \hline \hline +Parabola & $\left(P_{0};1\right)$, $\left(P_{1};\omega\right)$ + $\left(P_{2};\omega^{2}\right)$ & $\left(P_{0};1\right)$, $\left(\overrightarrow{P_{1}};0\right)^{\mathstrut^{\mathstrut}}_{\mathstrut_{\mathstrut}}$ $\left(\overrightarrow{P_{2}};0\right)$\\ \hline \hline + Ellipse & $\left(P_{0};1\right)$, $\left(P_{1};\omega_{1}\right)$, $\left(P_{2};\omega_{2}\right)$, $ \omega_{2}>\omega_{1}^{2} $ & $\left(P_{0};1\right)$, $\left(\overrightarrow{P_{1}};0\right)^{\mathstrut^{\mathstrut}}_{\mathstrut_{\mathstrut}}$ $\left(P_{2};1\right)$ \\ \hline \hline + Hyperbola & $\left(P_{0};1\right)$, $\left(P_{1};\omega_{1}\right)$ $\left(P_{2};\omega_{2}\right)$, $\omega_{2}<\omega_{1}^{2}$ & $\left(P_{0};1\right)$, $\left(\overrightarrow{P_{1}};0\right)^{\mathstrut^{\mathstrut}}_{\mathstrut_{\mathstrut}}$ $\left(P_{2};-1\right)$ \\ \cline{3-3} +& & $\left(\overrightarrow{P_{0}};0\right)$, $\left(P_{1};1\right)$ and $\left(\overrightarrow{P_{2}};0\right)^{\mathstrut^{\mathstrut}}_{\mathstrut_{\mathstrut}}$ \\ \hline \hline +\end{tabular} +\end{center} +\caption{Types of conics defined by B\'ezier curves with control mass points. +\hrulefill{} +\label{tab::TypeConicEtcbeBr}} +\end{table} + +From the access rights used by Unix and Linux, we define a bijection $f$ between $\mathbb{F_2}^3-\left\lbrace\left(0,0,0\right)\right\rbrace$ and the set $\left\lbrace 1 ,2 , 3, 4, 5, 6, 7\right\rbrace$. From $\left(\omega_2,\omega_1,\omega_0\right)$, we define a triplet $\left(b_2,b_1,b_0\right)$ as follow: if $w_i\neq0$ then $b_i=1$ else $b_i=0$. Then +$$f\left(\omega_2,\omega_1,\omega_0\right)= b_2 \times 4+ b_1 \times 2+b_0$$ + +If $f\left(\omega_2,\omega_1,\omega_0\right)=7$, the control points are weighted points: the curve is an elliptical arc, a parabolic arc or a hyperbolic arc. If $\left(\omega_2,\omega_1,\omega_0\right)=\left(1,-1,1\right)$, the parabolic arc is not bounded and for $t=\frac{1}{2}$, the mass point is a direction vector of the parabola axis. If $\left(\omega_2,\omega_1,\omega_0\right)=\left(1,-2,1\right)$, the hyperbolic arc is not bounded and there exists $t$ in $\left]0,1\right[$ such as the mass point is a direction vector of one of the asymptotes of the hyperbola. \\ +If $f\left(\omega_2,\omega_1,\omega_0\right)=1$, the first control point is a weighted point, the others are vectors: the curve is a parabolic arc. The B\'ezier curve is defined by + \begin{equation} +\begin{cases} + \dy \frac{1}{\omega_0\, B_0\left(t_{0}\right)}\left( \omega_{0}\, B_{0}\left(t_{0}\right) + \overrightarrow{OP_{0}} + B_{1}\left(t_{0}\right) \overrightarrow{P_{1}}+ B_{2}\left(t_{0}\right) + \overrightarrow{P_{2}}\right) & \text{ if }t_0\in\left[0,1\right[ \\[1ex] +\overrightarrow{P_2} & \text{ if }t_0=1\\ + \end{cases} +\label{eq:parabola} +\end{equation} +If $f\left(\omega_2,\omega_1,\omega_0\right)=4$, the B\'ezier curve can be defined in the same way.\\ +If $f\left(\omega_2,\omega_1,\omega_0\right)=2$, the intermediate control point is a weighted point, the others are vectors: the curve is a branch of a hyperbola. The B\'ezier curve is defined by + \begin{equation} +\begin{cases} + \dy \frac{1}{\omega_1\, B_1\left(t_{0}\right)}\left( \omega_{1}\, B_{1}\left(t_{0}\right) \overrightarrow{OP_{1}}+ B_{0}\left(t_{0}\right) \overrightarrow{P_{0}}+ B_{2}\left(t_{0}\right) \overrightarrow{P_{2}}\right) & \text{ if }t_0\in\left]0,1\right[ +\\[1ex] +\overrightarrow{P_0} & \text{ if }t_0=0\\[1ex] +\overrightarrow{P_2} & \text{ if }t_0=1 + \end{cases} +\label{eq:branchHyperbola} +\end{equation} +and the centre of the hyperbola is $P_1$. The vector $\overrightarrow{P_0}$ is a direction vector of an asymptote of the hyperbola whereas the vector $\overrightarrow{P_2}$ is a direction vector of the other asymptote.\\ +If $f\left(\omega_2,\omega_1,\omega_0\right)=5$, the intermediate control point is a vector, the others are weighted points: the curve is an elliptical arc. The B\'ezier curve is defined by + \begin{equation} + \dy \frac{1}{\omega_0\, B_0\left(t_{0}\right)+\omega_2\, B_2\left(t_{0}\right)}\left( \omega_{0}\, B_{0}\left(t_{0}\right) \overrightarrow{OP_{0}} + B_{1}\left(t_{0}\right) \overrightarrow{P_{1}}+ \omega_2\, B_{2}\left(t_{0}\right) \overrightarrow{OP_{2}}\right),\;\; t_0\in\left[0,1\right] +\label{eq:ellipse} +\end{equation} +and the tangent vector to the curve at $P_0$ or $P_2$ is parallel to $\overrightarrow{P_1}$. + +\subsection{Syntax} + +\begin{BDef} +\Lcs{psRQBCmasse}\OptArgs\Largr{$x_0,y_0$}\Largr{$x_1,y_1$}\Largr{$x_2,y_2$}\Largb{$w_0,w_1,w_2$} +\end{BDef} + +For the coordinates of the points all possible kinds of coordinates are possible, like polar, PostScript, nodes, \ldots + +\subsection{Three weighted orthogonal points} +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](-6,-6.4)(3,3) +\psclip{\psframe(-6,-6)(3,3)} + \psRQBCmasse[linecolor=blue](2,0)(2,2)(0,2){1,-1,1} + \psRQBCmasse[linecolor=navy,autoTrace](2,0)(2,2)(0,2){1,1,1} + \rput(P0){$P_0$}\uput[r](P1){$P_1$}\uput[r](P2){$P_2$} +\endpsclip% +\end{pspicture} +\end{LTXexample} + + + +\subsection{Half-ellipse} +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](-3,-2.4)(3,2) +\psframe(-3,-2)(3,2) +\psRQBCmasse[linecolor=red,autoTrace](2,0)(0,1)(-2,0){1,0,1} +\uput[r](P0P1){$\overrightarrow{P_1}$} \uput[r](P2){$P_2$} +\rput(P1P2){$\overrightarrow{P_{1}}$} \uput[r](P0){$P_0$} +\psRQBCmasse[linecolor=orange,autoTrace=false](2,0)(0,-1)(-2,0){1,0,1} +\end{pspicture} +\end{LTXexample} + + +\clearpage + +\subsection{Half-parabola} +\subsubsection{Point $P_2$ and two vectors} + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](-3,-3.4)(3,3) +\psclip{\psframe(-3,-3)(3,3)} + \psRQBCmasse[linecolor=red,autoTrace](2,0)(0,1)(-1,0){0,0,1} + \uput[r](P1P2){$\overrightarrow{P_1}$} \uput[r](P2){$P_2$} + \uput[r](P0P2){$\overrightarrow{P_0}$} + \psRQBCmasse[linecolor=orange,autoTrace=false](2,0)(0,-1)(-1,0){0,0,1} + \uput[r](P1P2){$\overrightarrow{P_1}$} \uput[r](P2){$P_2$} + \uput[r](P0P2){$\overrightarrow{P_0}$} +\endpsclip +\end{pspicture} +\end{LTXexample} + +\subsubsection{Point $P_0$ and two vectors} + +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](-3,-3.4)(3,3) +\psclip{\psframe(-3,-3)(3,3)} + \psRQBCmasse[linecolor=red,autoTrace](2,0)(0,1)(-1,0){1,0,0} + \uput[r](P0P1){$\overrightarrow{P_1}$} \uput[r](P0){$P_0$} + \uput[r](P0P2){$\overrightarrow{P_2}$} + \psRQBCmasse[linecolor=orange,autoTrace=false](2,0)(0,-1)(-1,0){1,0,0} +\endpsclip% +\end{pspicture} +\end{LTXexample} + +\clearpage + +\subsection{Branch of a hyperbola} +\begin{LTXexample}[pos=t] +\begin{pspicture}[showgrid](-3,-3.4)(3,3) +\psclip{\psframe(-3,-3)(3,3)} + \psRQBCmasse[linecolor=red,autoTrace](1,1)(0,0)(-1,1){0,1,0} + \uput[r](P0){$\overrightarrow{P_0}$} \uput[r](0,-0.5){$P_1$} + \uput[r](P2){$\overrightarrow{P_2}$} + \psRQBCmasse[linecolor=orange,autoTrace=false](1,1)(0,0)(-1,1){0,-1,0} +\endpsclip% +\end{pspicture} +\end{LTXexample} + +\subsection{Parabola} +\begin{LTXexample}[pos=t] +\psset{unit=0.5} +\begin{pspicture}(-14,-3.4)(15,10) +\psclip{\psframe(-14,-3)(15,10)} + \psRQBCmasse[linecolor=red,autoTrace](0,6)(-13,0)(-1,-1){1,1,1} + \psRQBCmasse[linecolor=orange](0,6)(-13,0)(-1,-1){1,-1,1} + \uput[u](P0){$P_0$}\uput[l](P1){$P_1$}\uput[d](P2){$P_2$} +\endpsclip +\end{pspicture} +\end{LTXexample} + + +\clearpage + +\subsection{Ellipse} +\begin{LTXexample}[pos=t] +\psset{unit=0.5} +\begin{pspicture}(-14,-3.4)(15,10) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] +%\psplotImp[linewidth=0.5pt,linecolor=blue,algebraic](-6,-3)(15,10)% + %{ -0.044*x^2-0.161*y^2 + 0.075*x*y + 0.074*x + 0.797*y + 1} +\psRQBCmasse[nPoints=20,autoTrace,showpoints](0,6)(-13,0)(-1,-1){1,0.5,1} +\psRQBCmasse[nPoints=40,linecolor=red,showpoints](0,6)(-13,0)(-1,-1){1,-0.5,1} +\psaxes[labelFontSize=\scriptscriptstyle]{->}(0,0)(-14,-3)(15,10) +\end{pspicture} +\end{LTXexample} + + +\subsection{Complete circle} +\begin{LTXexample}[pos=t] +\psset{unit=1} +\begin{pspicture}(-4,-4.4)(4,4) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] +\psRQBCmasse[autoTrace](0,3)(3,3)(3,0){1,1,2} +\psRQBCmasse[linecolor=red](0,3)(3,3)(3,0){1,-1,2} +\psaxes[labelFontSize=\scriptscriptstyle]{->}(0,0)(-4,-4)(4,4) +\end{pspicture} +\end{LTXexample} + + +\begin{LTXexample}[pos=t] +\psset{unit=1.5} +\begin{pspicture}(-4,-4.4)(4,4) +\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] +\psRQBCmasse[autoTrace](0,3)(3,0)(0,-3){1,0,1} +\uput[u](-0.25,3){$P_0$} +\uput[u](-0.25,-3.5){$P_2$} +\uput[u](3,3){$\overrightarrow{P_1}$} +\uput[u](3,-3.5){$\overrightarrow{P_1}$} +\uput[u](2.5,0){$\overrightarrow{P_1}$} +\psRQBCmasse[linecolor=red](0,3)(-3,0)(0,-3){1,0,1} +\psaxes[labelFontSize=\scriptscriptstyle,linewidth=0.01]{->}(0,0)(-4,-4)(4,4) +\end{pspicture} +\end{LTXexample} +We get a circle because we have + +\begin{equation} +\left\lbrace +\begin{array}{rcl} +\omega_0\times\omega_2\times P_0 P_2^2 &= &4\times\overrightarrow{P_1}^2 \\[0.2cm] +\overrightarrow{P_0 P_2} &\perp & \overrightarrow{P_1} +\end{array} +\right. +\end{equation} + +\clearpage + + +\subsection{Animations} + +\subsubsection{$w_0=1$, $w_2=1$ and a variable $w_1$} + +With the beginning of $w_1=0$ +the curves are swapped. In the case of Bezier curves $w_1 = 0$ gives only +the $[P_0 P_2]$ segment. Using the mass points, the point $P_1$ no longer exists but we get the vector $\overrightarrow{P_1}$. + + +\bigskip +\begin{center} +\begin{animateinline}[controls,loop,palindrome, + begin={\begin{pspicture}(-4,-4)(10,4)}, + end={\end{pspicture}}]{3}% 3 images/s +\multiframe{40}{rA=2.0+-0.1,rB=-2.0+0.1}{% + \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] + \psclip{\psframe(-4,-4)(10,4)} + \psRQBCmasse[autoTrace,linewidth=1.5pt](0,-1)(1,0)(0,1){1,\rA,1} + \uput[u](P2){$P_2$}\uput[l](P1){$P_1$}\uput[d](P0){$P_0$} + \psRQBCmasse[linecolor=red,linewidth=1.5pt](0,-1)(1,0)(0,1){1,\rB,1} + \psaxes[labelFontSize=\scriptscriptstyle,linewidth=0.01]{->}(0,0)(-4,-4)(10,4) + \rput(8,3){$w_1=\rA$}% + \endpsclip +} +\end{animateinline} +\end{center} + +\begin{lstlisting} +\begin{animateinline}[controls,loop,palindrome, + begin={\begin{pspicture}(-4,-4)(10,4)}, + end={\end{pspicture}}]{3}% 3 images/s +\multiframe{40}{rA=2.0+-0.1,rB=-2.0+0.1}{% + \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] + \psclip{\psframe(-4,-4)(10,4)} + \psRQBCmasse[autoTrace,linewidth=1.5pt](0,-1)(1,0)(0,1){1,\rA,1} + \uput[u](P2){$P_2$}\uput[l](P1){$P_1$}\uput[d](P0){$P_0$} + \psRQBCmasse[linecolor=red,linewidth=1.5pt](0,-1)(1,0)(0,1){1,\rB,1} + \psaxes[labelFontSize=\scriptscriptstyle,linewidth=0.01]{->}(0,0)(-4,-4)(10,4) + \rput(8,3){$w_1=\rA$}% + \endpsclip +} +\end{animateinline} +\end{lstlisting} + + + +\clearpage + +\subsubsection{$w_0=1$, $\left |w_1\right|=1$ and a variable $w_2$} + +%L'utilisation de $\left |w_1\right|$ permet d'obtenir les deux arcs et donc toute la conique. +The use of $\left |w_1\right|$ provides both arcs and the whole cone. + +\bigskip +\begin{center} +\begin{animateinline}[controls,loop,palindrome, + begin={\begin{pspicture}(-8,-4)(4,4)}, + end={\end{pspicture}}]{3}% 3 images/s +\multiframe{80}{rA=4.0+-0.1}{% + \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] + \psclip{\psframe(-8,-4)(4,4)} + \psRQBCmasse[autoTrace,linewidth=1.5pt](0,-1)(1,0)(0,1){1,1,\rA} + \uput[u](P2){$P_2$}\uput[l](P1){$P_1$}\uput[d](P0){$P_0$} + \psRQBCmasse[linecolor=red,linewidth=1.5pt](0,-1)(1,0)(0,1){1,-1,\rA} + \psaxes[labelFontSize=\scriptscriptstyle,linewidth=0.01]{->}(0,0)(-8,-4)(4,4) + \rput[rb](3.5,3){$w_2=\rA$}% + \endpsclip +} +\end{animateinline} +\end{center} + +\begin{lstlisting} +\begin{animateinline}[controls,loop,palindrome, + begin={\begin{pspicture}(-8,-4)(4,4)}, + end={\end{pspicture}}]{3}% 3 images/s +\multiframe{80}{rA=4.0+-0.1}{% + \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=5,gridlabels=0pt] + \psclip{\psframe(-8,-4)(4,4)} + \psRQBCmasse[autoTrace,linewidth=1.5pt](0,-1)(1,0)(0,1){1,1,\rA} + \uput[u](P2){$P_2$}\uput[l](P1){$P_1$}\uput[d](P0){$P_0$} + \psRQBCmasse[linecolor=red,linewidth=1.5pt](0,-1)(1,0)(0,1){1,-1,\rA} + \psaxes[labelFontSize=\scriptscriptstyle,linewidth=0.01]{->}(0,0)(-8,-4)(4,4) + \rput[rb](3.5,3){$w_2=\rA$}% + \endpsclip +} +\end{animateinline} +\end{lstlisting} + + +\clearpage + \section{List of all optional arguments for \texttt{pst-bezier}} @@ -355,11 +734,13 @@ there are many things that do not work. \bgroup \raggedright \nocite{*} -\bibliographystyle{plain} -\bibliography{pst-bezier-doc} +\printbibliography \egroup \printindex \end{document} + + +Moreover, we can choose a non Euclidean metric. The use of mass points, Bézier curves, conics and the space of spheres in the Minkowski-Lorentz space permits to realise G1-continous blend between Dupin cyclides : to blend surfaces in R3, we blend Bézier curves in R5. For example, we can build a seahorse (see 09_LorentzHippocampeComplet.png), the article (in French) is here: |