Transformações de
Visualização 2D:
Clipping
Clipping
Antonio L. Bajuelos Departamento de Matemática Universidade de AveiroTransformações de Visualização 2D
Clipping
Clipping (recorte)
(recorte)
Qualquer procedimento que identifica porções de uma
figura que estão ou dentro ou fora de uma região
específica é chamada de
clipping
Muitos pacotes gráficos combinam a transformação
window-to-viewport
com
clipping
de
primitivas
gráficas de saída.
gráficas de saída.
Algumas aplicações:
extrair parte de uma cena
identificar superfícies visíveis em visões 3D
Transformações de Visualização 2D
Clipping
Transformações de Visualização 2D
Clipping
Clipping (cont
(cont...
...))
Clip window: a região na qual um objecto será
“clipado” (geralmente uma área rectangular)
Primitivas:
Pontos
Linhas (segmentos de recta)
Áreas (polígonos)
Curvas
Texto
Transformações de Visualização 2D
Clipping
Clipping de
de Pontos
Pontos
Assumir que a
clip-window é rectangular
Um ponto
P = (x, y)
será considerado para visualizar se
forem satisfeitas as seguintes condições:
xw
min≤ x ≤ xw
maxyw
≤ y≤ yw
As arestas da
clip window
podem ser coordenadas da
janela das
world coordinates
ou os límites da
viewport
.
Se alguma das condições não for satisfeita, o objecto é
clipped
, ou seja, fica fora da zona da visualizção
Transformações de Visualização 2D
Clipping
Clipping de
de Linhas
Linhas (segmentos
(segmentos de
de recta)
recta)
Recorte de um linha contra uma área rectangular resulta sempre num segmento de recta.
A parte que recai dentro da área de recorte é apresentada. As restantes são ignoradas
Dividimos o processo de recorte (clipping) em duas fases:
I. Identificar os segmentos de recta que intersectam a fronteira I. Identificar os segmentos de recta que intersectam a fronteira
da janela e que portanto, necessitam de ser recortados.
Transformações de Visualização 2D
Clipping
Clipping de
de Linhas
Linhas (segmentos
(segmentos de
de recta)
recta)
Como identificar os segmentos de recta que intersectam a
fronteira da janela e que portanto, necessitam de ser
recortados?
Todos os segmentos de recta caem numa das seguintes categorias de recorte:
Visível –
Visível –
os dois pontos terminais do segmento de recta estão situados dentro da janela.
Não visível –
se ambos os pontos extremos se encontram no exterior da área de recorte e não existe intersecção com a mesma
Transformações de Visualização 2D
Clipping
Clipping de
de Linhas
Linhas (segmentos
(segmentos de
de recta)
recta)
Exemplo das categorias do segmento:
Não Visível
Visível
Transformações de Visualização 2D
Clipping
Clipping de
de Linhas
Linhas (segmentos
(segmentos de
de recta)
recta)
Visível –
os dois pontos terminais do segmento de recta estão situados dentro da janela:
Não visível –
o segmento de recta satisfaz alguma das seguintes
x
min<x
1, x
2<x
max; y
min<y
1,y
2<y
maxo segmento de recta satisfaz alguma das seguintes desigualdades:
Candidato ao recorte –
x
1, x
2>x
max; x
1, x
2<x
min;
y
min>y
1,y
2;y
1,y
2>y
maxTransformações de Visualização 2D
Algoritmo
Algoritmo de
de Cohen
Cohen--Sutherland
Sutherland ((clipping
clipping))
Organigrama Geral
Testar os pontos extremos, para verificar se o segmento
está todo contido na janela de recorte, evitando cálculos de
intersecção.
Se o segmento é classificado como
candidato a recorte
então:
então:
é dividido em dois segmentos, a partir de uma das
arestas da janela de recorte, de forma que um dos
segmentos possa ser classificado como
não-visível
.
repete-se o processo de divisão do segmento restante
até cada um dos segmentos seja
visível
/
não-visível
Transformações de Visualização 2D
Algoritmo
Algoritmo de
de Cohen
Cohen--Sutherland
Sutherland ((cont
cont…
…))
Para facilitar o processamento, emprega um cálculo lógico ao nível do bit da seguinte forma:
Atribuição de um código de 4 bits a cada ponto extremo do segmento de recta:
O código é determinado de acordo com cada uma das nove regiões possíveis, do plano à qual o ponto extremo pertence:
(
)
bit 1 setado: se x < x
minbit 2 setado: se x > x
maxbit 3 setado: se y < y
minbit 4 setado: se y > y
maxTransformações de Visualização 2D
Algoritmo
Algoritmo de
de Cohen
Cohen--Sutherland
Sutherland (cont
(cont...
...))
I. Atribuição de um código de 4 bits a cada ponto extremo do
segmento de recta:
(
)
bit 1 setado: se x < x
minbit 2 setado: se x > x
maxbit 3 setado: se y < y
minI. O segmento de recta:
é visível se os códigos dos dois pontos extremos são 0000, é não-visível se o AND lógico dos códigos não é 0000 e
é um candidato ao recorte se o AND lógico dos códigos dos pontos terminais é 0000
bit 3 setado: se y < y
minbit 4 setado: se y > y
maxTransformações de Visualização 2D
Algoritmo
Algoritmo de
de Cohen
Cohen--Sutherland
Sutherland (cont
(cont...
...))
Exemplo:
H’
H’’
I’
Critérios:
é
visível
se os códigos dos dois pontos extremos são 0000é
não-visíve
l se o AND lógico dos códigos não é 0000é um
candidato ao recorte
se o AND lógico dos códigos dos pontos terminais é 0000Transformações de Visualização 2D
Algoritmo
Algoritmo de
de Cohen
Cohen--Sutherland
Sutherland (cont
(cont...
...))
Determinam-se os pontos de intersecção dos segmentos
candidatos ao recorte
com a janela
Estes pontos de intersecção subdividem os segmentos de
recta em segmentos de recta mais pequenos, os quais
podem pertencer à categoria
visível
ou
não visível
O segmento de recta da
categoria visível será o segmento
O segmento de recta da
categoria visível será o segmento
de recta recortado
H’
H’’
Transformações de Visualização 2D
Algoritmo
Algoritmo de
de Cohen
Cohen--Sutherland
Sutherland (cont
(cont...
...))
Os pontos de intersecção são determinados através da resolução das equações que representam o segmento e as linhas-fronteiras da janela
Para janelas rectangulares, cujos lados são paralelos aos eixos coordenados, não precisamos de verificar a intersecção do
segmento de recta com todas as quatro linhas-fronteira.
O algoritmo de Cohen-Sutherland determina a(s) linha(s)-fronteira(s) apropriadas para teste:
apropriadas para teste:
H’
H’’
I’
Bit 4 = 1
∩
com y
maxBit 3 = 1
∩
com y
minBit 2 = 1
∩
com x
maxTransformações de Visualização 2D
Exemplo
Exemplo::
AD: A (0000); D(1001) – candidato a recorte
O algoritmo escolhe D como o ponto externo, e emprega a aresta superior para o recorte . Obtemos B(0000)
AB pode é classificado como visível
EI: E(0100); I (1010) – candidato a recorte
Requer várias iterações Requer várias iterações
O primeiro extremo (E) é escolhido, a recortar com a aresta inferior. Obtemos FI, não é visível nem e não-visível.
I(1010) é escolhido onde aplica recorte com a aresta direita, obtendo G(0000)
Transformações de Visualização 2D
Uma questão:
Não Visível
Visível
Candidato a recorte,
mas não vai ser recortado
Transformações de Visualização 2D
Clipping
Transformações de Visualização 2D
Exercício:
Execute o recorte dos
segmentos de recta da
figura, usando o
algoritmo de Cohen
Transformações de Visualização 2D
Clipping
Clipping:: Algoritmo
Algoritmo de
de Liang
Liang--Barsky
Barsky ((1984
1984))
O algoritmo de
Cohen-Sutherland
é sem dúvidas um dos
mais antigos e populares algoritmos utilizados no
processo de
clipping
Porem existem algoritmos de
clipping mais eficientes
e
que utilizam como base a
equação paramétrica
da recta:
∆∆∆∆
x = x
1+ u
∆∆∆∆
x;
y = y
1+ u
∆∆∆∆
y,
0
≤≤≤≤
u
≤≤≤≤
1;
∆∆∆∆
x = x
2– x
1;
∆∆∆∆
y = y
2– y
1Utilizando estas equações paramétricas
Liang
e
Barsky
Transformações de Visualização 2D
Clipping
Clipping:: Algoritmo
Algoritmo de
de Liang
Liang--Barsky
Barsky
Seguindo a abordagem de
Liang-Barsky
podemos traduzir
as condições de
clipping
da seguinte forma:
xw
min≤≤≤≤
x
1+ u
∆∆∆∆
x
≤≤≤≤
xw
maxyw
min≤≤≤≤
y
1+ u
∆∆∆∆
y
≤≤≤≤
yw
maxCada uma destas quatro inequações pode ser expressa
como:
como:
up
k≤≤≤≤
q
k, k = 1, 2, 3, 4
onde os parâmetros
p
ke
q
ksão definidos como:
p
1= -
∆∆∆∆
x , q
1= x
1– xw
minp
2=
∆∆∆∆
x , q
2= xw
max– x
1p
3= -
∆∆∆∆
y , q
3= y
1– yw
minp
4=
∆∆∆∆
y , q
4= yw
max– y
1Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
p1= - ∆∆∆∆x , q1 = x1 – xwmin p2= ∆∆∆∆x , q2 = xwmax – x1 p3= - ∆∆∆∆y , q3 = y1 – ywmin p4= ∆∆∆∆y , q4 = ywmax – y1
Algumas observações
Um segmento paralelo a alguma das paredes da janela de recorte tem pk= 0 onde k = 1, 2, 3 e 4 corresponde à respectiva parede: esquerda, direita, abaixo e acima. Se para além disto qk < 0, então o segmento é totalmente invisível. Se para os k tais que pk= 0 se o segmento é totalmente invisível. Se para os k tais que pk= 0 se verifica que qk ≥ 0 então o segmento está contido nas paredes
paralelas da janela de recorte.
Quando pk < 0 o extremo do segmento de recta vem do exterior da janela de recorte (com relação à respectiva parede definida pelo valor de k) e no caso contrário vem do interior.
Para cada pk ≠≠≠≠ 0 devemos calcular o valor do parâmetro u que corresponde ao ponto de intersecção da recta (definida pelo
Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
(x1, y1)
(x2, y2)
Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
p1= - ∆∆∆∆x , q1 = x1 – xwmin p2= ∆∆∆∆x , q2 = xwmax– x1 p3= - ∆∆∆∆y , q3 = y1 – ywmin p4= ∆∆∆∆y , q4 = ywmax– y1
Algumas observações
Para cada segmento de recta podemos calcular os parâmetros u1 e u2 Estes parâmetros definem que parte do segmento está contido na janela de recorte.
O valor de u1 (de fora para dentro , pk< 0) u1= max {0, rk’s}, onde rk= qk/pk
O valor de u2 (de dentro para fora, pk > 0) u2= min {1, rk’s}, onde rk= qk/pk
Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
p1= - ∆∆∆∆x , q1 = x1 – xwmin p2= ∆∆∆∆x , q2 = xwmax– x1 p3= - ∆∆∆∆y , q3 = y1 – ywmin p4= ∆∆∆∆y , q4 = ywmax– y1 u1= max {0, rk’s}, onde rk= qk/pk ; para pk< 0
u2= min {1, rk’s}, onde rk= qk/pk ; para pk> 0
Exemplo p < 0, p <0 p1 < 0, p3 <0 u1 = max(0, r1, r3) = r1 p2 > 0, p4 > 0 u2 = min(1, r2, r4) = 1 (x1, y1) (x2, y2) r r1 r4 r2
Transformações de Visualização 2D
(10,20) (25,20) (15,17) (15,23) (5,18) R2 ClippingClipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
Exemplo (10,10) (25,10) (15,17) (5,12) (5,18) R1
Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
Exemplo
Calcular p e q para R1
p1 = -
∆
x = -(15 - 5) = -10
p2 =
∆
x = 15 - 5 = 10
p3 = -
∆
y = -(17 - 12) = -5
p4 =
∆
y = 17 - 12 = 5
q1 = x1 - x
wmin= 5 - 10 = -5
q2 = x
wmax- x1 = 25 - 5 = 20
q3 = y1 - y
wmin= 12 - 10 = 2
q4 = y
wmax- y1 = 20 - 12 = 8
Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
Exemplo
Calcular u1 (
de fora para dentro
) para R1
x=x
1+u∆x
y=y
1+u∆y , 0≤ u≤ 1
p1 = -10 < 0
p3 = -5 < 0
r1 = q1/p1 = -5/-10 = 0.5
r3 = q3/p3 = 2/-5 = - 0.4
u1 =
max
(
0
, r1, r3) =
max
(
0
, 0.5, -0.4) = 0.5
Transformações de Visualização 2D
Clipping
Clipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
Exemplo
Calcular u2 (
de dentro para fora
) para R1
p2 = 10 > 0
p4 = 5 > 0
r2 = q2/p2 = 20/10 = 2
r4 = q4/p4 = 8/5 = 1.6
u2 =
min
(
1
, r1, r3) =
min
(
1
, 2, 1.6) =
1
Como u2 resulta
1
, rejeitamos o cálculo de novos
valores de dentro para fora.
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos.. Introdução
Introdução
Definições
Definições ee Notações
Notações::
Um polígono é chamado convexo se o segmento de recta definido por dois quaisquer pontos interiores do polígono está situado completamente dentro do polígono.
Por convenção, um polígono com os vértices P1, P2, ..., PNé chamado positivamente orientado, se uma volta pelos vértices, numa dada ordem, produz um circuito no sentido contrário ao dos ponteiros do ordem, produz um circuito no sentido contrário ao dos ponteiros do relógio (CCW)
A B
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos.. Introdução
Introdução
Definições
Definições ee Notações
Notações (cont
(cont...
...))::
Vectores tridimensionais:
Em ℜ3 podemos definir três vectores coordenados I, J, K. Estes
vectores são vectores unitários com a direcção e sentido da parte dos eixos Ox, Oy e Oz. Então:
Qualquer vector V pode ser definido por componentes em função Qualquer vector V pode ser definido por componentes em função de I, J, K:
V = aI + bJ + cK
As componentes [a, b, c] dos vectores V são também as coordenadas de extremidade do vector V, quando a origem de V se localiza na origem do SCC.
Em situação geral o vector V com extremos em P0e P1:
P
0P
1=(x
1-x
0)I + (y
1-y
0)J + (z
1-z
0)K
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos.. Introdução
Introdução
Definições
Definições ee Notações
Notações (cont
(cont...
...))::
Produto Escalar e Produto Vectorial:
Sejam V1= a1I + b1J + c1K e V2= a2I + b2J + c2K
Produto Escalar: V1 · V2 = a1a2 + b1b2 + c1c2
Dois vectores são perpendiculares sse V1 · V2 = 0 Dois vectores são paralelos sse V1 = kV2
Produto Vectorial: V1 x V2 é um vector cujo módulo é
|V1 x V2| = | V1 ||V2 | sen (θθθθ) onde θ é o ângulo entre V1 e V2 V1 x V2 é um vector perpendicular quer a V1 quer a V2 e cuja direcção é definida pela regra da mano direita:
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos.. Introdução
Introdução
DefiniçõesDefinições ee NotaçõesNotações (cont(cont......))::
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos.. Introdução
Introdução
Definições
Definições ee Notações
Notações (cont
(cont...
...))::
Produto Vectorial (cont...):
Por definição: V1 x V2 = - (V2 x V1 )
De notar também que V x V = 0
Finalmente:
Se V1=a1I Se V1=a1I
Se V
1=a
1I+a
2J+a
3K e V
2=b
1I+b
2J+b
3K então
V
1×
V
2=
∥
I
J
K
a
1a
2a
3b
1b
2b
3∥
=
∥
a
2a
3b
2b
3∥
I+
∥
a
1a
3b
1b
3∥
J+
∥
a
1a
2b
1b
2∥
K
(
a
2b
3−
a
3b
2)
I+
(
a
1b
3−
a
3b
1)
J+
(
a
1b
2−
a
2b
1)
K
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos.. Introdução
Introdução
Como podemos determinar se um ponto P(x, y) está localizado à esquerda ou à direita de um segmento orientado definido pelos pontos A(x1, y1) e B(x2, y2)?
Solução:
Sejam AB e AP dois vectores.
Por definição de produto vectorial:
Se P está a esquerda de AB então o vector AB x AP aponta segundo a
direcção do vector K, que é perpendicular ao plano xOy;
direcção do vector K, que é perpendicular ao plano xOy;
Se P está a direita de AB então o produto vectorial aponta segundo a
direcção –K
Sendo AB= (x2-x1)I + (y2-y1)J e AP = (x-x1)I + (y –y1)J
então AB x AP = [(x2-x1) (y-y1) - (y2-y1) (x-x1)]K
Sendo C = (x2-x1) (y-y1) - (y2-y1) (x-x1), então: Se C > 0, então P está à esquerda de AB
Transformações de Visualização 2D
Recorte
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos
Algoritmo de Sutherland-Hodgman
Seja P1, P2, . . ., PN a lista de vértices do polígono a ser recortado.
Seja a aresta a, determinada pelos pontos extremos A e B, qualquer aresta da janela de recorte (orientada positivamente).
Recortamos cada uma das arestas do polígono em
A B C D Pi-1 Pi
Recortamos cada uma das arestas do polígono em função da aresta a do polígono de recorte, construindo assim um novo polígono cujos vértices são determinados como segue:
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos
Algoritmo de Sutherland
Algoritmo de Sutherland--Hodgman
Hodgman
1.
Transição
Interior-Interior:
(ambos os vértices estão contidos no
semi-plano interior da janela de
recorte)
recorte)
Se ambos
P
i-1e
P
iestão à esquerda
da aresta
a
, então o vértice
P
ié
colocado na lista de vértices de saída
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos
Algoritmo
Algoritmo de
de Sutherland
Sutherland--Hodgman
Hodgman
2. Transição Exterior-Exterior:
(ambos
os
vértices
estão
contidos no semi-plano exterior
Se ambos
P
i-1e
P
iestão à direita
da aresta
a
, nada é colocado na
lista de vértice de saída
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos
Algoritmo
Algoritmo de
de Sutherland
Sutherland--Hodgman
Hodgman
3. Transição Interior-Exterior:
(quando ocorre uma transição do
semi-espaço
interior
para
o
exterior)
exterior)
Se
P
i-1está a esquerda e
P
iestá à
direita da aresta
a
, é calculado o
ponto
de
intersecção
I
do
segmento da recta
P
i-1P
icom a
aresta
estendida
a
,
e
depois
colocado na lista de vértices de
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos
Algoritmo
Algoritmo de
de Sutherland
Sutherland--Hodgman
Hodgman
4. Transição Exterior
4. Transição Exterior--Interior:
Interior: (quando
ocorre uma transição do semi-espaço
exterior para o interior)
Se
P
está a direita e
P
está à esquerda
Se
P
i-1está a direita e
P
iestá à esquerda
direita da aresta
a
, é calculado o ponto de
intersecção
I
do segmento da recta
P
i-1P
icom a aresta estendida
a
, e depois ambos
I
e
P
isão colocados na lista de vértices de
saída
Transformações de Visualização 2D
Recorte
Recorte de
de Polígonos
Polígonos
Algoritmo
Algoritmo de
de Sutherland
Sutherland--Hodgman
Hodgman
O algoritmo de Sutherland-Hodgman processa-se por fases, em cada uma das quais o polígono recortado é novamente sujeito ao recorte de uma das arestas da janela.
Organigrama do Algoritmo:
O algoritmo começa por fazer entrada dos vértices de um polígono, O algoritmo começa por fazer entrada dos vértices de um polígono, um de cada vez.
Para cada vértice de entrada serão gerados zero, um o dois vértices de saída, dependendo da relação dos vértices de entrada com a aresta a de recorte (ver algoritmo).
Atenção: O processo inverso do clipping é denominado supressão – ocultação
Transformações de Visualização 2D
Algoritmo
Algoritmo dede SutherlandSutherland--HodgmanHodgman (Exemplo(Exemplo 11))
A B C D P1 P2 A B C D P1 P2 P
.
I1 i = 2, S = {I1, P2} i=3, S = {I1, P2, P3} P3 A B C D P2 P.
I1 A B C D P2 P.
I1.
I2 i=4, S = {I1, P2, P3, I2}Transformações de Visualização 2D
Algoritmo
Transformações de Visualização 2D
Algoritmo
Transformações de Visualização 2D
Algoritmo