更新

更新

我正在尝试构建一个如下所示的 tikzpicture:

我想将其变成 tikz。

以下是我所拥有的:

\documentclass[12pt]{article}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usepackage{tkz-euclide}

\begin{document}

\begin{tikzpicture}[xscale=.6, yscale=.6]
\draw [<->,thick] (0,8) node [left] {$\mathbb{R}^{n}$}
    |- (8,0);

\draw [<->,thick] (10,8) node [left] {$\mathbb{R}^{m}$}
    |- (18,0);

\tkzDefPoint(4,1){A}
\tkzDefPoint(.5,3){B}
\tkzDefPoint(1,5){C}
\tkzDefPoint(1.2,7){D}
\tkzDefPoint(5.3,7.5){E}
\tkzDefPoint(7,6){F}
\tkzDefPoint(6,4){G}
\tkzDefPoint(6.7,3){H}

\draw [decoration={random steps,segment length=.75cm,amplitude=.5cm},
        decorate, rounded corners=.3cm]
     (A) -- (B) -- (C) -- (D) -- (E) -- (F) -- (G) -- (H) -- (A);

\draw [fill] (4,6) circle (.05) node [below] {$\bar{u}$};
\draw [dashed] (4,6) circle (1) node [below] {$B_{\delta}\left(\bar{u}\right)$};

\tkzDefPoint(14,1){I}
\tkzDefPoint(10.5,3){J}
\tkzDefPoint(11,5){K}
\tkzDefPoint(11.2,7){L}
\tkzDefPoint(15.3,7.5){M}
\tkzDefPoint(17,6){N}
\tkzDefPoint(16,4){O}
\tkzDefPoint(16.7,3){P}

\draw [decoration={random steps,segment length=.75cm,amplitude=.5cm},
        decorate, rounded corners=.3cm]
     (I) -- (J) -- (K) -- (L) -- (M) -- (N) -- (O) -- (P) -- (I);

\draw [fill] (14,3) circle (.05) node [above] {$f\left(\bar{u}\right)$};
\draw [dashed] (14,3) circle (1) node [below] {$f\left(B_{\epsilon}\left(\bar{u}\right)\right)$};

\end{tikzpicture}

\end{document}

其结果为:

我的代码的产品。

然后我的无能就变得令人沮丧了。

为什么这些斑点时不时会有细线从中伸出?为什么斑点在 (4,1) 和 (14,1) 处的角不是圆的?如何正确标记点和开球?如何创建一个有品味的弯曲箭头(如标记为“f”的线条)?

编辑1

尝试找到线段长度、振幅和圆角半径之间的正确平衡非常麻烦,因此我选择了非随机斑点。

我采纳了 JLDiaz 的建议来定义 tikzstyle,但我认为我没有完全理解他们的意思。以下是我所拥有的:

\documentclass[12pt]{article}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[xscale=1, yscale=1]
\tikzstyle{ball}=[circle, dashed, minimum size=1cm, draw]
\tikzstyle{point}=[circle, fill, minimum size=.01cm, draw]

\draw [<->,thick] (0,8) node [left] {$\mathbb{R}^{n}$}
    |- (8,0);

\draw [rounded corners=10pt] (4,1) -- (.5,3) -- (1,5) -- (1.2,7) -- (5.3,7.5) -- (7,6) -- (6,4) -- (6.7,3) --cycle;

\draw (4,6) node[point] (Point1) {};
\node [below] at (Point1) {$\bar{u}$};

\draw (4, 6) node[ball] (OpenBall1) {};
\node [below] at (OpenBall1) {$B_{\delta}\left(\bar{u}\right)$};

\end{tikzpicture}

\end{document}

其结果为:

編輯作品。

我设置样式和节点的方式肯定是错误的,因为没有像 JLDiaz 描述的那样产生预期的效果。定义这些样式和节点的正确方法是什么?有没有办法让 tikz 查看碰撞并在控制台上报告错误?

答案1

为什么这些斑点上时不时会出现细小的线条?

因为台阶的幅度和圆角半径太相似了。减小半径或增加幅度和/或台阶。您必须通过反复试验找到正确的值。

为什么 (4,1) 和 (14,1) 处的斑点的角不是圆的?

因为路径没有闭合。将最后一个点替换为--cycle;

我该如何正确标记点数和空球?

它们没有像您预期的那样出现,因为abovebelow不能引用圆或其他路径,而是引用其他节点。定义一个样式ball,例如,circle, dashed, minimum size=1cm将圆替换为。然后,您可以使用和node[ball] (name) {}放置相对于的标签。(name)belowabove

我如何创建一支有品位的弯曲箭头(如标有“f”的线条)?

to[bend left]例如,使用而不是--连接适当的点。

更新

由于 OP 在遵循我的建议时遇到了一些问题,正如他在最近的编辑中所说,我认为需要更详细的解释。

  1. 关于随机斑点。我还尝试找到 和 的组合step lengthamplituderounded corners产生了不错的结果,但没有成功。所以我认为最好不要使用装饰random steps。你仍然可以使用中给出的技术获得类似随机斑点的东西其他答案

  2. 关于 tikz 样式和球的标签定位。您的代码是正确的,但在以下行中:

    \node [below] at (OpenBall1) {$B_{\delta}\left(\bar{u}\right)$};
    

    语法at (OpenBall1)意味着在该节点的中心。您必须使用at (OpenBall11.south)。另一种方法是使用positioningtikz 库和:

    \node [below=2mm of OpenBall1] {$B_etc...$};
    

    在这种情况下,Tikz 会智能地选择适当的锚点进行相对定位。

  3. 您得到的分数是“太大”。这是因为每个节点都包含一个内部填充,它始终独立于 而遵循minimum size。您可以使用 将内部填充设置为零inner sep=0pt,以便更好地控制圆的大小。

答案2

您是否考虑过采用一种不太需要手动的方法来实现您的目标?例如,inkscape2tikzInkscape 插件可以将你绘制的图表转换为Inkscape为您放入 tikz。

即使您确实想要手动创建 tikz 代码,至少您可以在不确定如何通过创建单个位并将它们转换为 tikz 来继续的情况下获得提示。

相关内容