Professional Documents
Culture Documents
Tramos Extrapolados
Nodos o
Puntos de Control
Curva Aproximante
1/11
Interpolacin afn
La interpolacin afn es una extensin de la combinacin afn de los puntos. Las coordenadas del
punto variable se pueden obtener como combinacin afn de los puntos fijos; una vez hallados los
pesos, se aplican del mismo modo al valor asociado.
x6
x5
x4
Del clculo de la posicin:
x = i(x) xi ( i = 1)
se obtienen los i y luego con esos mismos pesos se calcula:
x
v = i(x) vi
x1
x0
x7
En la figura se representa un conjunto de puntos fijos xi y un
punto variable x, para el cual se pretende interpolar un valor,
x2
asignando pesos a los puntos fijos. Adems se muestra tambin
x3
el envoltorio convexo o cpsula convexa o convex-hull del
conjunto de puntos fijos. El envoltorio convexo se define como el menor convexo que contiene al
conjunto de puntos; es la forma que tomara una banda elstica envolviendo al conjunto. Enseguida
veremos que ese es el lmite de las posiciones que pueden obtenerse con pesos positivos.
El problema de interpolar un valor entre muchos puntos lo iremos resolviendo en forma progresiva. El
caso ms simple lo constituye la combinacin afn 1D de dos puntos:
x = 0 x0 + 1 x1, con 0 + 1 = 1.
{x1,v1}
El resultado es un punto en la lnea que une x0 con x1. Cuando los pesos
{x,v}
estn limitados al rango [0,1] el punto variable estar en el segmento
que une los dos puntos y se garantiza que cualquier variable
{x0,v0}
asociada asumir tambin un valor intermedio. Si en
cambio, algunos de los parmetros sale del intervalo [0,1], el punto sale del segmento y el proceso se
denomina extrapolacin, el valor asociado tambin sale del intervalo [v0, v1].
Para aclarar este ltimo punto reescribimos la ecuacin anterior, asumiendo que v representa cualquier
coordenada (x, y o z) o cualquier valor asociado (temperatura, presin, humedad, color):
v = 0 v0 + 1 v1 = (11) v0 + 1 v1 = v0 + (v1 v0) 1.
As vista la ecuacin, cuando 1 [0,1], queda claro que v adopta valores intermedios entre v0 y v1,
para cualquier variable que sea: coordenada o variable anexada. El punto se mantiene en el envoltorio
convexo de los dos puntos fijos, que es simplemente el segmento [x0, x1] y cualquier valor se mantiene
en el rango de valores [v0, v1]. La combinacin en este caso se denomina interpolacin en sentido
estricto o bien combinacin convexa.
Si se pretende calcular una interpolacin (o extrapolacin) afn con dos puntos fijos, no pueden
obtenerse puntos fuera de la recta que los une y por lo tanto la interpolacin afn no est definida fuera
de la recta; por definicin utiliza los mismos pesos que la combinacin afn, entonces est restringida a
la expansin afn de los puntos fijos que es la recta que definen.
x1
x01
Pasemos a tres puntos fijos. En la figura est marcado x01 como una
x0
combinacin afn entre los puntos x0 y x1. Ahora agregamos el punto x2
x = x012
y hacemos x = x012 combinando x01 y el punto x2.
La multiplicidad de ndices (01, 012, ) es slo para indicar los pasos.
x2
x012 = 01 x01 + 2 x2; con 01 + 2 = 1
x012 = 01(0x0 + 1x1) + 2x2 = 010x0 + 011x1 + 2x2 = 0x0 + 1x1 + 2x2
Podemos ver que se trata de una combinacin afn porque los parmetros suman uno:
0 + 1 + 2 = 01 0 + 01 1 + 2 = 01 (0 + 1) + 2 = 1
Sin ser muy rigurosos podemos considerar demostrado que la combinacin afn de combinaciones
afines tambin es combinacin afn de los puntos fijos. Adems, si los coeficientes estn entre cero y
uno en cada paso, los coeficientes finales () tambin, por ser productos de nmeros entre cero y uno,
por lo tanto: la combinacin convexa de combinaciones convexas es una combinacin convexa. Un
sencillo anlisis de los lmites de cada combinacin (hacerlo) nos revela que, en el caso convexo, el
resultado estar dentro del tringulo marcado: el envoltorio convexo de los tres puntos.
2/11
Aadiendo al esquema un cuarto punto, quinto, etc. llegaremos fcilmente a la conclusin de que la
combinacin afn de un conjunto de puntos, cuando los parmetros estn limitados al rango [0,1], dar
por resultado un punto entre los lmites del envoltorio convexo del conjunto. Es por ello que ste tipo
de combinacin recibe el nombre de combinacin convexa.
x1
x01
x0
x1
x01
x0
x012
x012
x0123
x = x0123
x3
x3
x = x01234
x2
x2
x4
Obviamente, el resultado anterior es vlido en cualquier cantidad de dimensiones y no solo en el plano.
La extensin es trivial puesto que con xi representamos cualquier coordenada o variable asociada.
Se puede pensar en el dibujo de arriba como la proyeccin plana de un resultado multidimensional.
Con lo cual queda claro que la proyeccin ortogonal de una combinacin afn es combinacin afn de
los puntos proyectados y por lo tanto est dentro del envoltorio convexo de los puntos proyectados (la
proyeccin ortogonal es una transformacin afn y por lo tanto preserva las combinaciones afines).
En el caso general de combinacin afn (no-convexa), con al menos d+1 puntos independientes, se
obtiene cualquier punto del espacio de soporte d dimensional. En el espacio tridimensional, con tres o
ms puntos coplanares (mas de tres coplanares tienen dependencia afn) se puede obtener cualquier
punto del plano de los puntos fijos (el espacio soporte es el plano); con cuatro o ms puntos no
coplanares se puede obtener cualquier punto del espacio.
x1
x0
Si al conjunto de parmetros se le impone una restriccin funcional se
P(t)=xii(t)
obtiene un subespacio. Por ejemplo, si cada parmetro i es funcin
continua de otro parmetro t: i = i(t), el resultado es una curva
uniparamtrica como la de la figura. Si en 3D, i = i(s,t) se obtiene una
x2
superficie biparamtrica. Este es el mecanismo que se utilizar mas
adelante para construir curvas y superficies paramtricas (bilineales, Bzier, NURBS, etc.).
En general, los pesos pueden definirse mediante cualquier funcin de las coordenadas, mientras sumen
uno. Por ejemplo, si tenemos dos puntos fijos x0 y x1 y hacemos 0=sen2(t) y 1=cos2(t), si permitimos
que t tome cualquier valor real, tendremos un punto variable rebotando entre los nodos.
Ahora utilicemos el mismo estilo de funciones de peso nolineales, pero para interpolar valores entre
tres puntos en una recta 1D: x0 = 3; v0 = 2; x1 = 5; v1 = 8; x2 = 6; v0 = 4. Hacemos que t vare entre 0 y
1 para el primer tramo y entre 1 y 2 para el segundo. Las funciones de forma sern 1=sen2(t /2) que
vale 1 en 1 y 0 en 0 y 2; 0=2=cos2(t /2), que vale 1 para 0 y 2 y vale 0 para 1, tal como se muestra
en la grfica izquierda. Con esas funciones de forma, se calculan x y v, que se grafican a la derecha.
8
1
0,9
0,8
0,7
0,6
5
0,5
0,4
0,3
0,2
0,1
0
2
0
0,2
0,4
0,6
0,8
1,2
1,4
1,6
1,8
3,5
4,5
5,5
Por ms que la velocidad del recorrido (derivada respecto de t) es variable, el valor asignado resulta
lineal con las coordenadas de x. Esto es as, obviamente, pues ambos reciben el mismo tratamiento.
En general la interpolacin afn ser lineal cuando el valor dependa slo de los nodos del smplice
(segmento, tringuilo, tetraedro, ) que rodea al punto y las funciones de peso de cada nodo valen uno
en su nodo y cero en el resto. Ahora veremos el mtodo estndar para construir funciones de peso
lineales, que ellas mismas varan linealmente en el espacio.
3/11
Coordenadas Baricntricas
Para definir funciones de peso lineales, que recorren el espacio a velocidad constante, se utilizan las
coordenadas baricntricas o coordenadas de rea o funciones de forma lineales, que son slo una forma
de denominar a los pesos lineales de un conjunto de nodos con independencia afn, por ejemplo: dos
puntos, tres puntos no colineales o cuatro que no estn en el mismo plano.
Los pesos de una combinacin afn se denominan coordenadas porque la ecuacin x = i xi define al
punto variable como si los puntos fijos fuesen la base de un espacio vectorial. En particular, cuando los
n pesos valen todos 1/n, el punto que se obtiene es el baricentro (bari ~ peso o presin) o centro de
gravedad o promedio de los puntos.
Partiremos del caso mas sencillo, el de dos puntos que definen un segmento [x0, x1] y analicemos una
variable en particular, que sabemos que vara en forma lineal entre los extremos: la longitud 1 del
segmento [x0, x]: en x0 vale 10 = 1(x0) = 0 y en x1 vale 11 = 1(x1) = , entonces se puede interpolar:
1 = 0 10 + 1 11, con 0 + 1 = 1
0
x
1
1
0
1
1
1
x0
x1
= 0 + ; = /
1
El peso de x1 es proporcional a la longitud del segmento opuesto al punto.
Del mismo modo, o utilizando la suma unitaria, se obtiene que 0 = 0 / . Es decir que la relacin
(cociente) entre las longitudes de los segmentos opuestos es idntica a la relacin entre los pesos
Considerando longitudes con signo, la relacin se cumplir tambin para la extrapolacin. Para definir
el signo se debe establecer un orden de los puntos o una direccin preferencial, por ejemplo de cero a
uno o el vector = (x1 x0), con = ||; y entonces recurrimos a un producto escalar ordenado, que nos
indica si la direccin es igual u opuesta:
1 = (xx0) /
0 = (x1x) /
1 = (xx0) / 2
0 = (x1x) / 2
En una extrapolacin hay una longitud i mayor que el total y una negativa, entonces habr un peso
i mayor que uno y el otro ser negativo, pero los i suman el total y los i suman uno.
En un algoritmo, se implementa la ltima ecuacin, de modo que no se necesita invocar ningn
condicional para averiguar si el punto mvil est entremedio de los nodos; adems, dado que 2 = ,
no es necesario calcular la longitud del segmento que es la raz cuadrada del denominador.
Pasamos ahora a tres puntos no colineales. A la derecha se pueden ver x1
x0
los tringulos que define el punto interpolado x con cada uno de los
0
1
2
lados del tringulo que lo contiene, el rea total es a = a + a + a , la
a2
denominacin de cada uno corresponde al punto fijo opuesto.
h2
2
x
El rea a (lase: a2 y no: a al cuadrado) del tringulo opuesto a
a0
x2: (x, x0, x1) vara linealmente: vale 0 cuando el punto variable est
a1
en la lnea (x0, x1), en particular cuando coincide con x0 (a20 = 0) o
con x1 (a21 = 0) y es igual al rea total a, cuando el punto variable est
en una lnea paralela a la anterior y que pasa por x2, en particular
cuando coincide con ese punto (a22 = a). Es lineal porque tiene base
fija |x1x0| y vara igual que su altura h2 (lase: h2 y no: h al
x2
cuadrado). Interpolando, entonces, para calcular el rea a2:
a2 = 0 a20 + 1 a21 + 2 a22 = 0 0 + 1 0 + 2 a 2 = a2/a.
Del mismo modo, i = ai/a para cualquier vrtice. Esta es la razn por la que tambin se denominan
coordenadas de rea.
Considerando reas orientadas (con signo) hacemos que la relacin tambin resulte vlida para la
extrapolacin. Pero aqu tambin hay que definir un ordenamiento preferencial que, en este caso, se
puede obtener a partir de un producto vectorial realizado con cierto orden. El producto vectorial es el
rea orientada del paralelogramo que definen los vectores, el rea de un tringulo es la mitad, pero los
cocientes entre reas hacen innecesarias las divisiones por dos.
4/11
Definimos:
a = (x1x0) x (x2x0)
a0 = (x1x) x (x2x)
a1 = (x2x) x (x0x)
a2 = (x0x) x (x1x)
2
Notar el orden, que puede (suele) generalizarse como:
+1
ai = (xi+1x) x (xi+2x)
0
1
donde las sumas de ndices se hacen mdulo tres ((i+1)%3; ej:(2+1)%3=0)
La direccin del vector a ser la que define las reas positivas. Para concluir definimos:
i = ai a / a2
Lo mismo sucede con volmenes de tetraedros. Para ese caso, los volmenes orientados de los
tetraedros son productos triples (volumen del paraleleppedo dividido por seis, pero el seis se cancela
en las divisiones):
v = ((x1x0) x (x2x0)) (x3x0)
i = ((xi+1x) x (xi+2x)) (xi+3x) / v
con las sumas de ndices en mdulo cuatro.
Es muy sencillo hacer los algoritmos de modo que realicen estas operaciones en forma ordenada.
Se puede recordar as: el peso de un nodo en un punto variable es igual al cociente entre el rea
opuesta y la total. (O longitudes en 1D o volmenes en 3D)
En el caso de tres puntos no alineados, las lneas en las cuales una coordenada de rea resulta constante
se denominan lneas isoparamtricas; dado que la base del tringulo es siempre el segmento opuesto,
stas son las lneas de altura constante, las paralelas a dicho segmento. Para cuatro puntos no
coplanares, las superficies isoparamtricas sern los planos paralelos a la cara opuesta a un nodo.
En la figura, La recta (x1, x2) divide al plano en dos, podemos
0
0 < 0 < 1
0 > 1
ver que 0 es positivo para cualquier posicin de punto variable < 0
x1
en el semiplano que contiene a x0, es nula en la recta y negativa
en el semiplano opuesto y, como ya vimos, es constante en las
x0
rectas paralelas a la mencionada. La simpleza del clculo de las
reas permite averiguar fcilmente si un punto est o no dentro de
x2
un tringulo (sin hacer las divisiones!) y nos da una pista inmediata
de cmo movernos para averiguar, en una triangulacin, cual
tringulo contiene al punto variable (lo veremos ms adelante).
En 3D las superficies isoparamtricas sern los planos paralelos a la cara opuesta a un nodo.
Las aplicaciones ms interesantes no son nunca las ms simples, normalmente se cuenta con varios
puntos definidos (sin independencia afn). Por ejemplo, se suelen obtener datos del clima (ms de un
valor: presin, temperatura, direccin del viento, velocidad, etc.) en distintos nodos o puntos de
muestreo, que en este caso son estaciones meteorolgicas. Para obtener en forma aproximada un valor
en una localidad cualquiera se puede realizar una interpolacin lineal, pero no queda claro cuales
estaciones meteorolgicas deben tenerse en cuenta, cuales tienen peso no-nulo y que peso tiene cada
una. Un mtodo estndar consiste en realizar una divisin del envoltorio convexo en tringulos no
solapados y cuyos vrtices son los nodos, esto es: una triangulacin del dominio. Para calcular el valor
en un punto cualquiera se pueden utilizan slo las estaciones del tringulo que encierra al punto. sta
tcnica se conoce como interpolacin poli-lineal, las variantes estn dadas por los distintos mtodos
para realizar la triangulacin.
Hay muchas tcnicas (lineales o no) y casi todas se basan en triangulaciones u otras divisiones
estratgicamente simples del dominio.
5/11
6/11
Interpolacin bilineal
Se denomina as a una forma particular de expresar, en funcin de slo dos parmetros, los pesos de la
combinacin afn de cuatro puntos que forman un cuadrngulo, ya sea en el plano o en el espacio.
x3
x32
x2
x
x1
x01
x0
La combinacin bilineal consiste en tomar la misma combinacin afn en dos lneas opuestas, con uno
de los parmetros y luego interpolar los dos puntos resultantes con el otro parmetro:
x01 = (1-u) x0 + u x1
x32 = (1-u) x3 + u x2
x = (1-v) x01 + v x32 = (1-v) (1-u) x0 + (1-v) u x1 + v u x2 + v (1-u) x3
El resultado es idntico si primero se hace la combinacin con v en los segmentos (x0, x3) y (x1, x2),
para luego combinar con u los puntos resultantes (probar).
La denominacin de bilineal proviene del uso de los parmetros, normalmente identificados con las
coordenadas de un cuadrado unitario en el espacio de parmetros. Un polinomio formado as, con
productos de monomios lineales, sin ningn trmino cuadrtico en u ni en v, se denomina bilineal.
Los cuatro parmetros de la combinacin afn resultante: {(1-v) (1-u), (1-v) u, v u, v (1-u)} suman uno
y, si u,v [0,1]2 tambin estarn en el rango [0,1]. El resultado es una interpolacin afn nolineal de
los cuatro puntos y valores; con una receta para la asignacin de los pesos.
En computacin grfica se utiliza este tipo de interpolacin para mapear texturas o interpolar colores
en cuadrilteros, el resultado es ms suave que el obtenido dividiendo en dos tringulos.
Es muy importante recalcar que en el espacio tridimensional, con
cuatro puntos no coplanares, se obtiene una
superficie reglada (bilineal), que tiene por bordes a
los cuatro segmentos. Las coordenadas baricntricas de
cuatro puntos tienen tres grados de libertad porque suman
uno; aqu, en cambio, hay slo dos parmetros libres, el
conjunto tiene una restriccin paramtrica i(u,v) del tipo que
mencionamos antes. La superficie es reglada porque est formada por
una sucesin infinita de segmentos rectos como el (x01, x32) que se obtiene
barriendo u entre cero y uno (lo mismo suceder con v). Puede verse como una
pompa de jabn entre cuatro alambres rectos no coplanares.
La funcin es biunvoca en el interior, excepto cuando los cuatro puntos son coplanares y el
cuadriltero cncavo. No analizaremos en detalle este caso, basta con decir que se obtienen, como
siempre, puntos del convex-hull, pero fuera del cuadriltero, los puntos exteriores al cuadriltero
cncavo se pueden obtener con dos conjuntos de parmetros distintos. (Pensarlo como una superficie
bilineal 3D aplastada o proyectada)
El mismo concepto se extiende a un cubo y se utiliza la interpolacin trilineal para mapear el interior
de un cubo unitario en un hexaedro o cuboide de seis caras bilineales en el espacio. Pero eso no suele
usarse en Computacin Grfica sino en Clculo Numrico (Elementos Finitos). En CG podra
utilizarse para mapear texturas tridimensionales.
7/11
S2 (radio 1)
x1
x0
En las figuras de arriba se hace evidente la diferencia entre una interpolacin lineal de direcciones y
una esfrica. La diferencia se puede apreciar visualmente al interpolar normales para iluminacin.
8/11
Todo el proceso de interpolacin descansa grficamente en el plano del ngulo, definido por el origen
y los dos puntos dados; por lo tanto haremos los clculos en ese plano.
x1
x
x0
Partimos de las coordenadas x0 y x1 de los puntos dados y del parmetro variable . Debemos calcular
el ngulo entre los puntos y luego el punto interpolado x.
En primer lugar, dado que los mdulos son unitarios, notemos que:
= acos(x0 x1)
Podemos representar cualquier punto del plano mediante una combinacin lineal del par ortonormal
{x0, w}, donde w es un vector perpendicular a x0 en la direccin de x1, que usaremos de intermediario.
x = cos() x0 + sen() w
x1 = cos() x0 + sen() w
De la segunda ecuacin podemos extraer w y usarlo en la primera.
sen()
(x cos() x0)
x = cos() x0 +
sen() 1
sen() x = cos() sen() x0 + sen() (x1 cos() x0)
= [cos() sen() sen() cos()] x0 + sen() x1
= sen( ) x0 + sen() x1
= sen[(1 )] x0 + sen() x1
sen[(1 )]
sen()
x =
x0 +
x
sen()
sen() 1
Para evitar la posible divisin por cero o la inestabilidad, cuando sea muy pequeo, hay que hacer
una aproximacin lineal. Cuando tiende a cero, la ecuacin anterior tiende a la simple interpolacin
lineal (el seno tiende al ngulo o el arco tiende a la cuerda):
x = (1 ) x0 + x1
A nivel de implementacin, para evitar la inestabilidad bastar saber si se pueden equiparar el ngulo y
su seno. Dado que el mayor ngulo involucrado es , basta saber si | sen()| < , donde es un
pequeo valor que depende de la precisin numrica utilizada. Haciendo la expansin en serie de
Taylor, se ve fcilmente que:
| sen()| ~ 3 / 6,
podemos entonces comparar con 10-3 o 10-6 en simple o doble precisin respectivamente.
9/11
Cuaterniones
Si bien tienen mltiples aplicaciones, la nica utilizacin prctica de los cuaterniones en CG es para
representar (e interpolar) rotaciones y efectivamente son muy utilizados para eso en videojuegos.
Un cuaternin se forma como un vector de cuatro dimensiones cuya base son los nmeros {1,i,j,k}. El
nmero 1 es la unidad real estndar; i, j y k son extensiones del imaginario puro i, de los nmeros
complejos. El cuadrado de cualquiera de ellos es 1. Los productos mutuos (ms all del trivial 1) son:
i
i2 = j2 = k2 = -1;
ij = -ji = k;
jk = -kj = i;
ki = -ik = j
+
Notar la antisimetra. La regla mnemotcnica es: ijk en orden circular, cada
j
k
par sucesivo da el siguiente y en orden inverso dan negativos.
Un cuaternin es entonces una combinacin lineal q = ai + bj + ck + d, donde a, b, c y d son nmeros
reales. Tiene una componente real: d y tres imaginarias: a, b y c. Tambin podemos representarlo
como q = <d;u> donde u es el vector tridimensional {a,b,c} que engloba las tres componentes
imaginarias, en este caso se habla de una componente escalar y una vectorial o cuaternin pura.
Con esa notacin podemos representar escalares y vectores como cuaterniones haciendo la distincin:
< d, 0 > representa el escalar d;
< 0, u > representa el vector o cuaternin puro u.
La operatoria de los cuaterniones es idntica a la de los complejos. Para el producto hay que tener en
cuenta los productos mutuos de los nmeros que conforman la base. Para poder usar la notacin
estndar con los vectores (u) reservaremos el trmino producto escalar y el smbolo para los
vectores estndar y definimos el producto (a secas) entre cuaterniones, que se desarrolla distribuyendo
los productos de a pares (todos contra todos) que, ya agrupados, queda:
q1q2 = < ( d1d2 u1u2 ); ( d1 u2 + d2 u1 + u1 u2 ) >
Se puede ver que la noconmutatividad del producto est slo en el producto vectorial, pues si se
invierten los factores, resulta opuesto. La conmutatividad slo se da, entonces, cuando las partes
vectoriales son paralelas (u opuestas) y el producto vectorial es nulo.
El conjugado de q = < d; u > es otro cuaternin con la parte vectorial opuesta:
q* = < d; u >
Se puede ver muy fcilmente que:
qq* = q*q = a2+b2+c2+d2 = d2+u2
(es un escalar)
La norma o magnitud de un cuaternin se define como en el caso complejo:
||q|| = qq* = a2 + b2 + c2 + d2 = d2 + u2
Mirando la frmula anterior es fcil deducir que:
q*
q-1 = ||q||2 ;
siendo: qq-1 = q-1q = 1.
(Conmutativo por ser antiparalelos los vectores)
Un cuaternin se puede normalizar, igual que un vector, dividindolo por su mdulo:
q
q1 = ||q||
Para un cuaternin unitario: q-1 = q*.
Todo cuaternin unitario se puede escribir como: q1 = < cos(); u1 sen() >; donde u1 es, a su vez, un
vector unitario:
q1 = < cos(); u1 sen() >; u12=1 ||q1|| =
En segundo lugar, notemos que nos hemos adelantado al llamar v al resultado, pues aun no sabemos
que tipo de cuaternin es. Enseguida veremos que, efectivamente, es un vector.
Apliquemos esa expresin a un vector v// paralelo a u (v// = u). Usando la frmula del producto y
siendo u2 = 1:
v// = < cos(); u sen() > < 0; u > < cos(); -u sen() > =
= < sen(); cos() u > < cos(); -u sen() > =
= < [ sen() cos() sen() cos()]; u [cos2() + sen2()] > = < 0; u > =
= v//
Es decir que un vector paralelo a u no cambia con esa expresin.
Ahora apliquemos la misma expresin a un vector v perpendicular a u. Llamando w al vector u v
que es perpendicular tanto a u como a v y notando adems que u w = v:
v = < cos(); u sen() > < 0; v> < cos(); u sen() > =
= < 0; cos() v+ sen() w > < cos(); u sen() > =
= < 0; cos2() v+ sen() cos() w + sen() cos() w sen2() v > =
= < 0; {[cos2() sen2()] v + 2 sen() cos() w} > =
Nestor Calvo
Computacin Grafica FICH
2011
11/11