From 6ab497ae05df040bd2c38540fbe0b6bcac7e66cb Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 12 Sep 2006 18:38:04 +0000 Subject: pst-3dplot update (7feb06) git-svn-id: svn://tug.org/texlive/trunk@2110 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro | 140 +++++++++++++++++++++- 1 file changed, 136 insertions(+), 4 deletions(-) (limited to 'Master/texmf-dist/dvips') diff --git a/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro b/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro index 23cd5be3db9..d8cffb1e8fb 100644 --- a/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro +++ b/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro @@ -15,9 +15,9 @@ %% `pst-3dplot' is a PSTricks package to draw 3d curves and graphical objects %% %% -%% version 0.2 / 2005-01-14 Herbert Voss +%% version 0.23 / 2006-01-18 Herbert Voss % -/tx@3DPlotDict 40 dict def +/tx@3DPlotDict 50 dict def tx@3DPlotDict begin % /saveCoor { @@ -28,8 +28,10 @@ tx@3DPlotDict begin % /ConvertTo2D { RotatePoint - /x2D x neg Alpha cos mul y Alpha sin mul add def - /y2D x Alpha sin mul y Alpha cos mul add neg Beta sin mul z Beta cos mul add def +% /x2D y x Alpha sin mul sub def % |/_ co system +% /y2D z x Alpha cos mul sub def + /x2D x leftHanded not { neg } if Alpha cos mul y Alpha sin mul add def + /y2D x leftHanded { neg } if Alpha sin mul y Alpha cos mul add neg Beta sin mul z Beta cos mul add def } def % /ConvertToCartesian { @@ -105,4 +107,134 @@ tx@3DPlotDict begin % /RotatePoint { RotSequence cvx exec } def % +/VecNorm { 0 exch { dup mul add } forall sqrt } def +/UnitVec { % on stack is [a]; returns a vector with [a][a]/|a|=1 + dup VecNorm /norm ED + { norm div } forall 3 array astore } def +/AxB { % on the stack are the two vectors [a][b] + aload pop /b3 ED /b2 ED /b1 ED + aload pop /a3 ED /a2 ED /a1 ED + a2 b3 mul a3 b2 mul sub + a3 b1 mul a1 b3 mul sub + a1 b2 mul a2 b1 mul sub + 3 array astore } def +/AaddB { % on the stack are the two vectors [a][b] + aload pop /b3 ED /b2 ED /b1 ED + aload pop /a3 ED /a2 ED /a1 ED + a1 b1 add a2 b2 add a3 b3 add + 3 array astore } def +/AmulC { % on stack is [a] and c; returns [a] mul c + /factor ED { factor mul } forall 3 array astore } def +% +% +% 3D objects +/tx@ProjThreeD {% adopted from pst-3d + /z ED /y ED /x ED + Matrix3D aload pop + z mul exch y mul add exch x mul add + 4 1 roll + z mul exch y mul add exch x mul add + exch} def +% +/setColorLight { % expects 7 values on stack C M Y K xL yL zL +% les rayons de lumière + /zLight exch def + /yLight exch def + /xLight exch def +% the color values + /K exch def + /Yellow exch def + /Magenta exch def + /Cyan exch def +% + /NormeLight {xLight dup mul yLight dup mul zLight dup mul add add + sqrt} bind def +} def +/facetteSphere { + newpath + /Xpoint Rsphere theta cos mul phi cos mul CX add def + /Ypoint Rsphere theta sin mul phi cos mul CY add def + /Zpoint Rsphere phi sin mul CZ add def + Xpoint Ypoint Zpoint tx@ProjThreeD moveto + theta 1 theta increment add {% + /theta1 exch def + /Xpoint Rsphere theta1 cos mul phi cos mul CX add def + /Ypoint Rsphere theta1 sin mul phi cos mul CY add def + /Zpoint Rsphere phi sin mul CZ add def + Xpoint Ypoint Zpoint tx@ProjThreeD lineto + } for + phi 1 phi increment add { + /phi1 exch def + /Xpoint Rsphere theta increment add cos mul phi1 cos mul CX add def + /Ypoint Rsphere theta increment add sin mul phi1 cos mul CY add def + /Zpoint Rsphere phi1 sin mul CZ add def + Xpoint Ypoint Zpoint tx@ProjThreeD lineto + } for + theta increment add -1 theta {% + /theta1 exch def + /Xpoint Rsphere theta1 cos mul phi increment add cos mul CX add def + /Ypoint Rsphere theta1 sin mul phi increment add cos mul CY add def + /Zpoint Rsphere phi increment add sin mul CZ add def + Xpoint Ypoint Zpoint tx@ProjThreeD lineto + } for + phi increment add -1 phi { + /phi1 exch def + /Xpoint Rsphere theta cos mul phi1 cos mul CX add def + /Ypoint Rsphere theta sin mul phi1 cos mul CY add def + /Zpoint Rsphere phi1 sin mul CZ add def + Xpoint Ypoint Zpoint tx@ProjThreeD lineto + } for + closepath +} def +% +/condition { PSfacette 0 ge } def +/MaillageSphere { +% on stack must be +% x y z Radius increment C M Y K x y zLIGHT + setColorLight + /increment exch def + /Rsphere exch def + /CZ exch def + /CY exch def + /CX exch def + /StartTheta 0 def + -90 increment 90 increment sub {% + /phi exch def + StartTheta increment 360 StartTheta add increment sub {% + /theta exch def + % Centre de la facette + /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul CX add def + /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul CY add def + /Zpoint Rsphere phi increment 2 div add sin mul CZ add def + % normale à la facette + /nXfacette Xpoint CX sub def + /nYfacette Ypoint CY sub def + /nZfacette Zpoint CZ sub def + % test de visibilité + /PSfacette vX nXfacette mul + vY nYfacette mul add + vZ nZfacette mul add + def + condition { + gsave + facetteSphere + /cosV { 1 xLight nXfacette mul + yLight nYfacette mul + zLight nZfacette mul + add add + NormeLight + nXfacette dup mul + nYfacette dup mul + nZfacette dup mul + add add sqrt mul div sub } bind def + Cyan cosV mul Magenta cosV mul Yellow cosV mul K cosV mul setcmykcolor fill + grestore +% 0 setgray + facetteSphere stroke + } if + } for + % /StartTheta StartTheta increment 2 div add def + } for +} def + end -- cgit v1.2.3