如何用 FeynMF 绘制椭圆?

如何用 FeynMF 绘制椭圆?

如何绘制一个参数可控的椭圆?

椭圆的公式为(x^2)/(a^2) + (y^2)/(b^2) = 1。参数ab分别称为半长轴和半短轴。换句话说,2a是椭圆的宽度,而2b是椭圆的高度。

答案1

您还可以使用tikz直接,无需参数化:circle构造允许您将所需的值指定为x radiusy radius;一个小例子:

\documentclass{article}
\usepackage{tikz}

\def\faxis{3cm}
\def\saxis{2cm}

\begin{document}

\begin{tikzpicture}
\draw[step=.5cm,gray!20,very thin] (-4,-5) grid (7,5);
\draw (-4,0) -- (7,0) coordinate (x axis);
\draw (0,-5) -- (0,5) coordinate (y axis);

\draw[red] (0,0) circle [x radius=\faxis,y radius=\saxis];
\def\faxis{1cm}
\def\saxis{4cm}
\draw[blue] (0,0) circle [x radius=\faxis,y radius=\saxis];
\def\faxis{5cm}
\def\saxis{2cm}
\draw[green] (2,0) circle [x radius=\faxis,y radius=\saxis,rotate=30];
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

例如,如果你将椭圆参数化为

x(t)=a*cos(t)
y(t)=b*sin(t)

然后0\leq t\leq 2\pi你可以用它pgfplots来绘制它

截屏

\documentclass{standalone}
\usepackage{pgfplots}

% global settings int he preamble
\pgfplotsset{every axis/.append style={%
                                axis x line=middle,
                                axis y line=middle,
                            axis line style={<->}, % arrows on the axis
                            xlabel={$x$},          % default put x on x-axis
                            ylabel={$y$},          % default put y on y-axis
                            }
                    }

% change the arrows to stealth fighters (personal preference)                    
\tikzset{>=stealth}                    
\begin{document}

\begin{tikzpicture}
    \begin{axis}[
         xmin=-5, xmax=5, 
         ymin=-5, ymax=5,
            grid=major,
    ]
    \addplot[domain=0:2*pi,samples=50]({2*cos(deg(x))},{4*sin(deg(x))});
    \end{axis}
\end{tikzpicture}

\end{document}

您可以使用多种选项 - 查看手册和此网站上带有标签的其他问题pgfplots作为示例:)

根据评论,您可以定义a如下b

\begin{tikzpicture}
    \begin{axis}[
         xmin=-5, xmax=5, 
         ymin=-5, ymax=5,
            grid=major,
    ]
    \def\a{3}
    \def\b{5}
    \addplot[domain=0:2*pi,samples=50]({\a*cos(deg(x))},{\b*sin(deg(x))});
    \end{axis}
\end{tikzpicture}

答案3

您究竟想如何使用这个椭圆?

无论如何,你可以用类似以下方式修改 FeynMF 源如何用 FeynMP 绘制椭圆? (或者使用 egreg 在其评论中指出的机制)。

由于 FeynMF 在后台使用 Metapost,因此您需要先了解如何获取椭圆。只需使用参数缩放圆即可Ab(下面的代码可以编译mpost file.mp并生成 EPS 文件。1)

u:=1cm;
beginfig(1);

        def Ellipse(expr a, b) =
        draw fullcircle scaled 1cm xscaled a yscaled b
        enddef;

        Ellipse(2,1);
endfig;
end;

重新缩放的圆在数学上等同于椭圆。

编辑:使用 egreg 的建议,我使用 \fmfcmd 在 latex 文件中定义了一个椭圆形斑点

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{feynmp}
\setlength{\unitlength}{1mm}

\def\fmfblobEllipse#1#2#3{\fmfcmd{vblobEllipse ((#1), (#2), \fmfpfx{#3});}}

\begin{document}
\begin{center}
\begin{fmffile}{lower_blobE}
    \begin{fmfgraph*}(50,70)
    \fmfcmd{input vblobEllipse}
    \fmfrightn{r}{1}
    \fmfleftn{l}{1}
    \fmftopn{t}{1}
        \fmfblobEllipse{.5w}{.5}{v1}
        \fmf{fermion}{l1,v1}
        \fmf{fermion}{v1,r1}
        \fmf{photon}{t1,v1}
\end{fmfgraph*}
\end{fmffile}
\end{center}
\end{document}

文件 vblobEllipse.mp:

vardef vblobEllipse (expr bd, a) (text vl)=
  forsuffixes $=vl:
    if not vexists $: venter $; fi
    vlist[vlookup $]decor.shape := fullcircle xscaled a;
    vlist[vlookup $]decor.size := bd;
    vlist[vlookup $]decor.sty := "shaded";
 endfor
enddef;

我只为椭圆定义了一个参数,因为整体比例对于形状来说并不重要。

这是从上面得到的图表:

在此处输入图片描述

但是如果您需要将椭圆与费曼图一起使用(并排的意义上,而不是作为图本身的一部分),则可以使用mpost上面的原始代码生成一个椭圆。

相关内容