# Re: [NTG-context] Has anybody used asymptote without LaTeX?

On 2008-09-28 04:35 Zhichu Chen wrote:
> It is said that Asymptote has supported PRC format 3D file:
> http://asymptote.sourceforge.net/gallery/3D%20graphs/
>
> I really wanna give it a try, but once I was building from the svn
> source, I was told that I don't have LaTeX in my $PATH. I haven't > really been using LaTeX for a long time, and I prefer I don't need > to install a bunch of LaTeX programs and packages just for a > drawing program which, IMHO, only use LaTeX to make nice > labels. > > Is there any workarounds? And how to embed .prc files into > the .pdf document? > -- > Best Regards > Chen  This doesn't really answer your question but may be of some related interest to the mailing list. I am quite fond of pfg/tikz as a drawing package that works rather well with plain tex, latex and context. Asymptote is a similar tool, but it seems to be less portable. However, it appears on the other hand to be much more powerful for 3D. Neverless, I am sharing with this context list an impressive tikz example -- Alan Braslau CEA DSM-IRAMIS-SPEC CNRS URA 2464 Orme des Merisiers 91191 Gif-sur-Yvette cedex FRANCE tel: +33 1 69 08 73 15 fax: +33 1 69 08 87 86 mailto:[EMAIL PROTECTED] http://www-dna2006.cea.fr/ .''. : :' : . ' - that I have adapted to context. (I have put the author on copy.) Basically, the only changes to the latex source are \usepackage{preview} -> \startTEXpage \stopTEXpage \begin{tikzpicture} -> \starttikzpicture and a few other minor syntax adaptations...) Alan % What is it % ========== % % Examples inspired by the thread at comp.text.tex about how to convert some hand % drawn pictures into programmatic 3D sketches: % http://groups.google.com/group/comp.text.tex/browse_thread/thread/a03baf5d6fa64865/f7e7b903f1d87a6a % The sketches present stereographic and cylindrical map projections and they % pose some interesting challenges for doing them with a 2D drawing package PGF/TikZ. % % The main idea is to draw in selected 3D planes and then project onto the canvas % coordinate system with an appriopriate transformation. Some highlights: % [*] usage of pgf math engine for calculation of projection transformations and % transitions points from visible (solid lines) to invisible (dashed lines) on % meridians and latitude circles % [*] definition of 3D plane transformation with expanded styles so that they are robust % against redefinition of macros used in their construction % [*] usage of named coordinates (nodes) for definition of characteristic points in % local coordinate systems so that they are accessible outside of their plane of % definition % [*] calculation of intersections points with TikZ intersection coordinate system % [*] usage of 'to' path operation instead of 'arc' for marking angles to allow for % easy positioning of text labels on the curve % [*] 3D lighting effects with shading % % % Who's done it % ============= % % Tomasz M. Trzeciak % % % Distribution and use % ==================== % % Use as you see fit. Consider giving a proper attribution to the author. % % % Change log % ========== % % 2008/08/07 posted to latex-community.org % 2008/08/08 fixed some typos, added note about 'to' path operation to the description, % fixed positioning issue of nodes and 'to' path operation as suggested % by Kjell, removed some dead code from KART picture % 2008/09/28 adapted as an example to ConTeXt \usemodule[tikz] \usetikzlibrary[calc,fadings,decorations.pathreplacing] %% helper macros \def\pgfmathsinandcos#1#2#3{% \pgfmathsetmacro#1{sin(#3)}% \pgfmathsetmacro#2{cos(#3)}% } \def\LongitudePlane#1#2#3{% \pgfmathsinandcos\sinEl\cosEl{#2} % elevation \pgfmathsinandcos\sint\cost{#3} % azimuth \tikzset{#1/.estyle={cm={\cost,\sint*\sinEl,0,\cosEl,(0,0)}}} } \def\LatitudePlane#1#2#3{% \pgfmathsinandcos\sinEl\cosEl{#2} % elevation \pgfmathsinandcos\sint\cost{#3} % latitude \pgfmathsetmacro\yshift{\cosEl*\sint} \tikzset{#1/.estyle={cm={\cost,0,0,\cost*\sinEl,(0,\yshift)}}} % } \def\DrawLongitudeCircle#1#2{ \LongitudePlane{current plane}{\angEl}{#2} \tikzset{current plane/.prefix style={scale=#1}} % angle of "visibility" \pgfmathsetmacro\angVis{atan(sin(#2)*cos(\angEl)/sin(\angEl))} % \draw[current plane] (\angVis:1) arc (\angVis:\angVis+180:1); \draw[current plane,dashed] (\angVis-180:1) arc (\angVis-180:\angVis:1); } \def\DrawLatitudeCircle#1#2{ \LatitudePlane{current plane}{\angEl}{#2} \tikzset{current plane/.prefix style={scale=#1}} \pgfmathsetmacro\sinVis{sin(#2)/cos(#2)*sin(\angEl)/cos(\angEl)} % angle of "visibility" \pgfmathsetmacro\angVis{asin(min(1,max(\sinVis,-1)))} \draw[current plane] (\angVis:1) arc (\angVis:-\angVis-180:1); \draw[current plane,dashed] (180-\angVis:1) arc (180-\angVis:\angVis:1); } %% document-wide tikz options and styles \tikzset{% >=latex, % option for nice arrows inner sep=0pt,% outer sep=2pt,% mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum size=3pt,fill=black,circle}% } \starttext \startTEXpage \starttikzpicture % "THE GLOBE" showcase \def\R{2.5} % sphere radius \def\angEl{35} % elevation angle \filldraw[ball color=white] (0,0) circle (\R); \foreach \t in {-80,-60,...,80} { \DrawLatitudeCircle{\R}{\t} } \foreach \t in {-5,-35,...,-175} { \DrawLongitudeCircle{\R}{\t} } % some fancy transparent shading % \tikzfading[name=fade inside,inner color=transparent!80,outer color=transparent!30] % \shadedraw[ball color=white,path fading=fade inside] (0,0) circle (\R); \stoptikzpicture \stopTEXpage \startTEXpage \starttikzpicture % CENT %% some definitions \def\R{2.5} % sphere radius \def\angEl{35} % elevation angle \def\angAz{-105} % azimuth angle \def\angPhi{-40} % longitude of point P \def\angBeta{19} % latitude of point P %% working planes \pgfmathsetmacro\H{\R*cos(\angEl)} % distance to north pole \tikzset{xyplane/.estyle={cm={cos(\angAz),sin(\angAz)*sin(\angEl),- sin(\angAz),cos(\angAz)*sin(\angEl),(0,-\H)}}} \LongitudePlane{xzplane}{\angEl}{\angAz} \LongitudePlane{pzplane}{\angEl}{\angPhi} \LatitudePlane{equator}{\angEl}{0} %% draw xyplane and sphere \draw[xyplane] (-2*\R,-2*\R) rectangle (2.2*\R,2.8*\R); \fill[ball color=white] (0,0) circle (\R); % 3D lighting effect %\fill[white] (0,0) circle (\R); % just a white circle \draw (0,0) circle (\R); %% characteristic points \coordinate (O) at (0,0); \coordinate[mark coordinate] (N) at (0,\H); \coordinate[mark coordinate] (S) at (0,-\H); \path[pzplane] (\angBeta:\R) coordinate[mark coordinate] (P); \path[pzplane] (\R,0) coordinate (PE); \path[xzplane] (\R,0) coordinate (XE); \path (PE) ++(0,-\H) coordinate (Paux); % to aid Phat calculation \coordinate[mark coordinate] (Phat) at (intersection cs: first line={(N)--(P)}, second line={(S)--(Paux)}); %% draw meridians and latitude circles \DrawLatitudeCircle{\R}{0} % equator %\DrawLatitudeCircle{\R}{\angBeta} \DrawLongitudeCircle{\R}{\angAz} % xzplane \DrawLongitudeCircle{\R}{\angAz+90} % yzplane \DrawLongitudeCircle{\R}{\angPhi} % pzplane %% draw xyz coordinate system \draw[xyplane,<->] (1.8*\R,0) node[below] {$x,\xi$} -- (0,0) -- (0,2.4*\R) node[right] {$y,\eta$}; \draw[->] (0,-\H) -- (0,1.6*\R) node[above] {$z,\zeta$}; %% draw lines and put labels \draw[dashed] (P) -- (N) +(0.3ex,0.6ex) node[above left] {\bf$N$}; \draw (P) -- (Phat) node[above right] {\bf$\hat{P}$}; \path (S) +(0.4ex,-0.4ex) node[below] {\bf$S$}; \draw[->] (O) -- (P) node[above right] {\bf$P$}; \draw[dashed] (XE) -- (O) -- (PE); \draw[pzplane,->,thin] (0:0.5*\R) to[bend right=15] node[pos=0.4,right] {$\beta$} (\angBeta:0.5*\R); \draw[equator,->,thin] (\angAz:0.4*\R) to[bend right=30] node[pos=0.4,below] {$\phi$} (\angPhi:0.4*\R); \draw[thin,decorate,decoration={brace,raise=0.5pt,amplitude=1ex}] (N) -- (O) node[midway,right=1ex] {$a$}; \stoptikzpicture \stopTEXpage \startTEXpage \starttikzpicture % MERC %% some definitions \def\R{3} % sphere radius \def\angEl{25} % elevation angle \def\angAz{-100} % azimuth angle \def\angPhiOne{-50} % longitude of point P \def\angPhiTwo{-35} % longitude of point Q \def\angBeta{33} % latitude of point P and Q %% working planes \pgfmathsetmacro\H{\R*cos(\angEl)} % distance to north pole \LongitudePlane{xzplane}{\angEl}{\angAz} \LongitudePlane{pzplane}{\angEl}{\angPhiOne} \LongitudePlane{qzplane}{\angEl}{\angPhiTwo} \LatitudePlane{equator}{\angEl}{0} %% draw background sphere \fill[ball color=white] (0,0) circle (\R); % 3D lighting effect %\fill[white] (0,0) circle (\R); % just a white circle \draw (0,0) circle (\R); %% characteristic points \coordinate (O) at (0,0); \coordinate[mark coordinate] (N) at (0,\H); \coordinate[mark coordinate] (S) at (0,-\H); \path[xzplane] (\R,0) coordinate (XE); \path[pzplane] (\angBeta:\R) coordinate (P); \path[pzplane] (\R,0) coordinate (PE); \path[qzplane] (\angBeta:\R) coordinate (Q); \path[qzplane] (\R,0) coordinate (QE); %% meridians and latitude circles % \DrawLongitudeCircle{\R}{\angAz} % xzplane % \DrawLongitudeCircle{\R}{\angAz+90} % yzplane \DrawLongitudeCircle{\R}{\angPhiOne} % pzplane \DrawLongitudeCircle{\R}{\angPhiTwo} % qzplane \DrawLatitudeCircle{\R}{\angBeta} \DrawLatitudeCircle{\R}{0} % equator % shifted equator in node with nested call to tikz (I didn't know it's possible) \node at (0,1.6*\R) { \tikz{\DrawLatitudeCircle{\R}{0}} }; %% draw lines and put labels \draw (-\R,-\H) -- (-\R,2*\R) (\R,-\H) -- (\R,2*\R); \draw[->] (XE) -- +(0,2*\R) node[above] {$y$}; \node[above=8pt] at (N) {\bf$N$}; \node[below=8pt] at (S) {\bf$S$}; \draw[->] (O) -- (P); \draw[dashed] (XE) -- (O) -- (PE); \draw[dashed] (O) -- (QE); \draw[pzplane,->,thin] (0:0.5*\R) to[bend right=15] node[midway,right] {$\beta$} (\angBeta:0.5*\R); \path[pzplane] (0.5*\angBeta:\R) node[right] {$\hat{1}$}; \path[qzplane] (0.5*\angBeta:\R) node[right] {$\hat{2}$}; \draw[equator,->,thin] (\angAz:0.5*\R) to[bend right=30] node[pos=0.4,above] {$\phi_1$} (\angPhiOne:0.5*\R); \draw[equator,->,thin] (\angAz:0.6*\R) to[bend right=35] node[midway,below] {$\phi_2$} (\angPhiTwo:0.6*\R); \draw[equator,->] (-90:\R) arc (-90:-70:\R) node[below=0.3ex] {$x = a\phi$}; \path[xzplane] (0:\R) node[below] {$\beta=0$}; \path[xzplane] (\angBeta:\R) node[below left] {$\beta=\beta_0$}; \stoptikzpicture \stopTEXpage \startTEXpage \starttikzpicture % KART \def\R{2.5} \node[draw,minimum size=2cm*\R,inner sep=0,outer sep=0,circle] (C) at (0,0) {}; \coordinate (O) at (0,0); \coordinate[mark coordinate] (Phat) at (20:2.5*\R); \coordinate (T1) at (tangent cs: node=C, point={(Phat)}, solution=1); \coordinate (T2) at (tangent cs: node=C, point={(Phat)}, solution=2); \coordinate[mark coordinate] (P) at ($(T1)!0.5!(T2)$); \draw[dashed] (T1) -- (O) -- (T2) -- (Phat) -- (T1) -- (T2); \draw[->] (-1.5*\R,0) -- (2.5*\R,0) node[right] {$x$}; \draw[->] (0,-1.5*\R) -- (0,1.5*\R) node[above] {$y$}; \draw (O) node[below left] {\bf$O$} -- (P) +(1ex,0) node[above=1ex] {\bf$P$}; \draw (P) -- (Phat) node[above=1ex] {\bf$\hat{P}\$};

\stoptikzpicture
\stopTEXpage

\stoptext

___________________________________________________________________________________
`