要绘制这样的图形,我需要什么代码?

要绘制这样的图形,我需要什么代码?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\begin{document}
    \begin{tikzpicture}[scale=5]
        \coordinate[label=above left:$A$] (A) at (95:1);
        \coordinate[label=below left:$B$] (B) at (200:1);
        \coordinate[label=below left:$D$] (D) at (-110:1);
        \coordinate[label=below right:$C$] (C) at (-60:1);
        \draw[name path=circ] (0,0) circle (1);
        \path[name path=AC] (A) -- ($(A)!1.2!30:(B)$);
%         \path[name path=AC] (D) -- ($(D)!1.2!-15:(B)$);
%         \path[name intersections={of=AC and circ, by={[label=below right:$C$]C}}];
%         \path[name intersections={of=BD and circ, by={[label=above right:$D$]D}}];
        \draw[line join=bevel] (A) -- (B) --  cycle;
        \draw[line join=bevel] (A) -- (D) --  cycle;
        \draw[line join=bevel] (A) -- (C) --  cycle;
        \draw[line join=bevel] (D) -- (C) --  cycle;
        \draw[line join=bevel] (B) -- (D) --  cycle;
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

看一下下面的代码:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=5]
\draw[blue] (0,0) circle (1);
\node[circle, fill=orange, label=above left  :$A$] (A) at (95:1) {};
        \coordinate[label=below left  :$B$] (B) at (200:1);
        \coordinate[label=below left  :$D$] (D) at (-110:1);
        \coordinate[label=below right :$C$] (C) at (-60:1);
        \draw[blue] (A) -- (B) ;
        \draw[blue] (A) -- (D) ;
        \draw[blue] (A) -- (C) ;
        \draw[blue,shorten <= -30,shorten >= -30] (D) -- (C);
        \draw[blue] (B) -- (D)  node[midway,above,font=\tiny,color=black]{$\theta_{1}$};
\end{tikzpicture}
\end{document}

编译后得到

在此处输入图片描述

这并非您真正想要的,但是您已经掌握了获得您想要的东西的所有要素。

答案2

版本元帖子,包裹在luamplib. 用 编译lualatex

在此处输入图片描述

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);

    path circ;
    pair A,B,C,D;

    circ = fullcircle scaled 8cm;
    A = point   95*8/360 of circ;
    B = point  200*8/360 of circ;
    C = point  -60*8/360 of circ;
    D = point -110*8/360 of circ;

    drawoptions(withcolor 1/3[blue,white]);

    draw circ;
    draw A--B;
    draw A--C;
    draw A--D;

    draw (-1/4)[B,D] -- 5/4[B,D];
    draw (-1/4)[C,D] -- 5/4[C,D];

    drawoptions();

    forsuffixes @=A,B,C,D:
       label("$" & str @ & "$", @ scaled 10/9);
       fill fullcircle scaled dotlabeldiam shifted @ withcolor red+1/2green;
    endfor

    label.urt("$e_1$", 1/2[B,D]);
    label.top("$e_2$", 1/2[C,D]);

endfig;
\end{mplibcode}
\end{document}

笔记

这些行

 draw (-1/4)[B,D] -- 5/4[B,D];
 draw (-1/4)[C,D] -- 5/4[C,D];

向您展示一种使用 Metapost 绘制“穿过”两点的线的简单方法,使用中介语法。一般来说,f[a,b]给出穿过的线上的一个点ab其中是从到的f距离的一小部分,因此给出中点,依此类推。 ab1/2[a,b]

但请注意,你需要在负中位数周围加上括号,以防止 MP 将其解释为-(1/4[B,D])这不是你想要的点。我也可以写成

draw 5/4[D,B] -- 5/4[B,D];
draw 5/4[D,C] -- 5/4[C,D];

避免这个问题。也许更美丽,但也更难遵循。

循环forsuffixes使用@作为循环变量。scaled定位标签的技巧只有在图表以原点为中心时才有效。

相关内容