
Как можно сделать непрозрачность объекта pst-3dplot
прозрачной? У меня есть пример, где использование параметров opacity
или strokeopacity
не работает. Я пытаюсь сделать изображение, похожее на следующее:
В надежде показать больше деталей внутри сферы, например, вот так:
Однако я не могу сделать так, чтобы верхняя часть сферы выглядела иначе, чем нижняя, сквозь непрозрачную поверхность, или сделать сферу прозрачной, чтобы увидеть внутренние линии/маркировку.
Вот что я попробовал (скомпилировано с помощью XeLatex+MakeIndex+BibTex в TeXWorks):
\documentclass{article}
\usepackage{pst-3dplot}
\usepackage{caption}
\usepackage{subcaption}
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp
\def \planeLocRatio {.7}
\def \radius {1}
\def \cylLength {5}
\def \planeLen {5}
\FPeval{\theta}{pi/4}
\FPeval{\b}{radius*cos(theta)}
\FPeval{\a}{radius*sin(theta)}
\FPeval{\h}{radius-radius*cos(theta)}
\begin{document}
\begin{figure}[H]
\begin{center}
\begin{subfigure}[b]{0.3\textwidth}
\begin{pspicture}(-4,-2.25)(2,4.25)
%\psset{Alpha=45, Beta=0}
\pstThreeDCoor
\pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,0,\b)
\pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,\a,\b)
\pstThreeDLine[linewidth=2pt,linecolor=green] (0,0,\b)(0,\a,\b)
\pstThreeDLine[linewidth=2pt,linecolor=black] (0,\a,\b)(0,\radius,\radius)
\pstThreeDSphere[strokeopacity=0.1](0,0,0){\radius}
\pstThreeDSquare[fillcolor=blue,fillstyle=solid,opacity=0.9](-5,-5,\planeLocRatio)(0,10,0)(10,0,0)
%\pstThreeDSquare[fillcolor=blue,fillstyle=solid,opacity=0.5](- \planeLen /2,- \planeLen /2,\planeLocRatio)(0,\planeLen,0)(\planeLen,0,0)
\end{pspicture}
\caption{Sphere model}
\end{subfigure}%
\begin{subfigure}[b]{0.3\textwidth}
\begin{pspicture}(-4,-2.25)(2,4.25)
\psCylinder[RotX=-15,RotY=45](0,0,0){\radius}{\cylLength}
%\pstThreeDSquare[fillcolor=blue,fillstyle=solid,opacity=0.5](- \planeLen /2,- \planeLen /2,\planeLocRatio)(0,\planeLen,0)(\planeLen,0,0)
\end{pspicture}
\caption{Cylinder Model}
\end{subfigure}
\caption{Sphere and cylinder particle models at the interface.}
\end{center}
\end{figure}
\end{document}
Что выводит это на данный момент:
--
Обновлять: Ответ Герберта был хорош и затронул многие из основных моментов для этой фигуры, но я хочу сменить тему из-за его ответа, указывающего на то, что пакет не делает скрытых линий. Кроме того, я хотел бы, чтобы верхняя поверхность была другого цвета, чем нижняя поверхность, а также другой цвет для области пересечения.
Итак, вот что у меня есть на данный момент, и теперь у меня есть другие проблемы, о которых я буду задавать другие вопросы или обновлять информацию здесь для будущего интереса к этой проблеме.
\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{pst-solides3d}
\usepackage{fp}
\pagestyle{empty}
\def \planeLocRatio {.7} % ratio of z location of plane and radius
\def \radius {0.5}
\def \planeLen {1} % half of one side of the plane
\FPeval{\contAng}{pi/4} % angle from z axis to intersection of plane at sphere edge
\FPeval{\a}{radius*cos(contAng)} % z location at plane intersection
\FPeval{\a2}{a/2}
\FPeval{\b}{radius*sin(contAng)} % radius of circle at plane intersection
\FPeval{\b2}{b/2}
\FPeval{\h}{radius-radius*cos(contAng)} % z distance from top of sphere to plane
\FPeval{\h2}{h/2}
\FPeval{\imgsize}{planeLen+1} % maybe increasing this helps /hbox errors?
\begin{document}
\begin{center}
\begin{pspicture}[solidmemory](-\imgsize,-\imgsize)(\imgsize,\imgsize)
% ================== VIEW ===================
\psset{
viewpoint=10 45 20 rtp2xyz,
lightsrc=viewpoint,
%lightintensity=1.25
}
% ================== POINTS ==================
% origin
\psSolid[object=point,args=0 0 0, name=O, text=O, pos=br]
\psSolid[object=point,args=0 0 \a, name=A, text=A, pos=uc]
%%%%%%% Causes hbox problems
%\psSolid[object=point,args=0 \b \a, name=B, text=B, pos=uc]
% ================== LINES ==================
% origin to center of circle at plane intersection
\psSolid[object=line,linecolor=black!50,linewidth=2pt,args=O A, name=OA]
% label the equation to the side of the line midway through the line
%\psProjection[object=point,definition=milieu,args=O A,text=$Rcos \theta$,pos=uc]
% line from origin to side of sphere intersected with plane
%\psSolid[object=line,linecolor=black!50,linewidth=2pt,args=O B, name=OB]
%\psProjection[object=point,definition=milieu,args=O B,text=$Rsin \theta$,pos=uc]
% line from A to B
%\psSolid[object=line,linecolor=black!50,linewidth=2pt,args=A B, name=AB]
% ================== SPHERE ==================
\psSolid[
object=sphere,
name=mySphere,
r=\radius,
ngrid=30 30, % number of grid lines across 2 dimensions r
grid=false, % remove line edges
hue=0 0.5,
opacity=0.4,
hollow=true,
intersectiontype=0,
intersectionplan=0 0 1 \a,
intersectioncolor=(bleu)
](0,0,0)
% ================== PLANE ==================
\psSolid[
object=plan,
name=myPlane,
definition=solidface,
args=mySphere 1,
base=-1 1 -1 1,
action=draw,
](A,,)
\end{pspicture}
\end{center}
\end{document}
который на данный момент выдает:
решение1
Текущая версияhttp://texnik.dante.de/tex/generic/pst-3dplot/pst-3dplot.texпринимает значения opacity
и strokeopacity
учитывает:
\begin{pspicture}(-4,-2.25)(2,4.25)
\psset{Alpha=45, Beta=10}
\pstThreeDCoor
\pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,0,\b)
\pstThreeDLine[linewidth=2pt,linecolor=blue,arrows=->] (0,0,0)(0,\a,\b)
\pstThreeDLine[linewidth=2pt,linecolor=green] (0,0,\b)(0,\a,\b)
\pstThreeDLine[linewidth=2pt,linecolor=black] (0,\a,\b)(0,\radius,\radius)
\pstThreeDSquare[fillcolor=blue!40,fillstyle=solid,opacity=0.4](-5,-5,\planeLocRatio)(0,10,0)(10,0,0)
\pstThreeDSphere[opacity=0.3,strokeopacity=0.3,linewidth=0.1pt](0,0,0){\radius}
\end{pspicture}
Однако если вам нужны скрытые линии и поверхности, то используйте вместо этого `pst-solides3d?.