Desenhe uma linha entre duas linhas que insira cada linha suavemente

Desenhe uma linha entre duas linhas que insira cada linha suavemente

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

  1. Removendo os outros 75% do círculo e, mais importante,
  2. 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 controlscomando 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)

insira a descrição da imagem aqui

\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 oute 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];

informação relacionada