Saltar al contenido

Dibujar curvas rectilíneas en Tikz, también conocido como dibujo Etch-a-Sketch

Indagamos por diferentes espacios y así brindarte la solución para tu duda, si tienes dificultades puedes dejar la pregunta y te contestamos porque estamos para servirte.

Solución:

draw (20,12) -- ++(2,0) -- ++(0,2) -- ++(-3,0) -- ++(45:3);

Utilizar ++ antes de cada nueva coordenada incremental para hacerla relativa a la última y poner allí el lápiz.

Aquí hay un ejemplo completo:

documentclassarticle
usepackagetikz
begindocument
tikzdraw (20,12) -- ++(2,0) -- ++(0,2) -- ++(-3,0) -- ++(30:3) [rounded corners=10pt]-- ++(5,0) -- ++(0,-6) -- ++(-7,0) -- cycle;
enddocument

ingrese la descripción de la imagen aquí

Por supuesto, combinando esto con -| o |- los operadores de ruta pueden simplificar el código aún más; las siguientes dos piezas de código producen el mismo resultado:

tikzdraw (20,12) -- ++(2,0) -- ++(0,2) -- ++(3,0) -- ++(0,1) -- ++(1,0) -- ++(0,-3) -- ++(2,0);parbigskip

y

tikzdraw (20,12) -| ++(2,2) -| ++(3,1) -- ++(1,0) |- ++(2,-3);

No creo que definir comandos en este caso agregue nada; de hecho, creo que reduce la funcionalidad de la sintaxis existente (que ya es simple). El ejemplo demuestra que puede usar, por ejemplo, coordenadas polares y modificar (hasta las limitaciones de TikZ) la ruta attributes a mitad de camino; incluso si la pregunta actual no requiere esto, es bueno tener la posibilidad de hacer ese tipo de modificación si es necesario.

No estoy seguro de que sea lo que se requiere, pero aquí hay un rectilinear decoración que logra el efecto deseado:

documentclass[tikz,border=5]standalone
usetikzlibrarydecorations
pgfdeclaredecorationrectilinearstart%
statestart[width=pgfdecorationsegmentlength/2,
  next state=draw above]%
  pgfpathmovetopgfpointorigin%
  pgfcoordinate@1pgfpointorigin%

statedraw above[width=pgfdecorationsegmentlength/2, 
  next state=draw below]%
  pgfcoordinate@2pgfpointorigin%
  pgftransformreset%
  pgfpointanchor@1centerpgfgetlastxyab%
  pgfpointanchor@2centerpgfgetlastxycd%
  pgfpathlinetopgfqpointad%
  pgfpathlinetopgfqpointcd%
  pgfnodealias@1@2%

statedraw below[width=pgfdecorationsegmentlength/2, 
  next state=draw above]%
  pgfcoordinate@2pgfpointorigin%
  pgftransformreset%
  pgfpointanchor@1centerpgfgetlastxyab%
  pgfpointanchor@2centerpgfgetlastxycd%
  pgfpathlinetopgfqpointcb%
  pgfpathlinetopgfqpointcd%
  pgfnodealias@1@2%

statefinal%
  pgftransformreset%
  pgfpointanchor@1centerpgfgetlastxyab%
  pgfpointdecoratedpathlastpgfgetlastxycd%
  pgfpathlinetopgfqpointad%
  pgfpathlinetopgfqpointcd%


tikzsetrectilinear/.style=
  decoration=rectilinear, #1, decorate

begindocument
begintikzpicture[very thick, line join=round, line cap=round]
draw [gray, postaction=rectilinear, draw=red]
  (0,4) -- ++(30:2) -- ++(300:3);
draw [gray, postaction=rectilinear, draw=green!50!black]
  (0,2) circle [radius=1];
draw  [gray, postaction=rectilinear=segment length=0.25cm, draw=blue]
  (0,0) -- (3,1) arc (90:-90:1) .. controls ++(180:1) and ++(225:1) .. cycle;
endtikzpicture
enddocument

ingrese la descripción de la imagen aquí

aquí cuatro macro Start, Goleft, Godown y Goup para crear la ruta deseada.

Código

documentclass[border=5mm]standalone
usepackagetikz
usetikzlibrarycalc

tikzsetevery node/.style=inner sep=0pt,minimum size=0pt

newcommandStart[1]node (A) at #1 ;
newcommandGoleft[1]draw($(A)+( -0.5pgflinewidth ,0.5pgflinewidth)$)--+(#1,0)node(A);
newcommandGodown[1]draw($(A)+(-0.5pgflinewidth,0)$)--+(0,-#1)node(A);
newcommandGoup[1]draw($(A)+(-0.5pgflinewidth,0)$)--+(0,#1)node(A);

begindocument

begintikzpicture
   Start(20,12)
   Goleft2
   Godown2
   Goleft3
   Godown1
   Goleft4
   Goup3
endtikzpicture

enddocument

Producción

ingrese la descripción de la imagen aquí

Recuerda dar difusión a esta noticia si te ayudó.

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



Utiliza Nuestro Buscador

Deja una respuesta

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