Как изогнуть узел Tikz?

Как изогнуть узел Tikz?

Это очень простой вопрос.

Можно ли добавить эффект «кривизны» к узлу?

Рассмотрим простой прямоугольный узел:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[draw,minimum width=3cm,minimum height=2cm]{};
\end{tikzpicture}
\end{document}

Я бы хотел изогнуть его, как на следующем изображении

введите описание изображения здесь

Это должно быть применимо ко всем формам узлов.

решение1

Это одно из возможных решений через tikz pics. Здесь определен вызванный marco mynodeс 6 аргументами, который снабжен различными длинами x, y и кривизной. Последний для текстовой метки с кривой. Если текста вообще нет, удалите оформление пути в коде.

Эту же идею можно применить и к другим фигурам, например, к треугольнику, но код может потребовать некоторых изменений. Ниже приведены определения аргументов

#1=color, #2=x length, #3=y height, #4=inward bend angle, #5=outward bend angle, #6=text

введите описание изображения здесь

Код

\documentclass[border=10pt]{standalone}%{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.text}
\tikzset{%
pics/.cd,
mynode/.style args={#1#2#3#4#5#6}{
code={\node[inner sep=0pt,outer sep=0pt] at (0,0) (a) {};
\path[fill=#1] 
(a) to[bend right=#4] ++(#2,0) -- ++(0,#3) to[bend left=#5] ++(-#2,0) -- cycle;
\path[postaction={decorate},           % remove this path if no text decoration.
         decoration={raise=-15pt,
         text along path, text={#6},
         text align={left indent ={1cm}}}] 
(a) to[bend right=#4] ++(#2,0); 
}},
}

% #1=color, #2=x length, #3=y height, #4= inward bend  angle, #5= outward bend angle, #6=text

\begin{document}
\begin{tikzpicture}
  \pic {mynode={purple}{6cm}{-1cm}{20}{10}{This is my curved text.}};
  \pic at (0,-2) {mynode={olive}{6cm}{-2cm}{30}{20}{This is my curved text.}};
  \pic at (0,-5) {mynode={blue}{6cm}{-2cm}{40}{30}{This is my curved text.}};
\end{tikzpicture}
\end{document}

Связанный контент