Dibuja una línea entre dos líneas que inserte cada línea suavemente

Dibuja una línea entre dos líneas que inserte cada línea suavemente

Dadas dos líneas, quiero conectarlas de manera tal que la línea de conexión sea suave. Por ejemplo, considere la siguiente imagen:

\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}

En realidad, sólo me interesa el cuarto del círculo que conecta las dos líneas. pero estoy teniendo problemas

  1. Quitando el otro 75% del círculo y lo más importante
  2. Cómo calcular una línea de este tipo para líneas no perpendiculares.

Intenté usar \draw[bend left], pero esto no siempre produce una conexión fluida. ¿Alguien conoce un enfoque mejor?

Respuesta1

Eso es exactamente lo que controlshace el comando: unirse suavementecurvas de Bézier, no importa que estos segmentos sean perpendiculares o no. Además, puedes cambiar el factor escalar .5, .8, 1.5, etc. para controlar las fuerzas de disparo.

(A).. controls +(P) and +(Q) .. (B)

eso es equivalente a

(A).. controls (A)+(P) and (B)+(Q) .. (B)

ingrese la descripción de la imagen aquí

\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}

Respuesta2

Puedes utilizar las teclas outy in. Toman un argumento (un ángulo) y funcionan esencialmente como bend left, pero puedes elegir el ángulo que funcione mejor en ambos extremos.

\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}

En este caso particular, como habrás notado, también puedes insertar solo un arco de círculo. Por ejemplo, el resultado del ejemplo anterior es el mismo si la última línea de la imagen TikZ se reemplaza con

\draw (2,0) arc [start angle=-90, end angle=0, radius=2];

información relacionada