4 votos

El orden de las transformaciones en un documento PDF

He leído el siguiente párrafo en el PDF Reference, 6ª edición (2006).

La figura 4.6 muestra el efecto del orden en que se aplican las transformaciones. La figura muestra dos secuencias de transformaciones aplicadas a un sistema de coordenadas. Después de cada transformación sucesiva, se dibuja un contorno de la letra n.

Order of transformations

No entiendo cómo se consigue el paso 2 en la segunda línea cambiando el orden de las transformaciones en la primera línea.

6voto

amd Puntos 2503

Es muy fácil malinterpretar la figura 4.6. Podría parecer que cada paso muestra el resultado de la transformación de la imagen anterior, pero eso no es lo que se muestra. Más bien, cada paso muestra el resultado de la reejecución de las mismas operaciones con una transformación adicional añadida a la cascada. Por supuesto, no hay ninguna rotación que produzca la imagen del Paso 2 en la segunda línea a partir de la imagen del Paso 1, pero re -representar el contorno de la 'n' después de concatenar una rotación a la transformación actual lo hace.

Teniendo esto en cuenta, las claves para entender los efectos de las transformaciones son que, se aplican al sistema de coordenadas, no a los puntos, y que efectivamente representan cómo mapear desde el nuevo al sistema de coordenadas antiguo es decir, la inversa de lo que normalmente se considera la matriz de una transformación del sistema de coordenadas. Cuando es el sistema de coordenadas el que se transforma, los puntos se transforman según la inversa de esa transformación, lo que junto con lo anterior significa que al transformar un punto del espacio del usuario al espacio del dispositivo, se multiplica por las matrices en orden inverso. Por ejemplo, si, en términos de PDF, escalamos el $x$ -por 3 y luego girar 30° en sentido contrario a las agujas del reloj, es decir, establecer la transformación actual en [3 0 0 1 0 0] ct [30 cos 30 sin -30 sin 30 cos 0 0] ct los puntos se transforman mediante la matriz $$\left(\begin{bmatrix}\frac{\sqrt3}2&\frac12&0\\-\frac12&\frac{\sqrt3}2&0\\0&0&1\end{bmatrix}\begin{bmatrix}\frac13&0&0\\0&1&0\\0&0&1\end{bmatrix}\right)^{-1}=\begin{bmatrix}3&0&0\\0&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}\frac{\sqrt3}2&-\frac12&0\\\frac12&\frac{\sqrt3}2&0\\0&0&1\end{bmatrix}=\begin{bmatrix}\frac{3\sqrt3}2 & -\frac32 & 0 \\ \frac12 & \frac{\sqrt3}2 & 0 \\ 0&0&1 \end{bmatrix},$$ que transforma el cuadrado unitario en el siguiente paralelogramo:

enter image description here

(Sólo para hacer las cosas más confusas, estoy utilizando la convención matemática común de los puntos como vectores columna para que las transformaciones se efectúen por multiplicación a la izquierda por una matriz -la transposición de la convención PDF). Esto es más o menos lo que tienes en el paso 2 de la segunda secuencia ilustrada en tu pregunta. En efecto, al girar primero los puntos, la transformación de escala se convierte en una cizalla.


Aquí hay un par de otras maneras de pensar en lo que está pasando. El color de un píxel en la página está determinado por el muestreo de los gráficos. El mapeo de las coordenadas de los píxeles de la página a las de los gráficos está determinado por la transformación actual, que deforma la cuadrícula que se utiliza para localizar los puntos en los gráficos. Después de escalar $x$ por 3, por ejemplo, esa cuadrícula se vuelve tres veces más densa en el en el $x$ -dirección, es decir, va desde este

enter image description here

a este

enter image description here

que tiene el efecto de estirar la imagen horizontalmente en la página. Si a continuación se gira el sistema de coordenadas 30° en sentido contrario a las agujas del reloj, se obtiene esta cuadrícula:

enter image description here

Para determinar el color de un píxel en la página, muestree el punto correspondiente en los gráficos, utilizando la cuadrícula transformada.

En lugar de "tirar" de los píxeles de los gráficos hacia la página, podemos pensar en "empujar" los gráficos hacia la página. Esto implica deformar la rejilla de los gráficos para que se alinee con la rejilla de la página, es decir, deshacer las transformaciones que se hicieron a la rejilla de los gráficos, mientras se lleva la imagen a través de la misma transformación. Si imagina que deforma la última rejilla para que vuelva a ser uniforme y esté alineada con la página, debería poder ver que el cuadrado se transformará en el paralelogramo de la primera ilustración anterior. Matemáticamente, esto implica aplicar la inversa de la transformación que se utilizó para cambiar al sistema de coordenadas. Como con cualquier operación compuesta de "deshacer", los cambios individuales deben deshacerse en el orden inverso en el que se aplicaron, por lo que el orden de las transformaciones componentes se invierte al invertirlas.

0voto

Evan Aad Puntos 2471

Para cada página física, el motor PDF establece un sistema de coordenadas que permite referirse a cada punto de la página. A todos los efectos, este sistema de coordenadas es inmutable y es el único sistema de coordenadas que el núcleo del motor "entiende".

Las transformaciones de los PDF son gestionadas por una capa intermedia entre el usuario y el núcleo del motor; el propio núcleo es ajeno al concepto de transformaciones. La capa intermedia intercepta todas las coordenadas generadas por el usuario, y las resuelve a sus representaciones absolutas en el sistema de coordenadas del núcleo, antes de pasarlas al núcleo.

La capa intermedia compone una secuencia de transformaciones sobre un último Ven, primero base aplicada. Así, si el usuario aplica la siguiente secuencia de transformaciones: $T_1, \dots, T_n$ la transformación efectiva aplicada por la capa intermedia es $T_1\circ\cdots\circ T_n$ .

En el ejemplo del diagrama, las transformaciones que se ejecutan en la segunda línea son: escala ( $S$ ), la rotación ( $R$ ), y la traducción ( $T$ ), en este orden. Por lo tanto, las transformaciones efectivas aplicadas por la capa intermedia después de cada paso son: $S$ , $S\circ R$ y $S\circ R\circ T$ respectivamente. En particular, si, una vez ejecutada la rotación, una coordenada $v$ es mencionado por el usuario, será resuelto por la capa intermedia al punto en coordenadas absolutas $S\big(R(v)\big)$ .

Supongamos que la transformación de escala escala el $x$ -eje por $2$ , pero deja el $y$ sin cambios, y supongamos que la transformación de rotación gira por $45^\circ$ en sentido contrario a las agujas del reloj. Veamos cómo los vectores unitarios $u=(1,0)$ y $v=(0,1)$ se transforman.

En primer lugar, los vectores unitarios se giran por $45^\circ$ en sentido contrario a las agujas del reloj. Como la rotación preserva los ángulos, los vectores resultantes $u'=Ru$ y $v'=Ru$ serán perpendiculares entre sí, y simétricas respecto a la $y$ -eje.

A continuación, se realiza el escalado. Como el escalado no es uniforme, y el factor de escalado a lo largo del $y$ -El eje es $1$ el efecto será un cizallamiento paralelo a la $x$ -eje, y $u'$ y $v'$ serán "arrastrados" en direcciones opuestas, lo que hará que el ángulo entre ellos aumente. En particular, los vectores resultantes $u''=S(u')$ y $v''=S(v')$ ya no serán perpendiculares entre sí.

Es importante entender que todas las transformaciones se interpretan en relación con el sistema de coordenadas original entendido por el núcleo del motor. Por ejemplo, en nuestro ejemplo la escala $S$ no se interpreta en relación con el sistema de coordenadas determinado por los vectores unitarios girados $u'$ y $v'$ . Si este fuera el caso, entonces $S$ se mapearía $u'$ a $2u'$ y el mapa $v'$ a sí mismo, de modo que los nuevos vectores unitarios $u''$ y $v''$ se mantendrían perpendiculares entre sí. En cambio, $S$ mapas $u$ a $2u$ y $v$ a sí mismo, haciendo que el ángulo entre $u''$ y $v''$ para aumentar, como se describe en el párrafo anterior.


He aplicado esta teoría para recrear la ilustración del manual en PDF utilizando XeLaTeX con TikZ/PGF. No sé qué tipo de letra se utilizó en el manual, así que he utilizado la mejor aproximación que he podido encontrar, pero no es del todo igual.

A glyph and a rectangle under transformations

Las matrices de transformación utilizadas son:

  • $T$ : Una traducción de $(.5cm,.9cm)$ .
  • $R$ : Una rotación por $30^\circ$ en sentido contrario a las agujas del reloj.
  • $S$ : Una escalada de $3$ a lo largo del $x$ -eje.

Para recrear la primera línea, se aplicaron las siguientes matrices de transformación $T$ , 2. $TR$ , 3. $TRS$ .

Para recrear la segunda línea, se aplicaron las siguientes matrices de transformación $S$ , 2. $SR$ , 3. $SRT$ .

Aquí está el código completo.

\documentclass[landscape]{article}
\usepackage[hmargin=2cm,vmargin=1.5in]{geometry}
\usepackage{fontspec}
\setmainfont{heroout}[
Extension = .ttf,
Path = /Users/evanaad/Fonts/
]
\usepackage{tikz}
\begin{document}
    \fontsize{50}{50}\selectfont
    \begin{tikzpicture}
      \matrix
      {
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \node[anchor=south west,inner sep=0pt] at (0,0.01) {n};
          &[.5cm]
          \tikzset{cm={1,0,0,1,(.5,.9)}}
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \tikzset{reset cm}

          \makeatletter
          \pgfsys@transformcm{1}{0}{0}{1}{.5cm}{.9cm}
          \makeatother
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \node[anchor=south west,inner sep=0pt] at (0,0.01) {n};
          &[0.2cm]
          \tikzset{cm={.866,.5,-.5,.866,(.5,.9)}}
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \tikzset{reset cm}

          \makeatletter
          \pgfsys@transformcm{1}{0}{0}{1}{.5cm}{.9cm}
          \pgfsys@transformcm{.866}{.5}{-.5}{.866}{0pt}{0pt}
          \makeatother
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \node[anchor=south west,inner sep=0pt] at (0,0.01) {n};
          &[0.4cm]
          \tikzset{cm={2.598,1.5,-.5,.866,(.5cm,.9cm)}}
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \tikzset{reset cm}

          \makeatletter
          \pgfsys@transformcm{1}{0}{0}{1}{.5cm}{.9cm}
          \pgfsys@transformcm{.866}{.5}{-.5}{.866}{0pt}{0pt}
          \pgfsys@transformcm{3}{0}{0}{1}{0pt}{0pt}
          \makeatother
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \node[anchor=south west,inner sep=0pt] at (0,0.03) {n};
          \\[3cm]
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \node[anchor=south west,inner sep=0pt] at (0,0.01) {n};
          &
          \tikzset{cm={3,0,0,1,(0,0)}}
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \tikzset{reset cm}

          \makeatletter
          \pgfsys@transformcm{3}{0}{0}{1}{0pt}{0pt}
          \makeatother
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \node[anchor=south west,inner sep=0pt] at (0,0.01) {n};
          &
          \tikzset{cm={2.598,.5,-1.5,.866,(0,0)}}
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \tikzset{reset cm}

          \makeatletter
          \pgfsys@transformcm{3}{0}{0}{1}{0pt}{0pt}
          \pgfsys@transformcm{.866}{.5}{-.5}{.866}{0pt}{0pt}
          \makeatother
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \node[anchor=south west,inner sep=0pt] at (0,0.01) {n};
          &
          \tikzset{cm={2.598,.5,-1.5,.866,(-1pt,29pt)}}
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \draw[red] (0,0) rectangle (1.2,1);
          \tikzset{reset cm}

          \makeatletter
          \pgfsys@transformcm{3}{0}{0}{1}{0pt}{0pt}
          \pgfsys@transformcm{.866}{.5}{-.5}{.866}{0pt}{0pt}
          \pgfsys@transformcm{1}{0}{0}{1}{.5cm}{.9cm}
          \makeatother
          \draw[dashed] (-.99,-.99) grid (.99,.99);
          \node[anchor=south west,inner sep=0pt] at (0,0.03) {n};
          \\
      };
    \end{tikzpicture}
  \end{document}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X