我正在尝试遵循此答案对上一个问题的指导:
在我自己的代码中我写道:
\begin{tikzpicture}
\draw[variable=\t, domain=0:360] plot ({8*(cos(\t))}, {4*sin(\t)});
\fill ({8*cos(30)},{4*sin(30}) circle (.05);
\fill ({8*cos(60)},{4*sin(60}) circle (.05);
\fill ({-sqrt(12)},0) -- ({8*cos(30)},{4*sin(30)}) arc[start angle = 30, end angle = 60, x radius = 4, y radius = 2] -- cycle;
\end{tikzpicture}
椭圆的周长与填充扇区不对齐,我不确定我做错了什么。我怀疑我不确定arc
椭圆的中心是如何计算出来的,但我认为我基本上是在做那个答案在做的事情。也有可能我误解或错误计算了一些相关的几何图形。
答案1
答案2
尽管拉斐尔桑托罗发现实际问题,TikZ 可以绘制椭圆,并且具有可以与两个不同半径一起使用的极坐标:
\draw circle [x radius=8, y radius=4];
\draw ellipse[x radius=8, y radius=4];
\draw ({-sqrt(12)},0) -- (30:8 and 4)
arc[start angle=30, end angle=60, x radius=8, y radius=4] -- cycle;
circle
(路径运算和之间没有区别ellipse
,只是归结为x radius
和的值y radius
。)
密钥系统还允许您同时指定X和是整个范围的半径,它将用于所有圆、椭圆和圆弧,除非再次指定:
\begin{tikzpicture}[x radius=8, y radius=4]
\draw circle[];
\fill[radius=1pt] (30:8 and 4) coordinate (30) circle []
(60:8 and 4) circle [];
\fill ({-sqrt(12)},0) -- (30) arc[start angle = 30, end angle = 60] -- cycle;
\end{tikzpicture}
但这仍然需要您多次指定极坐标的半径。
当然,你可以始终使用 TeX 宏,例如\newcommand*\radiusX{8}
:
\begin{tikzpicture}[x radius=\xRadius, y radius=\yRadius]
\newcommand*\xRadius{8}
\newcommand*\yRadius{4}
\draw circle[];
\fill[radius=1pt] (30:{\xRadius} and \yRadius) coordinate (30) circle []
(60:{\xRadius} and \yRadius) circle [];
\fill ({-sqrt(12)},0) -- (30) arc[start angle = 30, end angle = 60] -- cycle;
\end{tikzpicture}
或者访问这些值的特殊 PGFMath 函数(当然,这也可能只是 TeX 宏):
\pgfset{declare function={xR=\pgfkeysvalueof{/tikz/x radius};
yR=\pgfkeysvalueof{/tikz/y radius};}}
\begin{tikzpicture}[x radius=8, y radius=4]
\draw circle[];
\fill (30:xR and yR) coordinate (30) circle [radius=1pt]
(60:xR and yR) circle [radius=1pt];
\fill ({-sqrt(12)},0) -- (30) arc[start angle = 30, end angle = 60] -- cycle;
\end{tikzpicture}
或者您只需声明自己的 PGFMath 函数,这对我来说是最方便的方法:
\begin{tikzpicture}[declare function={a=8; b=4;}, x radius=a, y radius=b]
\draw circle[];
\fill[radius=1pt] (30:a and b) coordinate (30) circle []
(60:a and b) circle [];
\fill ({-sqrt(12)},0) -- (30) arc[start angle = 30, end angle = 60] -- cycle;
\end{tikzpicture}
答案3
使用plot
需要更大的数量sample
才能获得更平滑的曲线。下面是使用可用的平滑曲线ellipse
和的简单方法arc
。为了得到椭圆上的一个点,我们采用极坐标,例如,
(30:a and b)
其中,30
是角度,a
分别b
是长半轴和短半轴。
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[declare function={a=4;b=2;}]
\fill[cyan,opacity=.5] (0,0)--(30:a and b) arc(30:60:a and b)--cycle;
\draw (0,0) ellipse(a and b);
\draw[fill=white] (30:a and b) circle(1pt) (60:a and b) circle(1pt);
\end{tikzpicture}
\end{document}