我正在尝试重新创建以下图像
经过一番调整后,我能够创建以下内容
代码可以在底部找到。虽然我对结果很满意,但我对我的方法/代码并不满意。
有没有更干净/更好的方法来创建相关图像?特别是
- 有什么方法可以避免猜测半圆吗?
- 用多项式能得到更好的结果吗?
- 有没有更好的方法来处理矩形和圆形之间的交叉?整个部分
\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 并进行调整,直到我实现了“合理的”结果。但是,除了颜色之外,它并不是特别准确。——“准确”是指什么?如果您对弧线有明确的规定,则可以实现非常好的准确性。
下面的代码要短得多。还要注意的是,tikz
loads 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}
如果您能给我提示一下获取该图像的具体方法,那么就有可能使其非常准确。