lunes, 19 de octubre de 2020

Uso y creación de fuentes de texto.

    2.5. Uso y creación de fuentes de texto.

    [1] Imprimir y desplegar texto son campos con una larga tradición que tienen sus raíces en la tipografía y la tecnología de imprenta. Para desplegar texto primero debemos escoger su fuente (de font en inglés), la cuál será usada por los símbolos y caracteres a ser impresos. El tamaño de la fuente debe darse en unidades pt (del inglés para puntos points), las cuales equivalen a aproximadamente 0.3515mm. Una fuente contiene más que sólo las especificaciones referentes al tamaño y la descripción de las formas de sus letras o símbolos. Para cada uno de los símbolos es necesario indicar la línea base. Incluso esta información no es suficiente, además hay que considerar que algunos símbolos de la fuente pueden tener diferentes anchos (widths), en este caso, la fuente adquiere el nombre de fuente proporcional. En una fuente proporcional cada símbolo o letra tiene su propio ancho, e incluso el espacio entre cada letra varía según la combinación de las letras. Ciertos pares de letras son impresas más juntas que otras, con esto nos referimos al Kerning. Las ligaduras incluso pueden construir un nuevo símbolo conectando ciertos pares de letras. El kerning y las ligaduras dependen de la fuente escogida.

    Otro aspecto importante de las fuentes son las modificaciones como las negritas(boldface) y cursivas (italic).

       Las fuentes pueden ser almacenadas como mapas de bits o vectores gráficos. La ventaja de los mapas de bits es que no se necesita una renderización adicional cuándo los símbolos de la fuente tienen que ser representados. Los pixeles correspondientes son dados directamente por el mapa de bits del símbolo. La desventaja de almacenar fuentes en términos de mapas de bits es que se necesitan diferentes mapas de bits para diferentes tamaños del mismo fuente y para diferentes estilos (normal, negritas y cursivas). No es recomendable generar fuentes en diferentes tamaños aplicando el escalamiento en imágenes de mapas de bits. Por ahí hay técnicas para derivar imágenes de mapas de bits de una fuente normal para el estilo de negritas y cursivas de esa fuente. Para recrear las cursivas, los pixeles son movidos hacia la derecha. Mientras más grande sea la línea del pixel en el símbolo, más será movido hacia la derecha. Para la recreación de la negrita, el símbolo completo es copiado un pixel a la derecha.


    Estas técnicas para fuentes cursivas, negritas y escalamientos de fuentes para diferentes tamaños llevan a resultados inaceptables, es por eso que los fuentes están usualmente almacenados en términos de gráficos de vectores.

     [1] Flank Kawonn (s.f.) "4.3 Displaying Text " Introduction to computer graphics (pp. 84-85)
Wolfenbüttel, Germany: Springer

domingo, 11 de octubre de 2020

Fractales

  2.4. Fractales

    En realidad no existe una definición específica de Fractal, sino más bien, un conjunto de características asociadas a tal definición. De tal manera que cuando algo tiene algunas de esas características1, se dice que ese algo es un fractal.

    Las principales características son las siguientes:

  • Tener una intrincada (y aparentemente sofisticada) geometría, tal que no puede ser descrito en términos de geometría euclidiana normal.
  • Poseer el mismo nivel de detalle a cualquier escala.
  • Tener una descripción geométrica recursiva.
  • Tener autosimilitud, determinística o probabilística en su apariencia. O sea, que el todo sea igual o muy parecido a una de sus partes.
  • Tener una dimensión de Hausdor-Besicovitch mayor que la propia dimensión topológica.


 

    El copo de nieve de von Koch 

    El copo de nieve de Niels Fabian Helge von Koch, es una gura sencilla que exhibe las características de estar geométricamente denido por un algoritmo recursivo y por que su dimensión de Hausdor-Besicovitch es mayor que su dimensión topológica. La explicación formal de esto último está fuera del alcance actual de esta obra, pero podemos enunciar la consecuencia directa de tal formalismo: La longitud de la curva es infinita, pero el área que encierra es finita.

Trazo de líneas curvas.

     2.3. Trazo de líneas curvas.

    [1] Dibujar una linea conectando los puntos (x0, y0) y (x1, y1) dentro un marco de mapa de bits parece ser una tarea muy simple. Aunque esto puede sacar a la luz que una aproximación ingenua puede llevar a algoritmos ineficientes o incluso a resultados inaceptables. Por razones de simplicidad, se ha asumido que los dos puntos ha ser conectados por la línea descansan en el mapa de bits. Esto implica que sus coordenadas son dadas en valores enteros. Sin perder las generalizaciones se asume que el primer punto no está localizado a la derecha del segundo punto. Esto implica que x0  ≤  x1. Si esto no se satisface, los dos puntos puden ser simplemente intercambiados para dibujar la línea.

    El acercamiento  ingenuo para el dibujo de una línea en el mapa de bits hará incrementos a través del eje de las x empezando desde x0  y terminar al  x1. Debido a que el de la coordenada y no va a ser usualmente un valor entero, este debe ser redondeado al valor entero más cercano para dibujar el pixel más cercano en el mapa de bits correspondientes a las coordenadas x y. Esto se puede representar en este pseudocódigo:


void drawLine(int x0, int y0, int x1, int y1)
{
    int x;
    double dy = y1 - y0;
    double dx = x1 - x0;
    double m = dy/dx;
    double y = y0;
    for (x=x0; x<=x1; x++)
    {
        drawPixel(x, round(y));
        y = y + m; //or: y = y0 + m*(x - x0);
    }

}

     En primer lugar nos podemos dar cuenta de que este programa fallará en el caso de dibujar un línea vertical x0  x1, llevando a una exepción de división por  cero cuando se calcule la pendiente. Por supuesto, este caso especial puede ser tratado de forma independiente. Aunque el algoritmo no va a tener más problemas más problemas con la división por cero, este seguirá fallando en dibujar lineas aceptables.

     2.3.1. Bézier. 

     [2]Las curvas de Bézier fueron nombradas así en honor de Pierre Bézier, quien las utilizó para el diseño de carrocerías de automóviles en 1962 en la empresa Rénault. Estas curvas están determinadas típicamente por cuatro puntos ordenados, de los cuales el primero y el último determinan el inicio y el fin de la curva, y los otros dos describen los vectores tangentes inicial y final que controlan la trayectoria de la curva entre los puntos inicial y final. Es importante recalcar que estas curvas no sirven para interpolar, ya que no pasan por todos los puntos de control.

    Descripción matemática


Dados cuatro puntos P0, P, P2, P3 (que pueden ser unidimensionales, bidimensionales, tridimensionales, etc.), llamados puntos de control, se dene la curva de Bézier de la siguiente manera:

\vec{B}(t) = (1-t)^3\vec{P}_0+3t(1-t)^2\vec{P}_1+3t^2(1-t)^2\vec{P}_2+3t^3\vec{P}_3 \leq t \leq 1

es decir:

x(t) = (1-t)^3x_0+3t(1-t)^2x_1+3t^2(1-t)^2x_2+3t^3x_3, 0\leq t \leq 1

y(t) = (1-t)^3y_0+3t(1-t)^2y_1+3t^2(1-t)^2y_2+3t^3y_3, 0\leq t \leq 1     z(t) = (1-t)^3z_0+3t(1-t)^2z_1+3t^2(1-t)^2z_2+3t^3z_3, 0\leq t \leq 1

    Polinomios de Bernstein


    La teoría básica para calcular las curvas de Bézier se basa en la idea que cada punto de la curva es un promedio ponderado de los puntos de control. Esto se consigue con coeficientes especialmente diseñados para eso. Estos coecientes determinan el polinomio que forma la ecuación de Bézier, y son conocidos como Polinomios de Bernstein, y se denen así:




     2.3.2. B-spline.

Representación matriarcal de las transformaciones bidimensionales

    2.2. Representación matricial de las transformaciones bidimensionales.

    Aunque existen diversas maneras de representar las coordenadas de los objetos gráficos y de representar las transformaciones geométricas que operan sobre ellos, vamos a elegir aquí la más estándar y flexible.

    Los puntos se representan como vectores columnas de tamaño 3 x 1:

P = \begin{bmatrix}X \\ Y \\ 1\end{bmatrix}

    La operación de traslación bidimensional se representa como una matriz de 3 × 3:

T(d_x, d_y) = \begin{bmatrix}1 & 0 & d_x \\ 0 & 1 & d_y \\ 0 & 0 & 1\end{bmatrix}

    La operación de escalamiento bidimensional (con el origen como punto de referencia) se representa similar: 

    

S(s_x, s_y) = \begin{bmatrix}s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1\end{bmatrix} 

    La operación de rotación bidimensional (respecto del origen, en el sentido opuesto al de las manecillas del reloj) se representa así:

                                                       R(\theta) = \begin{bmatrix}cos(\theta) & -sen(\theta) & 0 \\ sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1\end{bmatrix}     

    De este modo, para efectuar transformaciones geométricas básicas, esas "funciones" en forma de matrices, deben premultiplicarse por los puntos que se pretende transformar, así:

    P' = T(dx, dy) significa que P' es P con un desplazamiento de (dx, dy).

    P' = S(sx, sy) significa que P' es P con un desplazamiento de sx en x y sy en y tomando el origen como referencia.

     P' = R(θ) significa que P' es P con un desplazamiento de θ radiantes en sentido opuesto al movimiento de las manecillas del reloj, a partir del eje x+, tomando como eje de rotación al origen del marco de referencia.
    

sábado, 10 de octubre de 2020

Transformación bidimensional

    2.1. Transformación bidimensional   

    [1] En adición a objetos geométricos, las transformaciones geométricas juegan un rol crucial en los gráficos por computadora. Las transformaciones geométricas pueden ser usadas para posicionar objetos, por ejemplo para cambiarlos a otra posición o rotarlos, para cambiar la forma de los objetos, para enconjerlos en una dirección, o mover objetos o cambiar la forma de objetos paso a paso por escenas animadas.

    Existen básicamente tres operaciones o transformaciones geométricas básicas, a partir de las cuales se pueden realizar todas las demás. Estas transformaciones son la traslación, el escalamiento y la rotación, todas respecto del origen.       

    2.1.1. Traslación o Desplazamiento

    La traslación o desplazamiento se reere a mover un punto, un conjunto de puntos o un objeto compuesto, de su ubicación original hacia una nueva ubicación en su marco de referencia. La operación tiene un parámetro: el vector de desplazamiento.

     2.1.2. Escalamiento

    El escalamiento es la operación que nos permite agrandar o empequeñecer un conjunto de puntos o un objeto compuesto. La operación requiere de dos parámetros: el factor de escalamiento a aplicar en x y el factor de escalamiento a aplicar en y. La operación requiere además, de un punto de referencia, típicamente el origen del marco de referencia. En el caso de aplicar escalamiento básico a un punto, se produce el efecto de acercarlo o alejarlo del punto de referencia.

    2.1.3. Rotación

    La rotación es la más compleja de las operaciones o transformaciones geométricas básicas. Consiste en girar un punto, un conjunto de puntos o un cuerpo compuesto, al rededor de un punto de referencia (el centro de rotación), típicamente el origen del marco de referencia.

    [1] Eduardo Navas. (s. f.) "Transformaciones Geométricas Bidimencionales " Una humilde introducción a la graficación por computadora y otras yerbas.

     

miércoles, 7 de octubre de 2020

Presentación

¡Bienvenidos al blog de Graficación 2D!

    En este blog abordaremos los temas de la unidad 2 de graficación, el cual cuenta con 5 temas principales:

  1. Transformación bidimensional. 
  2. Representación matricial de las transformaciones bidimensionales.
  3. Bézier.
  4. Fractales 
  5. Uso y creación de fuentes de texto.
     Gracias por visitar mi blog, espero que esta información te sea de ayuda.

Uso y creación de fuentes de texto.

     2.5. Uso y creación de fuentes de texto.     [1] Imprimir y desplegar texto son campos con una larga tradición que tienen sus raíces en...