如何绘制一个参数可控的椭圆?
椭圆的公式为(x^2)/(a^2) + (y^2)/(b^2) = 1
。参数a
和b
分别称为半长轴和半短轴。换句话说,2a
是椭圆的宽度,而2b
是椭圆的高度。
答案1
您还可以使用tikz
直接,无需参数化:circle
构造允许您将所需的值指定为x radius
和y 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,因此您需要先了解如何获取椭圆。只需使用参数缩放圆即可A和b(下面的代码可以编译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
上面的原始代码生成一个椭圆。