[pstricks] Re: PSTricks pst-3dplot question

Herbert Voss Herbert.Voss at alumni.TU-Berlin.DE
Mon Sep 15 22:04:37 CEST 2003

Jonathan Dentch schrieb:
> I would like to plot a surface with data from a file using pst-3dplot.
>  The x data runs from 100 to 260.    The y data runs from 0 to 12. The
> z data runs from 0.0 to 1.0.  Note that z is a function of x and y.
>
> What should the dimensions be?

this is on the to do list, that the three axes can
have its own dimension...
For now you have to modify the dataplot macro. In this example
I use the following data file and test case, where only the
two lines with %%%%%%%%%%%% are important, they should be
easy to understand. Now the three coordinates are relativ
to 0..1.

If you have a mathematical function
then use pstPlotThreeD and modify \pst at def{ScalePointsThreeD}
in the same way than \def\dataplotThreeD at ii#1{%

Herbert

100 0 0
120 1 0.1
130 2 0.2
150 3 0.3
180 4 0.5
200 6 0.7
220 7 0.8
240 10 0.9
260 12 1

\documentclass[11pt,a4paper]{article}
\usepackage{pst-3dplot}
\psset{subgriddiv=0,griddots=10,gridlabels=7pt}
\makeatletter
\def\dataplotThreeD at ii#1{%
\@nameuse{beginplot@\psplotstyle}%
/Alpha \psk at ThreeDplot@Alpha\space def
/Beta \psk at ThreeDplot@Beta\space def
/Dx { /D { Dy } def } def
/Dy { /D { Dz } def } def
/Dz {                     % now we have x y z
3 -1 roll               % y z x
260.0 div               % 0 ... 1 %%%%%%%%%%%%
dup                     % y z x x
neg Alpha cos mul       % y z x (x)
4 -1 roll               % z x (x) y
12.0 div                % 0 ... 1 %%%%%%%%%%%%
dup                     % z x (x) y y
5 1 roll                % y z x (x) y
Alpha sin mul add \pst at number\psxunit mul % y z x (x2)
4 1 roll                % (x2) y z x
Alpha sin mul           % (x2) y z (x)
3 -1 roll               % (x2) z (x) y
Alpha cos mul add neg Beta sin mul % (x2) z (x)
exch                    % (x2) (x) z
Beta cos mul add \pst at number\psyunit mul % (x2) (y2)
Do /D { Dx } def } def
/D { /D { Dx } def } def
/Do {
\@nameuse{beginqp@\psplotstyle}%
/Do { \@nameuse{doqp@\psplotstyle}} def
} def}%
#1%
\@nameuse{endqp@\psplotstyle}%
}
\makeatother
\begin{document}

\vspace{1cm}
\begin{center}
\begin{pspicture}(-6,-2)(6,8)
\psgrid
\psset{Alpha=45,Beta=15,xunit=5cm,yunit=5cm}
\pstThreeDCoor[%
xMin=-0.1,xMax=1.25,%
yMin=-0.1,yMax=1.25,%
zMin=-0.1,zMax=1.25]