Saltar al contenido

Nodo Tikz inclinado con rotación y escala

Solución:

Usar nodes=rotate= en lugar de transform shape:

En contraste con transform shape los nodes=rotate= pasa solo la transformación seleccionado por su argumento (es decir rotate=) a todos los nodos dentro del alcance.

Definiendo un nuevo estilo myrotate como abreviatura

tikzset
  myrotate/.style=rotate=#1,nodes=rotate=#1

y usando myrotate= en lugar de rotate= resultados en

ingrese la descripción de la imagen aquí

Código:

documentclassarticle
usepackagetikz
tikzset
  myrotate/.style=rotate=#1,nodes=rotate=#1


newcommand*MyDraw[1]%
    draw [ultra thick, -latex] (0,0) -- (1,4) 
        node [midway, above, sloped, align=center] #1;
%

begindocument
begintikzpicture
    MyDrawnot rotated;
endtikzpicture%
% --------------------------------- apply "rotation"
begintikzpicture
    beginscope[myrotate=-25,red]
        MyDrawrotated;
    endscope
endtikzpicture%
% --------------------------------- apply "rotation" and "scale"
begintikzpicture
    beginscope[myrotate=-15,scale=1.3, blue]
        MyDrawrotated and scaled;
    endscope
endtikzpicture%
% --------------------------------- apply "rotation", "scale" and "transform shape"
begintikzpicture
    beginscope[myrotate=-15, scale=1.5, orange]
        MyDrawrotated, scaled and \ ``transform shape";
    endscope
endtikzpicture
enddocument

Solía ​​escribir una biblioteca de álgebra lineal para TikZ (principalmente para manejar números complejos), pero desde ahora TikZ está usando Lua de manera extensiva, eso se volvió bastante obsoleto, así que lo detuve. Sin embargo, aquí hay un robo rápido de la descomposición QR de Givens para una matriz de dos por dos que separa la matriz de transformación en escala y rotación y solo usamos la parte de rotación y omitimos la parte de escala / inclinación.

Se puede usar la misma idea para cancelar la rotación y mantener la escala para responder la pregunta en los comentarios. Echaré un vistazo si puedo dedicar más tiempo.

documentclassarticle
usepackagetikz

newcommand*MyDraw[1]%
    draw [ultra thick, -latex] (0,0) -- (1,4) 
        node [midway, above, sloped, align=center,cancel scale] #1;
%
tikzsetcancel scale/.code=pgfmathcancelscale

makeatletter
defpgfmathcancelscale%
  pgfgettransformentries[email protected]
[email protected][email protected][email protected][email protected][email protected]% pgfmathsetmacro[email protected][email protected]/veclen([email protected],[email protected])% pgfmathsetmacro[email protected]-[email protected]/veclen([email protected],[email protected])% pgfsettransformentries[email protected][email protected]-[email protected][email protected][email protected][email protected]% makeatother begindocument begintikzpicture beginscope[rotate=-15, scale=1.5, transform shape, orange] MyDrawrotated, scaled and \ ``transform shape"; beginscope[rotate=40, scale=0.2, shift=(10cm,-5cm),transform shape, blue] MyDrawrotated, scaled and \ ``transform shape"; endscope endscope endtikzpicture enddocument

ingrese la descripción de la imagen aquí

Como seguimiento a mi comentario, esto es lo que he intentado con esta respuesta de la pregunta Acceder a la opción de escala dentro del entorno TikZ.

Yo definiria un nuevo key Sloped que adivina el xscale y yscale factor para cancelar el escalado mientras se usa sloped y transform shape para mantener la rotación:

tikzset
  Sloped/.code=%
  pgfgettransformentriesmyamybmycmydmysmyt%
  tikzsetsloped, transform shape, xscale=1/mya, yscale=1/myd%  

Código

documentclass[margin=0.5cm]standalone
usepackagetikz

tikzset%
  Sloped/.code=%
  pgfgettransformentriesmyamybmycmydmysmyt%
  tikzsetsloped, transform shape, xscale=1/mya, yscale=1/myd%  
%

newcommand*MyDraw[1]%
    draw [ultra thick, -latex] (0,0) -- (70:5) 
        node [midway, above, Sloped, align=center] #1;
%

begindocument
  begintikzpicture
      MyDrawnot rotated;
  endtikzpicture%
  %--------------------------------- apply "rotation"
  begintikzpicture
      beginscope[rotate=-25, red]
          MyDrawrotated;
      endscope
  endtikzpicture%
  % --------------------------------- apply "rotation" and "scale"
  begintikzpicture
      beginscope[rotate=-15, scale=1.3, blue]
          MyDrawrotated and scaled;
      endscope
  endtikzpicture%
  % --------------------------------- apply "rotation", "scale" and "transform shape"
  begintikzpicture
      beginscope[rotate=-15, scale=1.5, transform shape, orange]
          MyDrawrotated, scaled and \ ``transform shape";
      endscope
  endtikzpicture
enddocument

Producción

Producción

Problema

Como mencionó Peter Grill en el comentario, no funciona muy bien, el texto es un poco más pequeño. Elimino mi respuesta tan pronto como alguien me diga por qué no funciona 😉

Problema al comparar con la salida exacta

Reseñas y valoraciones del tutorial

Si sostienes algún titubeo o disposición de acrecentar nuestro escrito te invitamos dejar un exégesis y con placer lo interpretaremos.

¡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 *