Saltar al contenido

¿Cómo crear líneas curvas en Tikz que pasen por puntos específicos?

Esta inquietud se puede solucionar de diversas formas, pero en este caso te enseñamos la que en nuestra opinión es la resolución más completa.

Solución:

Hay (al menos) tres posibilidades:

  • Construye un polinomio con las propiedades que quieras, como puntos que tiene que pasar, pendientes, mínimos, máximos, etc. Requiere una pequeña cantidad de matemáticas. Ver mi otra respuesta.

  • Hay una respuesta de Andrew usando las instalaciones de TikZ.

  • Para una curva falsa, elija los puntos que la curva tiene que pasar como el comienzo o el final de draw comandos, no como los controles. Además, utilice coordenadas relativas (precedidas por +) como controles. Estos corresponderán a la tangente en este punto. Asegúrese de que los vectores de control en un punto apunten en direcciones opuestas. Pueden tener una longitud diferente, pero deben tener el mismo ángulo, de lo contrario, habrá una curva en este punto.

Ejemplo:k^* es el punto final de la primera draw y el punto de partida de la segunda, por lo que la curva pasará por k^*. Los controles relacionados con k^* son +(-1,2) y +(0.5,-1). Tenga en cuenta que apuntan en direcciones opuestas. Cuanto más largo sea un vector de control, más tiempo intentará la curva seguir esta dirección.

ingrese la descripción de la imagen aquí

documentclassminimal
usepackagetikz
usetikzlibrarycalc,arrows
begindocument

begintikzpicture[
    scale=1.5,
    axis/.style=very thick, ->, >=stealth',
    important line/.style=thick,
    dashed line/.style=dashed, thick,
    every node/.style=color=black,
 ]

draw[axis] (0,0)  -- (6,0) node(xline)[right] $k$;
draw[axis] (0,-2) -- (0,2) node(yline)[above] $dotk$;

draw (0,0) .. controls +(1.5,3) and +(-1,2) .. (4,0);
draw (4,0) .. controls +(0.5,-1) and +(-0.8,0.5) .. (6,-2);

fill[black] (4,0) circle (1pt) node[above right] $k^*$;

% just for the explanation
beginscope[->,blue,every node/.style=blue,sloped]
draw (0,0) -- node[yshift=1.5ex]$(1.5,3)$ ($(0,0)+(1.5,3)$);
draw (4,0) -- node[yshift=1.5ex]$(-1,2)$ ($(4,0)+(-1,2)$);
draw (4,0) -- node[yshift=-1.5ex]$(0.5,-1)$ ($(4,0)+(0.5,-1)$);
draw (6,-2) -- node[yshift=-1.5ex]$(-0.8,0.5)$ ($(6,-2)+(-0.8,0.5)$);
endscope
endtikzpicture

enddocument

Él hobby está diseñado para facilitar la producción de una curva que pasa por puntos específicos. Se diseñó con curvas 2D en mente y necesita un poco de persuasión para dibujar gráficos honestos, pero aun así produce una curva razonable en esta situación.

documentclassarticle
%urlhttps://tex.stackexchange.com/q/582112/86
usepackagetikz
usetikzlibrarycalc,arrows,hobby
begindocument

begintikzpicture[
    scale=1.5,
    axis/.style=very thick, ->, >=stealth',
    important line/.style=thick,
    dashed line/.style=dashed, thick,
    every node/.style=color=black,,
    use Hobby shortcut
 ]

draw[axis] (0,0)  -- (6,0) node(xline)[right] $k$;
draw[axis] (0,-2) -- (0,2) node(yline)[above] $dotk$;

draw (0,0) .. controls (0,2) and (2,2) .. (2,2);
draw (2,2) .. controls (4,2) and (4,0) .. (6,-2);

fill[black] (4,0) circle (1pt) node[above right] $k^*$;
draw[orange, ultra thick] ([out angle=70]0,0) .. (2,2) .. (4,0) .. (6,-2);
endtikzpicture

enddocument

Curva que pasa por un punto específico del eje

Aquí hay una solución donde primero determinamos un polinomio que luego trazamos. La complejidad (grado) del polinomio depende del número de restricciones que queramos imponer. Suponemos que la función debe pasar por los puntos (0,0), (2,2) y (4,0)y opcionalmente también debe pasar por (6,-2). Esto significa que buscamos un polinomio cuadrático o cúbico (tres o cuatro grados de libertad).

Polinomio cuadrático:

p(x) = a + bx + cx^2
constraints: p(0)=0, p(2)=2, p(4)=0
solution: a=0, b=2, c=-1/2
I.e.: p(x) = 2x + x^2/2

Polinomio cúbico:

p(x) = a + bx + cx^2 + dx^3
constraints: p(0)=0, p(2)=2, p(4)=0, p(6)=-2
solution: a=0, b=8/3, c=-1, d=1/12
I.e.: p(x) = 8x/3 - x^2 + x^3/12

ingrese la descripción de la imagen aquí

documentclassminimal
usepackagetikz
usetikzlibrarycalc,arrows
begindocument

begintikzpicture[
    scale=1.5,
    axis/.style=very thick, ->, >=stealth',
    important line/.style=thick,
    dashed line/.style=dashed, thick,
    every node/.style=color=black,
 ]

draw[axis] (0,0)  -- (6,0) node(xline)[right] $k$;
draw[axis] (0,-2) -- (0,2) node(yline)[above] $dotk$;
fill[black] (4,0) circle (1pt) node[above right] $k^*$;

draw[domain=0:6,blue,smooth] plot (x,2*x-x^2/2);
draw[domain=0:6,red,smooth] plot (x,8*x/3-x^2+x^3/12);
endtikzpicture

enddocument

Aquí tienes las comentarios y valoraciones

Te invitamos a amparar nuestra tarea poniendo un comentario y dejando una puntuación te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *