示例 1

示例 1

我显然遗漏了梁与界面相互作用的一些基本知识。我准备了三个简单的例子,希望有人能向我解释为什么会发生某些事情。

示例 1

这很有道理。我有一束入射光束垂直入射到镜子上,语句的drawbeam形式为(node){component}(node)。光束反射回来,就像你期望的那样。

\documentclass[pstricks]{standalone}
\usepackage{pst-optexp}
\begin{document}
\begin{pspicture}(-1.5,-1.5)(1.5,1.5)
    \pnode(-1,0){in}
    \pnode(0,0){mir}
    \pnode(1,0){out}
    \pnode(-1,-1){low}
    \pnode(-1,1){high}
    \mirror(low)(mir)(high)
    \drawbeam[linecolor=red,arrows=->](in){1}(in)
    % \drawbeam[linecolor=blue,arrows=->](low){1}(high)
\end{pspicture}
\end{document}

图。1

如果我把这drawbeam句话替换为(in){1}(out)光束在镜子处停止(既不反射也不穿过)。这很有道理,光束不应该穿过不透射的镜子(当然,理想情况下是这样)。

在此处输入图片描述

示例 2

这种情况与上一种情况非常相似,唯一的区别是入射光束呈一定角度。同样,如果陈述drawbeam为 ,(low)(mir)(high)光束会在镜子处停止,但如果陈述为 ,光束就会反射(low){1}(high)

\documentclass[pstricks]{standalone}
\usepackage{pst-optexp}
\begin{document}
\begin{pspicture}(-1.5,-1.5)(1.5,1.5)
    \pnode(-1,0){in}
    \pnode(0,0){mir}
    \pnode(1,0){out}
    \pnode(-1,-1){low}
    \pnode(-1,1){high}
    \mirror(low)(mir)(high)
    % \drawbeam[linecolor=red,arrows=->](in){1}(in)
    \drawbeam[linecolor=blue,arrows=->](low){1}(high)
\end{pspicture}
\end{document}

在此处输入图片描述

示例 3

有件事让我很困惑。单独来看,示例 1 和 2 中的梁在指定为 时绘制得很好(node){component}(node)。但是,当我将它们一起绘制时,只显示红色箭头(该图片与示例 1 中的第一张图片相同)。为什么我不能按照下面的指定方式绘制两个梁?

\documentclass[pstricks]{standalone}
\usepackage{pst-optexp}
\begin{document}
\begin{pspicture}(-1.5,-1.5)(1.5,1.5)
    \pnode(-1,0){in}
    \pnode(0,0){mir}
    \pnode(1,0){out}
    \pnode(-1,-1){low}
    \pnode(-1,1){high}
    \mirror(low)(mir)(high)
    \drawbeam[linecolor=red,arrows=->](in){1}(in)
    \drawbeam[linecolor=blue,arrows=->](low){1}(high)
\end{pspicture}
\end{document}

问题

  • 为什么我不能将光束路径指定为(node)(node)(node)而不是(node){component}(node)
  • 为什么我无法绘制示例 3 中的两条光束?

我的设置

  • OS X Yosemite
  • MacTex 最新版本(一周前更新)
  • 使用 latex-suite 在 MacVim 中编辑
  • 使用编译xelatex -interaction=nonstopmode

答案1

您在两个问题中观察到的内容都可以归类为错误:

  1. 运行第三个示例时xelatex出现 ghostscript 错误,这就是您看不到第二条光束的原因。使用latex + dvips + ps2pdf效果很好。

    我不用 xelatex,也不知道它处理 Postscript 代码的所有内部细节。 中有一个特殊的 hack \drawbeam,可能是罪魁祸首。 不知道我是否能修复它。

  2. 一般来说,应该可以使用三个不同的节点,例如

    \drawbeam(low)(mir)(high)
    

    这应该绘制两条线,但实际上只绘制了一条从 (low) 到 (mir) 的线。所以,这也是一个错误。但是,如果只连接节点,则不需要\drawbeam,但也可以同样使用\psline

一般来说,拥有组件并连接它们的目的\drawbeam是为了自动计算反射和折射。只需为宏提供组件名称/编号,它就可以自行选择哪个使用的接口、它的属性是什么,并据此绘制光束。

考虑使用半透明镜子而不是简单的镜子:

\documentclass[pstricks]{standalone}
\usepackage{pst-optexp}
\begin{document}
\begin{pspicture}(-1.5,-1.5)(1.5,1.5)
    \pnode(-1,0){in}
    \pnode(0,0){mir}
    \pnode(1,0){out}
    \pnode(-1,-1){low}
    \pnode(-1,1){high}
    \mirror[mirrortype=semitrans, mirrordepth=-0.2](low)(mir)(high)
    \drawbeam[linecolor=blue,arrows=->](low){1}(high)
    \psdots(low)(mir)(high)
\end{pspicture}
\end{document}

在此处输入图片描述

您会看到,第一个节点(low)给出了起点,镜子的中心节点给出了起始光束的方向。其余部分由折射和反射定律给出。您还会注意到,光束不会在节点处结束(high),因为这不符合追踪的光束路径。

相关内容