绘制椭圆的实心圆弧 - 不对齐椭圆

绘制椭圆的实心圆弧 - 不对齐椭圆

我正在尝试遵循此答案对上一个问题的指导:

如何从焦点绘制椭圆扇区

在我自己的代码中我写道:

\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

最后一行必须是:

\fill ({-sqrt(12)},0) -- ({8*cos(30)},{4*sin(30)}) arc[start angle = 30, end angle = 60, x radius = 8, y radius = 4];

结果:

在此处输入图片描述

答案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}

相关内容