我在做一些看起来很简单的事情时遇到了困难,所以我希望我犯了一个幼稚的错误。
我正在尝试使用 pst-solides3d 中的 \psProjection 功能将多个多边形投影到平面上。
只要平面的法线朝下,我的多边形就能很好地投影。当平面向后倾斜(绕 y 轴旋转)时,一开始一切都很好。然而,一旦平面向后倾斜到足够的程度,我的多边形就会开始被剪裁并从上到下消失。当平面完全向后倾斜,法线朝上指向 z 轴时,图像已经完全从平面上消失了。
我是否对这些预测的工作方式存在误解?
我的最终目标是拥有 3 个像这样的平面,每个平面都有一张图片,并让它们相交以说明我正在研究的算法。如果 pstricks 不是实现此目的的理想方法,我很乐意提出其他建议。
\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-solides3d}
\begin{document}
\begin{pspicture}(0,0)(5,5)
\psset{viewpoint=30 0 30 rtp2xyz,Decran=60,lightsrc=viewpoint}
\psset{solidmemory}
% Set normal in plane to [0.25 0 1 0] to reproduce
\psSolid[object=plan,name=pp1,definition=equation,args={[1 0 0 0] 90}]
\psset{plan=pp1}
\psProjection[object=polygone,fillstyle=solid,fillcolor=yellow,plan=pp1,args=-1 -0.5 1 -0.5 1 0.5 -1 0.5]
\psProjection[object=polygone,fillstyle=solid,fillcolor=yellow,plan=pp1,args=-1 0.5 0 1.5 1 0.5]
\psProjection[object=polygone,fillstyle=solid,fillcolor=yellow,plan=pp1,args=-0.25 -0.5 0.25 -0.5 0.25 0.25 -0.25 0.25]
\composeSolid
\end{pspicture}
\end{document}
答案1
这一切都归功于 Manuel Luque。我在这里引用他的电子邮件:
投影多边形、圆等被剪裁成与投影平面底部相对应的矩形。它位于
pst-solides.pro
第 11237 行及以下各行。/proj-pst-polygone { proj-action (none) eqstring not { l@pl@n plangetrange aload pop setyrange setxrange newpath xmin ymin l@pl@n pointplan smoveto xmin ymax l@pl@n pointplan slineto xmax ymax l@pl@n pointplan slineto xmax ymin l@pl@n pointplan slineto xmin ymin l@pl@n pointplan slineto planprojpst projpath clip % <------- solidlinewidth setlinewidth linestyle linecolor proj-definition length 0 eq { [proj-args] } { proj-args } ifelse proj-definition cvx exec polygone_ planprojpst projectionsifacevisible projpath } if /projname where { pop proj-definition length 0 eq { [proj-args] } { proj-args } ifelse proj-definition cvx exec projname cvlit exch def /projname where pop /projname undef } if } def
因此我们必须扩大基础。