是否可以绘制具有规定长轴或短轴的椭圆?

是否可以绘制具有规定长轴或短轴的椭圆?

假设我们通过编程计算出中的两个坐标P和,然后选择一个正数。此数据定义了一个唯一的椭圆:QTikZr

在此处输入图片描述

P这个椭圆的中心是和的中点,Q的值为和R之间距离的一半。PQ

我的问题是:

问题 1.有没有简单的方法来绘制这个椭圆TikZ

问题2。更一般地说,有没有一种简单的方法可以在这个椭圆上画任意圆弧?

答案1

在等待 TikZ 助手时,这里有一个元帖子版本。这在 MP 中几乎是一行代码。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}

vardef elliptic_path(expr a, b, minor_radius) =
    fullcircle xscaled abs(a-b) yscaled 2 minor_radius
               rotated angle (a-b) shifted 1/2[a,b]
enddef;

beginfig(1);
    pair P, Q; numeric r;
    P = origin; Q = 89 dir 42;
    r = 34;

    path e; 
    e = elliptic_path(P, Q, r);

    draw e withpen pencircle scaled 1.414 withcolor 3/4 white;
    drawarrow subpath (1, 5) of e withcolor red;

    dotlabel.lft("$P$", P);
    dotlabel.rt("$Q$", Q);
endfig;
\end{mplibcode}
\end{document}

这是luampliblualatex引擎编译的。

答案2

我认为这有点像 xy 问题。从长远来看,你可能想要的是将你变换到一个坐标系中,该坐标系的中心是两点之间的中心,x 轴从中心指向两点之一,y 轴正交且长度为r。然后,此坐标系中的圆变成椭圆、普通圆弧、椭圆弧等。显然,TiZ 开箱即用。为了让事情更方便一点,我添加了一种样式,elli cs它从这些数据中安装这个坐标系。有了这个样式,图表就变得很简单了

 \begin{scope}[elli cs={A={(P)},B={(Q)},r=9mm}]
  \draw circle[radius=1];
  \draw[dashed] (0,1) -- node[midway,fill=white]{$r$} (0,0) node[dot] {}
  -- node[midway,fill=white]{$R$} (1,0);
  \draw[blue,-{Stealth[bend]}] (-30:1) arc[start angle=-30,end angle=120,radius=1];
 \end{scope}

如您所见,对于弧线,无需猜测,角度在此坐标系中具有非常直观的解释。您可以非常方便地在此框架中执行许多进一步的操作,并根据它转换形状。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,bending,calc}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,fill,inner sep=1pt},thick,
    elli cs/.code={
    \tikzset{ellipse through/.cd,#1}
    \def\pv##1{\pgfkeysvalueof{/tikz/ellipse through/##1}}%
    \edef\temp{\noexpand\tikzset{shift={($0.5*\pv{A}+0.5*\pv{B}$)},
        x={($0.5*\pv{B}-0.5*\pv{A}$)},
        y={($($\pv{A}!\pv{r}!90:\pv{B}$)-\pv{A}$)}
        }}%
    \temp   
    },
    ellipse through/.cd,r/.initial=5mm,A/.initial={(-1,0)},
        B/.initial={(1,0)}]
   \path[nodes=dot] (0,0) node[label=below left:$P$] (P){}
     (4,1.5) node[label=below right:$Q$] (Q){};         
   \begin{scope}[elli cs={A={(P)},B={(Q)},r=9mm}]
    \draw circle[radius=1];
    \draw[dashed] (0,1) -- node[midway,fill=white]{$r$} (0,0) node[dot] {}
    -- node[midway,fill=white]{$R$} (1,0);
    \draw[blue,-{Stealth[bend]}] (-30:1) arc[start angle=-30,end angle=120,radius=1];
   \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容