我想制作一个经过一些点的图形。我选择了对称的点,以便得到一条对称曲线,但曲线却不是。我可以定义一些额外的点,但它们一定是更好的选择吗?
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usepackage{graphicx}
\begin{document}
\begin{center}
\begin{tikzpicture}
\tkzInit[ymin=0,ymax=9,xmin=0,xmax=14]
\tkzClip
\tkzGrid
\tkzDefPoints{1/2/A, 1/8/Y, 13/2/X, 1/7/B, 13/7/E, 7/3/K, 7/7/L, 4/3.5/J, 10/3.5/M}
\tkzLabelPoints[above right](B,E);
\draw[->, very thick] (A) -- (Y) node[above, yshift=-1cm, xshift=-0.3cm, rotate=90] {effectiviteit};
\draw[->, very thick] (A) -- (X) node[below, xshift=-0.4cm, yshift=-0.3cm] {tijd};
\tkzDrawPoints[color=red, fill=red](B,E);
%\draw[thick,blue,rounded corners=15mm] (B)--(K)--(E);
\draw[very thick, red] plot [smooth] coordinates {(B) (J) (L) (M) (E)};
\end{tikzpicture}
\end{center}
\end{document}
导致
下一张图片(基于这张图片)应该是:
答案1
您可以通过确保曲线离开 B 并进入 E 的角度与 L 处的角度相匹配来使图形对称。实现此目的的一种方法是绘制 B 之前和 E 之后的曲线,但剪切所绘制的内容以便仅显示 B 和 E 之间的内容。
\documentclass[tikz,10pt,border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzInit[ymin=0,ymax=9,xmin=0,xmax=14]
\tkzClip
\tkzGrid
\tkzDefPoints{1/2/A, 1/8/Y, 13/2/X, 1/7/B, 13/7/E, 7/3/K, 7/7/L, 4/3.5/J, 10/3.5/M, -2/3.5/C, 16/3.5/D}
\tkzLabelPoints[above right](B,E);
\draw[->, very thick] (A) -- (Y) node[above, yshift=-1cm, xshift=-0.3cm, rotate=90] {effectiviteit};
\draw[->, very thick] (A) -- (X) node[below, xshift=-0.4cm, yshift=-0.3cm] {tijd};
\tkzDrawPoints[color=red, fill=red](B,E);
%\draw[thick,blue,rounded corners=15mm] (B)--(K)--(E);
\begin{scope}
\clip (B |- Y) -| (E |- X) -| cycle;
\draw[very thick, red] plot [smooth] coordinates {(C) (B) (J) (L) (M) (E) (D)};
\end{scope}
\end{tikzpicture}
\end{document}
一些解释
\clip (B |- Y) -| (E |- X) -| cycle;
(B |- Y)
定义一个与 B 垂直对齐、与 Y 水平对齐的坐标。(它需要位于 B 上方,否则 L 处的曲线顶部会变平。)类似地,(E |- X)
该坐标与 E 垂直对齐、与 X 水平对齐。换句话说,它使用 E 的X坐标和 X是协调。
(p) -| (q)
告诉 TiKZ 构建一条从 p 到 q 的路径,该路径首先完成所有水平操作,然后完成所有垂直操作。
因此,(B |- Y) -| (E |- X) -| cycle
定义一条矩形路径,从略高于 B 的坐标穿过略高于 E 的坐标,然后向下到远低于 E 的坐标,再穿过远低于 B 的坐标,然后再回到略高于 B 的坐标。
该矩形定义了绘图的裁剪区域。矩形区域之外的任何内容都不会显示。
这里有一张可能更清楚的图表:
答案2
尝试 Hobby Tikz 库。它允许您指定入射角和出射角,并生成更平滑的曲线。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetikzlibrary{hobby}
\usepackage{graphicx}
\begin{document}
\begin{center}
\begin{tikzpicture}
\tkzInit[ymin=0,ymax=9,xmin=0,xmax=14]
\tkzClip
\tkzGrid
\tkzDefPoints{1/2/A, 1/8/Y, 13/2/X, 1/7/B, 13/7/E, 7/3/K, 7/7/L, 4/3.5/J, 10/3.5/M}
\tkzLabelPoints[above right](B,E);
\draw[->, very thick] (A) -- (Y) node[above, yshift=-1cm, xshift=-0.3cm, rotate=90] {effectiviteit};
\draw[->, very thick] (A) -- (X) node[below, xshift=-0.4cm, yshift=-0.3cm] {tijd};
\tkzDrawPoints[color=red, fill=red](B,E);
%\draw[thick,blue,rounded corners=15mm] (B)--(K)--(E);
\draw[very thick, red] plot [smooth] coordinates {(B) (J) (L) (M) (E)};
\draw[use Hobby shortcut,blue] ([out angle=0,in angle=180]B) .. (J) .. (L) .. (M) .. (E);
\end{tikzpicture}
\end{center}
\end{document}
(不幸的是,我现在正在使用 iPad,因此无法上传截图。我可以向你保证它看起来很漂亮,而且对称。)