我的图片使用了一堆不规则四边形,但没有多边形宏pst-3dplot
有没有办法模拟基本的普斯特里克宏指令\pspolygon(a,b)(c,d)...
pst-3dplot?
我知道我可以\pstThreeDLine
连续输出四个,但不会有任何斜接连接起来,因为每个都是一条独立的路径。额外的好处是可以用任意颜色填充路径。
我考虑过用两个或四个 s 构建四边形pstThreeDTriangle
(这样可以填充),但我认为这对边缘的描边没有帮助(仍然需要逐行描边)
我觉得这需要一些黑客攻击,我试图深入研究包的*.专业版和*.tex文件需要查看,但里面乱糟糟的。我可以处理 PostScript,但 TeX 宏地狱对我来说仍然是一个难以理解的丛林
\documentclass{book}
\usepackage{pstricks}
\usepackage{pst-3dplot}
\begin{document}%
\begin{pspicture}(-5,-5)(5,5)%
% I would need a macro that looks like the following
\pstThreeDQuad[options](p1)(p2)(p3)(p4)%
% but because this looks like a full blown
% project for the package maintainers
% I would rather any other solution
% including injecting postscript directly
\end{pspicture}%
\end{document}
我不怕后记但我很少处理TeX。如果我能破译一种方法,将我自己的 postscript 注入 pspicture 而不破坏任何东西(同时仍然使用 pst-3dplot 环境设置),我就不会问这个问题了(或者我会自己回答)
已更新,可供分享
感谢大家的帮助,我将留下这个不错的结果,以展示四边形的强大功能。
这看起来像solides3d
但3dplot
实际上并立即编译
答案1
一种可能的方法是创建一个宏\pstThreeDQuad[<options>](<1>)(<2>)(<3>)(<4>)
,为每个 3D 节点<1>
、<2>
和<3>
设定一个 2D 节点<4>
。然后,只需使用 设定一个常规 2D 多边形\pstpolygon
:
\documentclass{article}
\usepackage{pst-3dplot,xparse}
\NewDocumentCommand{\pstThreeDQuad}{O{} r()r()r()r()}{%
\pstThreeDPut(#2){\pnode{A}}%
\pstThreeDPut(#3){\pnode{B}}%
\pstThreeDPut(#4){\pnode{C}}%
\pstThreeDPut(#5){\pnode{D}}%
\pspolygon[#1](A)(B)(C)(D)%
}
\begin{document}
\begin{pspicture}(-2,-1.25)(1,2.25)
\SpecialCoor
\psset{Alpha=60,Beta=30}
\pstThreeDCoor[linecolor=blue,%
xMin=-1,xMax=2,yMin=-1,yMax=2,zMin=-1,zMax=2]
\pstThreeDDot[drawCoor=true](1,0.5,1.25)
\pstThreeDQuad[linecolor=red,fillcolor=blue!15!white,fillstyle=solid](1,1,1)(2,2,2)(-1,0,3)(3,0,-2)
\end{pspicture}
\end{document}
答案2
定义新的宏没有任何实际意义,因为它是一个简单的宏,\pstThreeDLine
具有相同的起点和终点。但是,如果您确实需要一个新的宏,请按以下方式定义它:
\documentclass{article}
\usepackage{pst-3dplot}
\def\pstThreeDQuad#1(#2)(#3)(#4)(#5){\pstThreeDLine#1(#2)(#3)(#4)(#5)(#2)}
\begin{document}
\begin{pspicture}(-2,-1.25)(1,2.25)
\psset{Alpha=60,Beta=30}
\pstThreeDCoor[linecolor=blue,xMin=-1,xMax=2,yMin=-1,yMax=2,zMin=-1,zMax=2]
\pstThreeDDot[drawCoor=true](1,0.5,1.25)
% \pstThreeDLine[linecolor=red,fillcolor=blue!30!white,
% fillstyle=solid,opacity=0.5](1,1,1)(2,2,2)(-1,0,3)(3,0,-2)(1,1,1)
\pstThreeDQuad[linecolor=red,fillcolor=blue!30!white,
fillstyle=solid,opacity=0.5](1,1,1)(2,2,2)(-1,0,3)(3,0,-2)
\end{pspicture}
\end{document}