已更新,可供分享

已更新,可供分享

我的图片使用了一堆不规则四边形,但没有多边形宏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 环境设置),我就不会问这个问题了(或者我会自己回答)


已更新,可供分享

感谢大家的帮助,我将留下这个不错的结果,以展示四边形的强大功能。

斯托克斯?

这看起来像solides3d3dplot实际上并立即编译

答案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}

在此处输入图片描述

相关内容