Visualização Científica – MAI5015 · 2020. 4. 28. · Interpolação em Células de um Grid...
Embed Size (px)
Transcript of Visualização Científica – MAI5015 · 2020. 4. 28. · Interpolação em Células de um Grid...

Visualização Científica – MAI5015
Representação de Dados
Afonso Paiva
ICMC-USP
27 de abril de 2020

Interpolação em Células de um Grid
Objetivo: dada uma função fi amostrada nos vértices i do grid, queremos
calcular uma função interpoladora (linear por partes) F nas células do grid.
F(x,y,z)
ξ
η
célula de referênciacélula física
CfCr

Interpolação em Células de um Grid
Objetivo: dada uma função fi amostrada nos vértices i do grid, queremos
calcular uma função interpoladora (linear por partes) F nas células do grid.
F(x,y,z)
ξ
η
célula de referênciacélula física
CfCr
Célula de Referência (Cr )
I Vértices: v1 = (0, 0), v2 = (1, 0), v3 = (1, 1), v4 = (0, 1)
I Coordenadas: (⇠, ⌘)
I Função base local: �11,�
12,�
13,�
14 : Cr = [0, 1]2 ! R

Interpolação em Células de um Grid
Objetivo: dada uma função fi amostrada nos vértices i do grid, queremos
calcular uma função interpoladora (linear por partes) F nas células do grid.
F(x,y,z)
ξ
η
célula de referênciacélula física
CfCr
Célula Física (Cf )
I Vértices: p1, p2, p3, p4
I Coordenadas: (x , y , z)
I Função base global: �11,�
12,�
13,�
14 : Cf ⇢ R3 ! R

Interpolação em Células de um Grid
Objetivo: dada uma função fi amostrada nos vértices i do grid, queremos
calcular uma função interpoladora (linear por partes) F nas células do grid.
F(x,y,z)
ξ
η
célula de referênciacélula física
CfCr
Célula Física (Cf )
I Interpolação: F =P4
i=1 fi�1i
I Restrição: F (pj) = fj
I Ortogonalidade: �1i (pj) = �ij

Interpolação Linear
a
bx
Qualquer ponto x no segmento ab pode ser obtido da seguinte forma:
x = (1 � t)a + tb , com t 2 [0, 1]
Agora, dado um ponto x como obter o parâmetro t?
t =kx � akkb � ak

Interpolação Bilinear
Precisamos mapear Cr em Cf = ABCD usando trans-
formações conhecidas como projetores.
I Mapear os lados ⇠ = 0 e ⇠ = 1 nos lados
AB ⌘ r(0, ⌘) e CD ⌘ r(1, ⌘), respectivamente,
usando o projetor P⇠ definido como:
P⇠(r) = P⇠(⇠, ⌘) = (1 � ⇠) r(0, ⌘) + ⇠ r(1, ⌘)
I Mapear os lados ⌘ = 0 e ⌘ = 1 nos lados
AC ⌘ r(⇠, 0) e BD ⌘ r(⇠, 1), respectivamente,
usando o projetor P⌘ definido como:
P⌘(r) = P⌘(⇠, ⌘) = (1 � ⌘) r(⇠, 0) + ⌘ r(⇠, 1)x
y
0
1
1 ξ
η
B
A
C
D

Interpolação Bilinear
A interpolação bilinear é feita usando a transformação
composta P⌘P⇠:
P⌘(P⇠(r)) = P⌘((1 � ⇠) r(0, ⌘) + ⇠ r(1, ⌘))
= (1 � ⇠)P⌘(r(0, ⌘)) + ⇠ P⌘(r(1, ⌘))
= (1 � ⇠) [(1 � ⌘) r(0, 0) + ⌘ r(0, 1)]
+ ⇠ [(1 � ⌘) r(1, 0) + ⌘ r(1, 1)]
= (1 � ⇠) (1 � ⌘) r(0, 0) + (1 � ⇠) ⌘ r(0, 1)
+ ⇠ (1 � ⌘) r(1, 0) + ⇠ ⌘ r(1, 1)
= (1 � ⇠) (1 � ⌘)A + (1 � ⇠) ⌘B
+ ⇠ (1 � ⌘)C + ⇠ ⌘D
Problema: apenas os vértices A, B, C e D são pre-
servados, mas as fronteiras de Cf são substituídas por
segmentos de reta.
x
y
0
1
1 ξ
η
B
A
C
D

Interpolação Bilinear
Se p = (⇠, ⌘) 2 Cr , então a função interpoladora pode ser escrita como:
F (⇠, ⌘) =4X
i=1
fi �1i (⇠, ⌘) com
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘)
�12(⇠, ⌘) = (1 � ⇠)⌘
�13(⇠, ⌘) = ⇠⌘
�14(⇠, ⌘) = ⇠(1 � ⌘)
ξξ ξξ
η η η η
Como calcular F (x , y , z) se p = (x , y , z) 2 Cf ?

Putting it all together
F(x,y,z)
ξ
η
célula de referênciacélula física
CfCr
Precisamos definir uma transformação de coordenadas T : [0, 1]2 ! R3
entre as células Cr e Cf , tal que T (vi ) = pi . Se T é linear, temos que:
(x , y , z) = T (⇠, ⌘) =4X
i=1
pi �1i (⇠, ⌘)

Putting it all together
Dada uma célula Cf , podemos construir uma aproximação de classe C1por
partes da seguinte forma:
F (x , y , z) =4X
i=1
fi �1i (x , y , z) com
�1i (x , y , z) =
(�1
j (T�1(x , y , z)) , se (x , y , z) 2 Cf , em que pi = T (vj)
0 , se (x , y , z) /2 Cf

Coordenadas Baricéntricas
DefiniçãoO ponto v é o baricentro dos pontos v1, . . . , vn com pesos w1, . . . ,wn se
somente se
v =w1v1 + · · ·+ wnvn
w1 + · · ·+ wn
Os valores wi são as coordendas baricéntricas de v.
Coordenadas Baricéntricas Normalizadas
�i (v) =wi (v)
w1(v) + · · ·+ wn(v)
Logo, v =P
i �ivi comP
i �i = 1, isto é, uma combinação convexa dos
pontos v1, · · · , vn.

Coordenadas Baricéntricas
DefiniçãoO ponto v é o baricentro dos pontos v1, . . . , vn com pesos w1, . . . ,wn se
somente se
v =w1v1 + · · ·+ wnvn
w1 + · · ·+ wn
Os valores wi são as coordendas baricéntricas de v.
Coordenadas Baricéntricas Normalizadas
�i (v) =wi (v)
w1(v) + · · ·+ wn(v)
Logo, v =P
i �ivi comP
i �i = 1, isto é, uma combinação convexa dos
pontos v1, · · · , vn.

Coordenadas Baricéntricas no Triângulo
v2v1
v3
x
T
Objetivo: dado x 2 T , queremos �1,�2,�3 � 0 tal que:
�1 + �2 + �3 = 1 ,
e
x = �1v1 + �2v2 + �3v3

Coordenadas Baricéntricas no Triângulo
Precisamos resolver o sistema linear de ordem 3:
2
41 1 1
v11 v
12 v
13
v21 v
22 v
23
3
5
2
4�1�2�3
3
5 =
2
41
x1x2
3
5
Pela Regra de Cramer a solução (única) é
�1 =A1
A, �2 =
A2
A, �3 =
A3
A.
v2v1
v3
x
A
A 1
A 3
A 2
Observação: se um �i < 0 então x está fora do triângulo T .

Coordenadas Baricéntricas no Triângulo
Precisamos resolver o sistema linear de ordem 3:
2
41 1 1
v11 v
12 v
13
v21 v
22 v
23
3
5
2
4�1�2�3
3
5 =
2
41
x1x2
3
5
Pela Regra de Cramer a solução (única) é
�1 =A1
A, �2 =
A2
A, �3 =
A3
A.
v2v1
v3
x
A
A 1
A 3
A 2
Observação: se um �i < 0 então x está fora do triângulo T .

Tipos de Células
η
ξ
ξ ξ
ξξ
ξ
η
η
η
η
η
ξ
ζ
ζ
ζ
F (p) =2X
i=1
fi �1i (T
�1lin (p))
Segmentos de Reta
�11(⇠) = 1 � ⇠
�12(⇠) = ⇠
T�1lin (p) =
kp � p1kkp2 � p1k

Tipos de Células
η
ξ
ξ ξ
ξξ
ξ
η
η
η
η
η
ξ
ζ
ζ
ζ
F (p) =3X
i=1
fi �1i (T
�1tri (p))
Triângulos
�11(⇠, ⌘) = 1 � ⇠ � ⌘
�12(⇠, ⌘) = ⇠
�13(⇠, ⌘) = ⌘
T�1tri (p) =
✓A(p, p1, p2)A(p1, p2, p3)
,A(p, p2, p3)A(p1, p2, p3)
◆com A(a, b, c)| {z }
área
=12k(b � a)⇥ (c � a)k

Tipos de Células
η
ξ
ξ ξ
ξξ
ξ
η
η
η
η
η
ξ
ζ
ζ
ζ
F (p) =4X
i=1
fi �1i (T
�1rect(p))
Retângulos
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘)
�12(⇠, ⌘) = ⇠(1 � ⌘)
�13(⇠, ⌘) = ⇠⌘
�14(⇠, ⌘) = ⌘(1 � ⇠)
T�1rect(p) =
✓(p � p1) · (p2 � p1)
kp2 � p1k2 ,(p � p1) · (p4 � p1)
kp4 � p1k2
◆

Tipos de Células
η
ξ
ξ ξ
ξξ
ξ
η
η
η
η
η
ξ
ζ
ζ
ζ
F (p) =4X
i=1
fi �1i (T
�1tet (p))
Tetraedros
�11(⇠, ⌘, ⇣) = 1 � ⇠ � ⌘ � ⇣
�12(⇠, ⌘, ⇣) = ⇠
�13(⇠, ⌘, ⇣) = ⌘
�14(⇠, ⌘, ⇣) = ⇣
T�1tet (p) =
V (p, p1, p3, p4)
V (p1, p2, p3, p4),
V (p, p1, p2, p4)
V (p1, p2, p3, p4),
V (p, p1, p2, p3)
V (p1, p2, p3, p4)
!com V (a, b, c, d)
| {z }volume
=| det(b � a, c � a, d � a)|
6

Tipos de Células
η
ξ
ξ ξ
ξξ
ξ
η
η
η
η
η
ξ
ζ
ζ
ζ
F (p) =8X
i=1
fi �1i (T
�1box(p))
Hexaedros
�11(⇠, ⌘, ⇣) = (1 � ⇠)(1 � ⌘)(1 � ⇣)
�12(⇠, ⌘, ⇣) = ⇠(1 � ⌘)(1 � ⇣)
�13(⇠, ⌘, ⇣) = ⇠⌘(1 � ⇣)
�14(⇠, ⌘, ⇣) = (1 � ⇠)⌘(1 � ⇣)
�15(⇠, ⌘, ⇣) = (1 � ⇠)(1 � ⌘)⇣
�16(⇠, ⌘, ⇣) = ⇠(1 � ⌘)⇣
�17(⇠, ⌘, ⇣) = ⇠⌘⇣
�18(⇠, ⌘, ⇣) = (1 � ⇠)⌘⇣
T�1box(p) =
✓(p � p1) · (p2 � p1)
kp2 � p1k2 ,(p � p1) · (p4 � p1)
kp4 � p1k2 ,(p � p1) · (p5 � p1)
kp5 � p1k2
◆

Cálculo de Derivadas em Dados Discretos
Um conjunto discreto de dados D = {M, fi ,�i} é formado pelos vértices pi 2 Rde
células Ci de uma malha M, pela função amostrada fi = f (pi ) 2 R e pelas funções
base �i . Assim, vamos calcular a derivada da função interpoladora F (reconstrução
de f ) em D:
F (p) =nX
k=1
fk �k(p)
) @F
@xi(p) =
nX
k=1
fk@�k
@xi(p)
Pelo fato de �k(x1, . . . , xd) = �k(T�1(x1, . . . , xd)) com T�1 : ⇠i = ⇠i (x1, . . . , xd),
temos:
@F
@xi(p) =
nX
k=1
fk@�k
@xi(⇠1, . . . , ⇠d)

Cálculo de Derivadas em Dados Discretos
Um conjunto discreto de dados D = {M, fi ,�i} é formado pelos vértices pi 2 Rde
células Ci de uma malha M, pela função amostrada fi = f (pi ) 2 R e pelas funções
base �i . Assim, vamos calcular a derivada da função interpoladora F (reconstrução
de f ) em D:
F (p) =nX
k=1
fk �k(p) ) @F
@xi(p) =
nX
k=1
fk@�k
@xi(p)
Pelo fato de �k(x1, . . . , xd) = �k(T�1(x1, . . . , xd)) com T�1 : ⇠i = ⇠i (x1, . . . , xd),
temos:
@F
@xi(p) =
nX
k=1
fk@�k
@xi(⇠1, . . . , ⇠d)

Cálculo de Derivadas em Dados Discretos
Um conjunto discreto de dados D = {M, fi ,�i} é formado pelos vértices pi 2 Rde
células Ci de uma malha M, pela função amostrada fi = f (pi ) 2 R e pelas funções
base �i . Assim, vamos calcular a derivada da função interpoladora F (reconstrução
de f ) em D:
F (p) =nX
k=1
fk �k(p) ) @F
@xi(p) =
nX
k=1
fk@�k
@xi(p)
Pelo fato de �k(x1, . . . , xd) = �k(T�1(x1, . . . , xd)) com T�1 : ⇠i = ⇠i (x1, . . . , xd),
temos:
@F
@xi(p) =
nX
k=1
fk@�k
@xi(⇠1, . . . , ⇠d)

Cálculo de Derivadas em Dados Discretos
Segue que pela Regra da Cadeia:
@F
@xi(p) =
nX
k=1
fk
dX
j=1
@�k
@⇠j
@⇠j@xi
Na forma matricial:
2
6664
@F@x1@F@x2...@F@xd
3
7775=
nX
k=1
fk
2
66664
@⇠1@x1
@⇠2@x1
· · · @⇠d@x1
@⇠1@x2
@⇠2@x2
· · · @⇠d@x2
.
.
....
. . ....
@⇠1@xd
@⇠2@xd
· · · @⇠d@xd
3
77775
| {z }inversa de J>T =
@T�1
j@xi
�
2
66664
@�k@⇠1@�k@⇠2...
@�k@⇠d
3
77775

Cálculo de Derivadas em Dados Discretos
Exemplo: considere um grid uniforme no plano, onde cada célula tem ta-
manho (r1, r2) e funções base �1k .
r1
r2
(p , p )1 2
(p + r , p + r )1 21 2
(0, 0)
(1, 1)
T (x, y)
η
ξ
(⇠, ⌘) = T�1(x , y) =
✓x � p1
r1,y � p2
r2
◆
@F@x@F@y
�=
4X
k=1
fk
"@⇠@x
@⌘@x
@⇠@y
@⌘@y
#2
4@�1
k@⇠@�1
k@⌘
3
5
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘) �1
2(⇠, ⌘) = ⇠(1 � ⌘) �13(⇠, ⌘) = ⇠⌘ �1
4(⇠, ⌘) = ⌘(1 � ⇠)
@⇠�11 = ⌘ � 1 @⇠�
12 = 1 � ⌘ @⇠�
13 = ⌘ @⇠�
14 = �⌘
@⌘�11 = ⇠ � 1 @⌘�1
2 = �⇠ @⌘�13 = ⇠ @⌘�1
4 = 1 � ⇠

Cálculo de Derivadas em Dados Discretos
Exemplo: considere um grid uniforme no plano, onde cada célula tem ta-
manho (r1, r2) e funções base �1k .
r1
r2
(p , p )1 2
(p + r , p + r )1 21 2
(0, 0)
(1, 1)
T (x, y)
η
ξ
(⇠, ⌘) = T�1(x , y) =
✓x � p1
r1,y � p2
r2
◆
@F@x@F@y
�=
4X
k=1
fk
1r1
0
01r2
�2
4@�1
k@⇠@�1
k@⌘
3
5
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘) �1
2(⇠, ⌘) = ⇠(1 � ⌘) �13(⇠, ⌘) = ⇠⌘ �1
4(⇠, ⌘) = ⌘(1 � ⇠)
@⇠�11 = ⌘ � 1 @⇠�
12 = 1 � ⌘ @⇠�
13 = ⌘ @⇠�
14 = �⌘
@⌘�11 = ⇠ � 1 @⌘�1
2 = �⇠ @⌘�13 = ⇠ @⌘�1
4 = 1 � ⇠

Cálculo de Derivadas em Dados Discretos
Exemplo: considere um grid uniforme no plano, onde cada célula tem ta-
manho (r1, r2) e funções base �1k .
r1
r2
(p , p )1 2
(p + r , p + r )1 21 2
(0, 0)
(1, 1)
T (x, y)
η
ξ
(⇠, ⌘) = T�1(x , y) =
✓x � p1
r1,y � p2
r2
◆
@F@x@F@y
�=
4X
k=1
fk
1r1
0
01r2
�2
4@�1
k@⇠@�1
k@⌘
3
5
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘) �1
2(⇠, ⌘) = ⇠(1 � ⌘) �13(⇠, ⌘) = ⇠⌘ �1
4(⇠, ⌘) = ⌘(1 � ⇠)
@⇠�11 = ⌘ � 1 @⇠�
12 = 1 � ⌘ @⇠�
13 = ⌘ @⇠�
14 = �⌘
@⌘�11 = ⇠ � 1 @⌘�1
2 = �⇠ @⌘�13 = ⇠ @⌘�1
4 = 1 � ⇠

Cálculo de Derivadas em Dados Discretos
Exemplo: considere um grid uniforme no plano, onde cada célula tem ta-
manho (r1, r2) e funções base �1k .
r1
r2
(p , p )1 2
(p + r , p + r )1 21 2
(0, 0)
(1, 1)
T (x, y)
η
ξ
(⇠, ⌘) = T�1(x , y) =
✓x � p1
r1,y � p2
r2
◆
@F@x@F@y
�=
4X
k=1
fk
1r1
0
01r2
�2
4@�1
k@⇠@�1
k@⌘
3
5
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘) �1
2(⇠, ⌘) = ⇠(1 � ⌘) �13(⇠, ⌘) = ⇠⌘ �1
4(⇠, ⌘) = ⌘(1 � ⇠)
@⇠�11 = ⌘ � 1 @⇠�
12 = 1 � ⌘ @⇠�
13 = ⌘ @⇠�
14 = �⌘
@⌘�11 = ⇠ � 1 @⌘�1
2 = �⇠ @⌘�13 = ⇠ @⌘�1
4 = 1 � ⇠

Cálculo de Derivadas em Dados Discretos
Exemplo: considere um grid uniforme no plano, onde cada célula tem ta-
manho (r1, r2) e funções base �1k .
r1
r2
(p , p )1 2
(p + r , p + r )1 21 2
(0, 0)
(1, 1)
T (x, y)
η
ξ
(⇠, ⌘) = T�1(x , y) =
✓x � p1
r1,y � p2
r2
◆
rF =
✓(1 � ⌘)
f2 � f1
r1+ ⌘
f3 � f4
r1, (1 � ⇠)
f4 � f1
r2+ ⇠
f3 � f2
r2
◆
�11(⇠, ⌘) = (1 � ⇠)(1 � ⌘) �1
2(⇠, ⌘) = ⇠(1 � ⌘) �13(⇠, ⌘) = ⇠⌘ �1
4(⇠, ⌘) = ⌘(1 � ⇠)
@⇠�11 = ⌘ � 1 @⇠�
12 = 1 � ⌘ @⇠�
13 = ⌘ @⇠�
14 = �⌘
@⌘�11 = ⇠ � 1 @⌘�1
2 = �⇠ @⌘�13 = ⇠ @⌘�1
4 = 1 � ⇠

Aspectos Computacionais
Problema: se um ponto p = (x , y , z) pertence a uma célula Ci de uma
malha M, como localizar Ci ⇢ M?
Solução:
I Grids Uniformes:
⇣jxr1
k,j
yr2
k,j
zr3
k⌘;
I Grids Retangulares: use o comando find em cada direção;
I Malhas Não-Estruturadas: encontre os vértices pi 2 M mais próximos
de p e depois encontre a célula com vértice pi a que contém p;
[idx,dist] = knnsearch(X,Y,’k’,k): encontra os k vizinhos mais
próximos em X para cada ponto em Y ;

Aspectos Computacionais
Problema: se um ponto p = (x , y , z) pertence a uma célula Ci de uma
malha M, como localizar Ci ⇢ M?
Solução:
I Grids Uniformes:
⇣jxr1
k,j
yr2
k,j
zr3
k⌘;
I Grids Retangulares: use o comando find em cada direção;
I Malhas Não-Estruturadas: encontre os vértices pi 2 M mais próximos
de p e depois encontre a célula com vértice pi a que contém p;
[idx,dist] = knnsearch(X,Y,’k’,k): encontra os k vizinhos mais
próximos em X para cada ponto em Y ;

Aspectos Computacionais
Problema: se um ponto p = (x , y , z) pertence a uma célula Ci de uma
malha M, como localizar Ci ⇢ M?
Solução:
I Grids Uniformes:
⇣jxr1
k,j
yr2
k,j
zr3
k⌘;
I Grids Retangulares: use o comando find em cada direção;
I Malhas Não-Estruturadas: encontre os vértices pi 2 M mais próximos
de p e depois encontre a célula com vértice pi a que contém p;
[idx,dist] = knnsearch(X,Y,’k’,k): encontra os k vizinhos mais
próximos em X para cada ponto em Y ;