代码

代码

我正在尝试重新创建以下图像

在此处输入图片描述

经过一番调整后,我能够创建以下内容

在此处输入图片描述

代码可以在底部找到。虽然我对结果很满意,但我对我的方法/代码并不满意。

有没有更干净/更好的方法来创建相关图像?特别是

  • 有什么方法可以避免猜测半圆吗?
  • 用多项式能得到更好的结果吗?
  • 有没有更好的方法来处理矩形和圆形之间的交叉?整个部分\tkzDrawPolygon[color=dark,fill=dark,line width = 0cm](A,E,F,D)感觉不对劲,很脏。
  • 可以更轻松地创建矩形吗?
  • 是否可以使用任何覆盖或其他东西来确保 tikz 解决方案准确?现在我将图像导入 Geogebra 并进行调整,直到我实现了“合理的”结果。但是,除了颜色之外,它并不是特别准确。

在此处输入图片描述

代码

\documentclass[tikz,border=1mm]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}

\usepackage{color}

\definecolor{light}{HTML}{c48fcd}
\definecolor{medium}{HTML}{a757b2}
\definecolor{dark}{HTML}{9637a0}

\begin{document}

\begin{tikzpicture}
    \tkzInit[xmax=18.72, ymax=3.2]
    \tkzClip
    \tkzDefPoint(0,0){A} \tkzDefPoint(18.72,0){B}
    \tkzDefPoint(18.72,3.2){C}
    \tkzDefPoint(0,3.2){D}
    \tkzDefPoint(10,0){E}
    \tkzDefPoint(10,3.2){F}

    \tkzDefPoint(6.96, 16.5){S1}
    \tkzDefPoint(8.02, 13.68){S2}

    \tkzDefPoint(14.00028,1.24159){R1}
    \tkzDefPoint(14.76398,1.2677){R2}

    \tkzDrawPolygon[color=medium,fill=medium,line width = 0cm](A,B,C,D)

    \tkzDrawCircle[color=light, fill=light](S2,R2)
    \tkzDrawCircle[color=dark, fill=dark](S1,R1)    

    \tkzDrawPolygon[color=dark,fill=dark,line width = 0cm](A,E,F,D)

\end{tikzpicture}

\end{document}

答案1

这是一个更短的代码,在我看来,它可以很好地重现您的屏幕截图。我还解决了您的问题,使其精确地适合页面。(\usepackage[showframe]{geometry}用于显示它有效。)

\documentclass{article}
\usepackage{tikz}
\usepackage[showframe]{geometry}
\definecolor{light}{HTML}{c48fcd}
\definecolor{medium}{HTML}{a757b2}
\definecolor{dark}{HTML}{9637a0}
\begin{document}
\noindent%
\pgfmathsetmacro{\myscale}{\textwidth/18.85cm}%
\begin{tikzpicture}[nodes={inner sep=0pt,outer sep=0pt},scale=\myscale]
 \fill[dark]  (0,0) rectangle (18.85,3.25);
 \fill[light] (10,0) to[out=14,in=-140] (17.32,3.25)--
  (17.6,3.25) to[out=-140,in=15] (11.7,0) -- cycle;
 \fill[medium] (17.6,3.25) to[out=-140,in=15] (11.7,0) -| (18.85,3.25) -- cycle;
 \node[anchor=south west,text=white,font=\sffamily\bfseries,scale=3*\myscale] at (0.5,0.75){Prove};
 \node[anchor=south east,text=white,font=\sffamily\bfseries,scale=2*\myscale] at (18.3,0.4)
 {24.05.2019};
\end{tikzpicture}
\end{document}

在此处输入图片描述

至于你的问题:

  • 有什么方法可以避免猜测半圆吗?——您需要知道路径应该是什么。在我看来,圆形并不是一个糟糕的选择。
  • 用多项式是否可以得到更好的结果?——我不明白多项式有什么帮助,但有很多方法可以绘制这样的弧。
  • 有没有更好的方法来实现矩形和圆形之间的交叉?整个 \tkzDrawPolygoncolor=dark,fill=dark,line width = 0cm 部分感觉不对劲,很脏。-- 是的,请参阅下面的代码。您不需要任何内容​​,tkz-euclide并且可以大大缩短代码。
  • 可以更轻松地创建矩形吗? - 是的,rectangle下面使用路径构造。
  • 是否可以使用任何覆盖或其他东西来确保 tikz 解决方案准确?现在我将图像导入 Geogebra 并进行调整,直到我实现了“合理的”结果。但是,除了颜色之外,它并不是特别准确。——“准确”是指什么?如果您对弧线有明确的规定,则可以实现非常好的准确性。

下面的代码要短得多。还要注意的是,tikzloads xcolor,所以不需要 load color

\documentclass[tikz,border=1mm]{standalone}
\definecolor{light}{HTML}{c48fcd}
\definecolor{medium}{HTML}{a757b2}
\definecolor{dark}{HTML}{9637a0}

\begin{document}

\begin{tikzpicture}
    \fill[dark] (0,0) rectangle (18.72,3.2);
    \clip (6,0) rectangle (18.72,3.2);
    \pgfmathsetmacro{\rone}{veclen(7.04,15.35)}
    \pgfmathsetmacro{\rtwo}{veclen(6.74,12.41)}
    \fill[light,even odd rule] (6.9, 16.5) circle[radius={\rone*1cm}]
    (8.02, 13.68) circle[radius={\rtwo*1cm}];
    \fill[medium,even odd rule]     (8.02, 13.68) circle[radius={\rtwo*1cm}]
    (8.02, 13.68) circle[radius={2*\rtwo*1cm}];
\end{tikzpicture}

\end{document}

在此处输入图片描述

如果您能给我提示一下获取该图像的具体方法,那么就有可能使其非常准确。

相关内容