通过对称点绘制平滑路径,得到非对称曲线

通过对称点绘制平滑路径,得到非对称曲线

我想制作一个经过一些点的图形。我选择了对称的点,以便得到一条对称曲线,但曲线却不是。我可以定义一些额外的点,但它们一定是更好的选择吗?

\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,因此无法上传截图。我可以向你保证它看起来很漂亮,而且对称。)

在此处输入图片描述

相关内容