Transformações de Visualização 2D:...
-
Upload
truongdien -
Category
Documents
-
view
216 -
download
0
Transcript of Transformações de Visualização 2D:...
Transformações de Visualização 2D:
Clipping
1
Clipping
Antonio L. BajuelosDepartamento de Matemática
Universidade de Aveiro
Transformações de Visualização 2D�� ClippingClipping (recorte)(recorte)
Qualquer procedimento que identifica porções de umafigura que estão ou dentro ou fora de uma regiãoespecífica é chamada declipping
� Muitos pacotes gráficos combinama transformaçãowindow-to-viewport com clipping de primitivasgráficasdesaída.
2
gráficasdesaída.
� Algumas aplicações:
� extrair parte de uma cena
� identificar superfícies visíveis emvisões 3D
� operações de edição de objectos (copiar, mover)
Transformações de Visualização 2D�� ClippingClipping (cont(cont......))
3
Transformações de Visualização 2D�� ClippingClipping (cont(cont......))
�Clip window : a região na qual umobjecto será“clipado” (geralmente uma área rectangular)
�� Primitivas:
� Pontos
4
� Linhas (segmentos de recta)
� Áreas (polígonos)
� Curvas
� Texto
Transformações de Visualização 2D�� ClippingClipping dede PontosPontos
� Assumir quea clip-window é rectangular
� Um pontoP = (x, y) será considerado para visualizar seforemsatisfeitas as seguintes condições:
xwmin≤ x≤ xwmax
yw ≤ y≤ yw
5
� As arestas daclip window podemser coordenadas dajanela dasworld coordinatesou os límites daviewport.
� Se alguma das condições não for satisfeita, o objecto éclipped, ou seja, fica fora da zona da visualizção
ywmin≤ y≤ ywmax
Transformações de Visualização 2D�� ClippingClipping dede LinhasLinhas (segmentos(segmentos dede recta)recta)
� Recorte de um linha contra uma área rectangular resulta sempre numsegmento 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 segmentosde recta que intersectam a fronteira
6
I. Identificar os segmentosde recta que intersectam a fronteirada janela e que portanto, necessitamde ser recortados.
II. Execução do recorte
Transformações de Visualização 2D�� ClippingClipping dede LinhasLinhas (segmentos(segmentos dede recta)recta)
� Comoidentificar os segmentos de recta que intersectamafronteira da janela e que portanto, necessitamde serrecortados?
� Todos os segmentos de recta caemnuma das seguintescategorias de recorte:
�Visível –
7
�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
�Candidato ao recorte –� o segmento de recta não pertence nem à categoriavisível nem à
categorianão visível
Transformações de Visualização 2D�� ClippingClipping dede LinhasLinhas (segmentos(segmentos dede recta)recta)
� Exemplo das categorias do segmento:
Não Visível
8
Visível
Candidato a Recorte
Transformações de Visualização 2D�� ClippingClipping dede LinhasLinhas (segmentos(segmentos dede 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
xmin<x1, x2<xmax; ymin<y1,y2<ymax
9
� o segmento de recta satisfaz alguma das seguintesdesigualdades:
� Candidato ao recorte –� o segmento de recta não pertence nem à categoriavisível nem
à categorianão visível
x1, x2>xmax; x1, x2<xmin;
ymin >y1,y2 ;y1 ,y2>ymax
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede CohenCohen--SutherlandSutherland((clippingclipping))
Organigrama Geral
� Testar os pontos extremos, para verificar se o segmentoestá todo contido na janela de recorte, evitando cálculos deintersecção.
� Se o segmento é classificado comocandidato a recorteentão:
10
então:
� é dividido em dois segmentos, a partir de uma dasarestas da janela de recorte, de forma que umdossegmentos possa ser classificado comonão-visível.
� repete-se o processo de divisão do segmento restanteaté cada umdos segmentos sejavisível/não-visível
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede CohenCohen--SutherlandSutherland((contcont……))
� 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 dosegmento de recta:
� O código é determinado de acordo com cada uma das noveregiões possíveis, do plano à qual o ponto extremo pertence:
11
(�)bit 1 setado: se x < xmin
bit 2 setado: se x > xmax
bit 3 setado: se y < ymin
bit 4 setado: se y > ymax
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede CohenCohen--SutherlandSutherland (cont(cont......))
I. Atribuição de um código de 4 bits a cada ponto extremo dosegmento de recta:
(�)bit 1 setado: se x < xmin
bit 2 setado: se x > xmax
bit 3 setado: se y < ymin
12
I. O segmento de recta:
� évisívelse os códigos dos dois pontos extremos são 0000,
� énão-visívelse o AND lógico dos códigos não é 0000 e
� é um candidato ao recortese o AND lógico dos códigos dospontos terminais é 0000
bit 3 setado: se y < ymin
bit 4 setado: se y > ymax
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede CohenCohen--SutherlandSutherland (cont(cont......))
� Exemplo:
H’H’’
I’
13
Critérios:� é visível se os códigos dos dois pontosextremos são 0000
� é não-visível se oAND lógico dos códigosnão é 0000
� é umcandidato ao recortese oAND lógico doscódigos dospontos terminais é 0000
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede CohenCohen--SutherlandSutherland (cont(cont......))
� Determinam-se os pontos de intersecção dos segmentoscandidatos ao recortecoma janela
� Estes pontos de intersecção subdividemos segmentos derecta emsegmentos de recta mais pequenos, os quaispodempertencer à categoriavisívelounão visível
� O segmentoderectadacategoriavisível seráo segmento
14
� O segmentoderectadacategoriavisível seráo segmentode recta recortado
H’H’’
I’
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede CohenCohen--SutherlandSutherland (cont(cont......))
� Os pontos de intersecçãosão determinados através da resolução dasequações que representam o segmento e aslinhas-fronteiras dajanela
� Para janelas rectangulares, cujos lados são paralelos aos eixoscoordenados, não precisamos de verificar a intersecção dosegmento de recta comtodas as quatrolinhas-fronteira.
� O algoritmo deCohen-Sutherlanddetermina a(s) linha(s)-fronteira(s)apropriadasparateste:
15
apropriadasparateste:
H’H’’
I’
Bit 4 = 1 � ∩ com ymax
Bit 3 = 1 � ∩ com ymin
Bit 2 = 1 � ∩ com xmax
Bit 1 = 1 � ∩ com xmin
Transformações de Visualização 2D�� ExemploExemplo::
AD: A (0000); D(1001) – candidato a recorte
� O algoritmo escolhe D como o pontoexterno, e emprega a aresta superior para orecorte . Obtemos B(0000)
� AB pode é classificado comovisívelEI: E(0100); I (1010) – candidato a recorte
� Requerváriasiterações
16
� Requerváriasiterações
� O primeiro extremo (E) é escolhido, arecortar com a aresta inferior. Obtemos FI,não é visível nem enão-visível.
� I(1010) é escolhido onde aplica recortecom a aresta direita, obtendo G(0000)
� FG pode ser classificado comovisível
Transformações de Visualização 2D
� Uma questão:
Não Visível
17
I
Visível
Candidato a recorte,mas não vai serrecortado
Transformações de Visualização 2DClippingClipping
18
Transformações de Visualização 2D
Exercício:
Execute o recorte dos segmentos de recta da figura, usando o algoritmo de Cohen -Sutherland.
19
20
Transformações de Visualização 2DClippingClipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky((19841984))
� O algoritmo deCohen-Sutherlandé semdúvidas umdosmais antigos e populares algoritmos utilizados noprocesso declipping
� Poremexistemalgoritmos declipping mais eficienteseque utilizamcomo base aequação paramétricada recta:
∆∆∆∆
21
x = x1 + u∆∆∆∆x;
y = y1 + u∆∆∆∆y,
0 ≤≤≤≤ u ≤≤≤≤ 1; ∆∆∆∆x = x2 – x1; ∆∆∆∆y = y2 – y1
� Utilizando estas equações paramétricasLiang e Barskydesenvolveramo seguinte algoritmo declipping
Transformações de Visualização 2DClippingClipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky� Seguindo a abordagemde Liang-Barskypodemos traduzir
as condições declippingda seguinte forma:xwmin ≤≤≤≤ x1 + u∆∆∆∆x ≤≤≤≤ xwmax
ywmin ≤≤≤≤ y1 + u∆∆∆∆y ≤≤≤≤ ywmax
Cada uma destas quatro inequações pode ser expressacomo:
22
como:upk ≤≤≤≤ qk, k = 1, 2, 3, 4
onde os parâmetrospk eqk são definidos como:p1 = - ∆∆∆∆x , q1 = x1 – xwmin
p2 = ∆∆∆∆x , q2 = xwmax – x1
p3 = - ∆∆∆∆y , q3 = y1 – ywmin
p4 = ∆∆∆∆y , q4 = ywmax – y1
Transformações de Visualização 2DClippingClipping:: 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 dajanela de recortetem pk= 0 onde k = 1, 2, 3 e 4 corresponde à respectiva parede:esquerda, direita , abaixo e acima. Se para além distoqk < 0, entãoo segmentoé totalmente invisível. Se paraos k tais que pk= 0 se
23
o segmentoé totalmente invisível. Se paraos k tais que pk= 0 severifica que qk ≥ 0 então o segmento está contido nas paredesparalelas dajanela de recorte.
� Quandopk < 0 o extremo do segmento de recta vem do exterior dajanela de recorte (com relação à respectiva parede definidapelo valordek) e no caso contrário vem do interior.
� Para cadapk ≠≠≠≠ 0 devemos calcular o valor do parâmetrou quecorresponde ao ponto de intersecção da recta (definida pelosegmento que estamos a analisar) com a extensão dak-parede dajanela de recorte. Por definição termos queuk = qk / pk
Transformações de Visualização 2DClippingClipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
(x1, y1)
(x2, y2)
24
Qual a parte do segmento de que está dentro da janela de recorte?
Transformações de Visualização 2DClippingClipping:: 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âmetrosu1 e u2
Estes parâmetros definem que parte do segmento está contidona
janela de recorte.
25
� O valor deu1 (de fora para dentro ,pk < 0)
u1 = max {0, rk’s}, onde rk = qk/pk
� O valor deu2 (de dentro para fora,pk > 0)
u2 = min {1, r k’s}, onde rk = qk/pk
� Seu1 > u2 então o segmento de recta étotalmente invisível
Transformações de Visualização 2DClippingClipping:: 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 < 0u2 = min {1, r k’s}, onde rk = qk/pk ; para pk > 0
� Exemplo
p < 0, p <0
26
p1 < 0, p3 <0u1 = max(0, r1, r3) = r1
p2 > 0, p4 > 0u2 = min(1, r2, r4) = 1
(x1, y1)
(x2, y2)
r3
r1
r4r2
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 2DClippingClipping:: 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
28
p4 = ∆y = 17 - 12 = 5
q1 = x1 - xwmin= 5 - 10 = -5
q2 = xwmax - x1 = 25 - 5 = 20
q3 = y1 - ywmin= 12 - 10 = 2
q4 = ywmax - y1 = 20 - 12 = 8
Transformações de Visualização 2DClippingClipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
� Exemplo
Calcular u1 (de fora para dentro) para R1
x=x1+u∆x
y=y1+u∆y , 0≤ u≤ 1
p1 = -10 < 0
p3 = -5 < 0
29
r1 = q1/p1 = -5/-10 = 0.5
r3 = q3/p3 = 2/-5 = - 0.4u1 = max (0, r1, r3) = max (0, 0.5, -0.4) = 0.5
Substituindo na equação paramétrica:
x = 5 + 0.5 * 10 = 10 (o que já sabíamos)
y = 12 + 0.5 * 5 = 14.5 (o que não sabíamos)
Transformações de Visualização 2DClippingClipping:: AlgoritmoAlgoritmo dede LiangLiang--BarskyBarsky
� Exemplo
Calcular u2 (de dentro para fora) para R1
p2 = 10 > 0
p4 = 5 > 0
30
r2 = q2/p2 = 20/10 = 2
r4 = q4/p4 = 8/5 = 1.6u2 = 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�� RecorteRecorte dede PolígonosPolígonos.. IntroduçãoIntrodução
DefiniçõesDefinições ee NotaçõesNotações::� Um polígono é chamadoconvexose o segmento de recta definido por
dois quaisquer pontos interiores do polígono está situadocompletamente dentro do polígono.
� Por convenção, um polígono com os vérticesP1, P2, ..., PN é chamadopositivamente orientado, se uma volta pelos vértices, numa dadaordem,produzum circuito no sentidocontrárioao dos ponteirosdo
31
ordem,produzum circuito no sentidocontrárioao dos ponteirosdorelógio (CCW)
Convexo Não-Convexo
A
B
Orientação Positiva (CCW) vs Orientação Neg ativa (CW)
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonos.. IntroduçãoIntrodução
DefiniçõesDefinições ee NotaçõesNotações (cont(cont......))::
� Vectores tridimensionais:� Em ℜ3 podemos definir três vectores coordenadosI, J, K. Estes
vectores são vectores unitários com a direcção e sentido da partedos eixosOx, Oy eOz. Então:
� QualquervectorV podeserdefinido por componentesemfunção
32
� QualquervectorV podeserdefinido por componentesemfunçãode 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 doSCC.
� Em situação geral o vector V com extremos em P0 e P1:
P0P1=(x1-x0)I + (y1-y0)J + (z1-z0)K� O módulo de um vector V, |V| é dado pela fórmula:V a b c= + +2 2 2
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonos.. IntroduçãoIntrodução
DefiniçõesDefinições ee NotaçõesNotações (cont(cont......))::� Produto Escalar e Produto Vectorial:
� SejamV1= a1I + b1J + c1K e V2= a2I + b2J + c2K
Produto Escalar: V1 · V2 = a1a2 + b1b2 + c1c2
� Dois vectores são perpendiculares sseV1 · V2 = 0
33
� Dois vectores são paralelos sseV1 = kV2
Produto Vectorial: V1 x V2 é um vector cujo módulo é
|V1 x V2| = | V1 ||V2 | sen (θθθθ) ondeθ é o ângulo entreV1 eV2
V1 x V2 é um vector perpendicular quer aV1 quer aV2 e
cuja direcção é definida pela regra da mano direita:
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonos.. IntroduçãoIntrodução
DefiniçõesDefinições ee NotaçõesNotações (cont(cont......))::
� Produto Escalar e Produto Vectorial:
34
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonos.. IntroduçãoIntrodução
DefiniçõesDefinições ee NotaçõesNotações (cont(cont......))::
� Produto Vectorial (cont...):� Por definição: V1 x V2 = - (V2 x V1 )
� De notar tambémqueV x V = 0
� Finalmente:SeV1=a1 I
35
SeV1=a1 I
SeV 1=a1 I+a 2J+a3 K e V 2=b1 I+b 2 J+b3 K então
V1× V 2= ∥I J Ka1 a2 a3
b1 b2 b3
∥= ∥a2 a3
b2 b3
∥I+ ∥a1 a3
b1 b3
∥J+ ∥a1 a2
b1 b2
∥K
(a2b3− a3 b2) I+ (a1b3− a3 b1)J+ (a1b2− a2 b1)K
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonos.. IntroduçãoIntrodução
� Como podemos determinar se um pontoP(x, y) está localizado àesquerdaou à direita de um segmento orientado definido pelospontosA(x1, y1) eB(x2, y2)?
� Solução:� SejamAB eAP dois vectores.� Por definição deproduto vectorial:
� SeP está a esquerda deAB então o vectorAB x AP aponta segundo adirecçãodo vectorK , queéperpendicularaoplanoxOy;
36
direcçãodo vectorK , queéperpendicularaoplanoxOy;� Se P está a direita deAB então o produto vectorial aponta segundo a
direcção–K
� SendoAB= (x2-x1)I + (y2-y1)J e AP = (x-x1)I + (y –y1)JentãoAB x AP = [(x2-x1) (y-y1) - (y2-y1) (x-x1)]KSendoC = (x2-x1) (y-y1) - (y2-y1) (x-x1), então:� SeC > 0, entãoP está à esquerda deAB� SeC < 0, entãoP está à direita deAB
Transformações de Visualização 2D
RecorteRecorte dede PolígonosPolígonos
37
Transformações de Visualização 2DRecorteRecorte dede PolígonosPolígonosAlgoritmo de Sutherland-Hodgman
� SejaP1, P2, . . ., PN a lista de vértices dopolígonoaser recortado.
� Seja a arestaa, determinada pelos pontos extremosA e B, qualquer aresta dajanela de recorte(orientada positivamente).
� Recortamoscadauma dasarestasdo polígonoem
A
BC
D
Pi-1
Pi
38
� Recortamoscadauma dasarestasdo polígonoemfunção da arestaa do polígono de recorte,construindo assim um novo polígono cujos vérticessão determinados como segue:
� Considere a aresta do polígonoPi-1Pi :
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonosAlgoritmo de SutherlandAlgoritmo de Sutherland--HodgmanHodgman
1. Transição Interior-Interior:(ambos os vértices estão contidos nosemi-plano interior da janela derecorte)
39
recorte)
Se ambosPi-1 e Pi estão à esquerdada arestaa, então o vérticePi écolocado na lista de vértices de saída
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonosAlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman
2. Transição Exterior-Exterior:(ambos os vértices estãocontidos no semi-plano exterior
40
Se ambosPi-1 e Pi estão à direitada arestaa, nada é colocado nalista de vértice de saída
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonosAlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman
3. Transição Interior-Exterior:(quando ocorre uma transição dosemi-espaço interior para oexterior)
41
exterior)
SePi-1 está a esquerda ePi está àdireita da arestaa, é calculado oponto de intersecção I dosegmento da rectaPi-1Pi com aaresta estendidaa, e depoiscolocado na lista de vértices desaída
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonosAlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman
4. Transição Exterior4. Transição Exterior--Interior: Interior: (quando ocorre uma transição do semi-espaçoexterior para o interior)
Se P estáa direita e P estáà esquerda
42
Se Pi-1 estáa direita e Pi estáà esquerdadireita da arestaa, é calculado o ponto deintersecçãoI do segmento da rectaPi-1Picoma aresta estendidaa, e depois ambosIe Pi são colocados na lista de vértices desaída
Transformações de Visualização 2D�� RecorteRecorte dede PolígonosPolígonosAlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman
O algoritmo deSutherland-Hodgmanprocessa-se por fases, em cada uma dasquais o polígono recortado é novamente sujeito ao recorte de uma das arestasda janela.
Organigrama do Algoritmo:O algoritmocomeçapor fazerentradadosvérticesdeum polígono,
43
O algoritmocomeçapor fazerentradadosvérticesdeum polígono,um de cada vez.
Para cada vértice de entrada serão gerados zero, um o dois vérticesde saída, dependendo da relação dos vértices de entrada com aarestaa de recorte (ver algoritmo).
Atenção: O processo inverso doclipping é denominadosupressão– ocultaçãode uma parte da cena, de forma a torná-la invisível.
O algoritmo deSutherland-Hodgman pode ser modificado para produzirsupressão de imagem.
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman (Exemplo(Exemplo 11))
A
BC
D
P1
P2
A
BC
D
P1
P2
P
. I1
i = 2, S = {I1, P2}
44
i=3, S = {I1, P2, P3}
P3
A
BC
D
P2
P3
. I1
A
BC
D
P2
P3
. I1
. I2
i=4, S = {I1, P2, P3, I2}
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman (Exemplo(Exemplo 22))
45
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman (Exemplo(Exemplo 22))
46
Transformações de Visualização 2D�� AlgoritmoAlgoritmo dede SutherlandSutherland--HodgmanHodgman (Exemplo(Exemplo 22))
47