
Dadas duas linhas, quero conectar ambas de uma forma que a linha de conexão seja suave. Por exemplo, considere a seguinte imagem:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\coordinate (v1) at (0,0);
\coordinate (v2) at (2,0);
\coordinate (v3) at (4,2);
\coordinate (v4) at (4,4);
\draw[fill, black] (v1) circle[radius=1pt];
\draw[fill, black] (v2) circle[radius=1pt];
\draw[fill, black] (v3) circle[radius=1pt];
\draw[fill, black] (v4) circle[radius=1pt];
\draw (v1)--(v2);
\draw (v3)--(v4);
\draw (2,2) circle(2);
\end{tikzpicture}
\end{document}
Na verdade, estou interessado apenas no quarto do círculo que conecta as duas linhas. Mas estou tendo problemas
- Removendo os outros 75% do círculo e, mais importante,
- Como calcular tal linha para linhas não perpendiculares.
Tentei usar \draw[bend left]
, mas isso nem sempre resulta em uma conexão tranquila. Alguém conhece uma abordagem melhor?
Responder1
É exatamente isso que o controls
comando faz: juntar-se suavemente porCurvas de Bézier, não importa se esses segmentos são perpendiculares ou não. Além disso, você pode alterar o fator escalar .5
, .8
, 1.5
, etc. para controlar as forças de disparo.
(A).. controls +(P) and +(Q) .. (B)
isso é equivalente a
(A).. controls (A)+(P) and (B)+(Q) .. (B)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\path
(0,0) coordinate (v1) node[below]{$v_1$}
(1,2) coordinate (v2) node[left]{$v_2$}
(4,2) coordinate (v3) node[right]{$v_3$}
(3,4) coordinate (v4) node[above]{$v_4$}
;
\draw (v1)--(v2) (v3)--(v4);
\draw[red] (v2).. controls +($.5*(v2)-.5*(v1)$) and +($.8*(v3)-.8*(v4)$) .. (v3);
\foreach \p in {v1,v2,v3,v4}
\fill (\p) circle(2pt);
\end{tikzpicture}
\begin{tikzpicture}
\path
(0,0) coordinate (v1) node[below]{$v_1$}
(2,0) coordinate (v2) node[below]{$v_2$}
(4,2) coordinate (v3) node[right]{$v_3$}
(4,4) coordinate (v4) node[above]{$v_4$}
;
\draw (v1)--(v2) (v3)--(v4);
\draw[blue] (v2).. controls +($.5*(v2)-.5*(v1)$) and +($.8*(v3)-.8*(v4)$) .. (v3);
\foreach \p in {v1,v2,v3,v4}
\fill (\p) circle(2pt);
\end{tikzpicture}
\end{document}
Responder2
Você pode usar as teclas out
e in
. Pegue um argumento (um ângulo) e funcione essencialmente como bend left
, mas você pode escolher o ângulo que funciona melhor em ambas as extremidades.
\documentclass[11pt,a4paper]{amsart}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\coordinate (v1) at (0,0);
\coordinate (v2) at (2,0);
\coordinate (v3) at (4,2);
\coordinate (v4) at (4,4);
\draw[fill, black] (v1) circle[radius=1pt];
\draw[fill, black] (v2) circle[radius=1pt];
\draw[fill, black] (v3) circle[radius=1pt];
\draw[fill, black] (v4) circle[radius=1pt];
\draw (v1)--(v2);
\draw (v3)--(v4);
\draw (2,0) to [out=0, in=270] (4,2);
\end{tikzpicture}
\end{document}
Neste caso específico, como você observou, você também pode inserir apenas um arco de círculo. Por exemplo, a saída do exemplo acima é a mesma se a última linha da imagem TikZ for substituída por
\draw (2,0) arc [start angle=-90, end angle=0, radius=2];