RECORTE DE FIGURAS Algoritmo proposto para Recorte de Segmentos (atribuído a Ivan Sutherland e Dan Cohen) Para o entendimento do algoritmo a ser proposto,

Slides:



Advertisements
Apresentações semelhantes
Continuidade: sem interrupções
Advertisements

Estruturação de Linguagens (Pascal e C++)
Conceitos e Propriedades
Pesquisa de Informação
Manuseamento de strings
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 11.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 10.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 9.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 11.
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais.
ESTRUTURAS DO TIPO FILA
Teste de Software Parte 3.
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Estrutura de Dados I Profº.: ABC Sampaio
Computação Gráfica I Conteúdo: Professor: - Recorte 2D
Fase II - Refinamento Aurora Pozo.
Adaptado de material da profa. Maria Aparecida Livi
Algoritmos Distribuídos Professora: Lúcia Drummond
Introdução à Computação Gráfica Recorte
Recorte e seleção de linhas e polígonos
Rasterização de linhas e polígonos
INF 1366 – Computação Gráfica Interativa Clipping (Recorte)
Linha de produção de imagens com o OpenGL™ (OpenGL Rendering Pipeline)
Métodos de Classificação por Seleção: HeapSort
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica: Rendering e Rasterização
Sincronização de Processos (2)
Listas com Ponteiros Listas encadeadas Listas circulares.
Sintaxe de Fortran 25/abril/2006. Comandos Fortran PROGRAM PRINT READ STOP END.
Robson Godoi / Sandra Siebra
Robson Godoi / Sandra Siebra
Algoritmos e Programação
O Portal do Estudante de Computação
Árvore Geradora Mínima
Paradigmas de programação
João Lucas de Oliveira Torres
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
I- Introdução Motivação.
I- Introdução Motivação.
LISTAS DUPLAMENTE ENCADEADAS
Algoritmos de varredura linear e busca de padrões
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Estrutura de Dados Unidade 16 Simulação da função Fatorial utilizando recursão – 16.1 Prof. Dr. Roberto Ferrari Jr.
Material Didático Proposto 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Comissão para Coordenação das Atividades Pedagógicas.
Var a: tPtNo; begin { corpo principal } PercPreOrdem(a);... a Visão esquemática da memória.
Listas duplamente encadeadas Estrutura: tDado = integer; { ou real, char, etc.} tPtNo = ^tNo; tNo = record Ant: tPtNo Dado: tDado; Prox: tPtNo; end; var.
Procedure PercPreOrdem(a: tPtNo); var q: tPtNo; P: tPilha; begin Inicializa(P); Empilhar(P,a); while not PilhaVazia(P) do begin q:= Topo(P); Desempilhar(P);
O Portal do Estudante de Computação
Geração de Código Intermediário
Modelos de Paradigmas de programação
Estrutura de Decisão e Repetição
Aula 6 - Estruturas de Controle
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Linguagem Pascal Prof. Sérgio Rodrigues.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Computação Eletrônica
Professor Ulisses Vasconcelos
Arquivos. Motivação Imagine dar entrada (digitar), a cada execução do programa, em todos os dados de um sistema. por exemplo, todos os registro de livros.
Computação Gráfica - Recorte
Programação de Computadores - 1
Elsa Carvalho BEGIN  := id; b:=true; S:=[,..., ] WHILE (S  AND b)DO := top(S); S:=pop(S); := ; IF s e v são da forma f(t 1,... t n ), g(r 1,..., r m.
Introdução à Programação
Computação Gráfica - Recorte Profa. Mercedes Gonzales Márquez.
Prof. Edison Oliveira de Jesus
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Introdução à Computação Gráfica Rasterização
Transcrição da apresentação:

RECORTE DE FIGURAS Algoritmo proposto para Recorte de Segmentos (atribuído a Ivan Sutherland e Dan Cohen) Para o entendimento do algoritmo a ser proposto, uma constatação importante é que uma janela retangular, por ser uma área convexa, garante-nos que a parte visível de um segmento de reta será sempre um segmento de reta como mostra a figura abaixo. Diversas situações mostrando que a parte visível de um segmento de reta é um segmento de reta

Divisão lógica do plano bidimensional para aplicação do recorte RECORTE DE FIGURAS Divisão lógica do plano bidimensional para aplicação do recorte

RECORTE DE FIGURAS COD [primeiro parâmetro, segundo parâmetro] onde: Primeiro parâmetro pode ser: “ “ ou “esquerda de Xm” ou “direita de XM “ Segundo parâmetro pode ser: “ “ ou “base de Ym” ou “topo de YM“) Exemplos: Para uma janela de recorte com fronteiras Xm=1, Ym=2, XM=4, YM=6, Cada um dos pontos abaixo teriam os seguintes COD's: (3, 4) ==> [ ] (5, 4) ==> [dir] (7, 8) ==> [dir, topo] (3, 1) ==> [base]

RECORTE DE FIGURAS ALGORITMO 1: LOCALIZAÇÃO DO PONTO EM RELAÇÃO ÀS 9 REGIÕES

RECORTE DE FIGURAS ALGORITMO 2 inicio aplicar algoritmo 1 para aplicar x, y => COD 1 1 1 aplicar algoritmo 1 para x, y => COD 2 2 2 A COD 1 = [ ] & S fim, COD 2 = [ ] reta visível N S fim, COD 1 = COD 2 & COD 1 ≠ [ ] & COD 2 ≠ [ ] reta invisível N c : = COD 1 S c = [ ] c := COD 2 N B

RECORTE DE FIGURAS ALGORITMO 2 B S calcule y c = esq p/ x = x N c = dir S p/ x = x M N calcule x S c = abaixo p/ y = y m N S calcule x c = acima p/ y = y M N S x = x c = COD 1 1 y = y 1 N aplicar x = x 2 algoritmo 1 para y = y x , y => COD 1 2 1 1 aplicar algoritmo 1 para x , y => COD 2 2 2 A

RECORTE DE FIGURAS Uma codificação para os algoritmos 1 e 2 é mostrada a seguir. Type limites = (dir, esq, base, topo); Codigo = set of limites; Var xmin, xmax Ymin, ymax: real; (limites da janela) Function Recorta (var x1’, y1, x2, y2: real): boolean; Var c1, c2: codigo; Procedure Codifica (x, y: real; var c: codigo); Begin C:=   If x < xmin then c ; =  esq  else if x > xmax then c :=  dir ; if y < ymin then c:= c +  base  else if y > ymax then c:= c +  topo ; end; (codifica) procedure RecortaPonta (var x, y:real) begin if x < xmin then begin y:= y1 + (y2 – y1) * (xmin – x1) / (x2 – x1); x:= xmin; end else if x > xmax then begin y:= y1 + (y2 – y1) * (xmax – x1) / (x2 – x1); x:= xmax; else if y > ymax then begin x:= x1 + (x2 – x1) * (ymax – y1) / (y2 – y1) y := ymax end else begin x:= x1 + (x2 – x1) * (ymin – y1) / (y2 – y1); y := ymin end; (RecortaPonta) begin Recorta := true; Codifica (x1,y1,c1); Codifica (x2,y2,c2); while (c1< >  ) and (c1*c2 =   ) do RecortaPonta (x1,y1 ); Codifica (x1,y1,c1) end; if c1 < >   then Recorta := false else while (c2 < >   ) do RecortaPonta (x2,y2 ); Codifica (x2,y2,c2) end; ( Recorta )

RECORTE DE FIGURAS Recorte de polígonos O procedimento para recorte de um polígono em relação a uma janela poderia ser tratado individualmente para cada segmento de reta do polígono com os algoritmos 1 e 2 vistos anteriormente. Contudo, o recorte do polígono faz surgir arestas e vértices que não pertenciam à figura como na figura 5.3, onde o vértice A não pertencia ao polígono original (antes do recorte) . FIGURA 5.3

RECORTE DE FIGURAS

RECORTE DE FIGURAS P S (c) (a) (b) S P P P (d) S

RECORTE DE FIGURAS Limite 1 Limite 2 Limite 3 Limite 4 POLÍGONO RECORTADO

RECORTE DE FIGURAS

RECORTE DE FIGURAS

RECORTE DE FIGURAS Type tipo = (primeiro, ultimo, outros); var Prim : vertice; procedure RecortaPoligono (P: vertice, lim: limite; t: tipo); begin if t = primeiro then begin Prim := P ; If Dentro (P.lim) then GERA(P) end else if Dentro (P.lim) then if Dentro(S.lim) then GERA(P) else begin GERA ( Intersecao (P,S, lim) ); GERA (P) else if Dentro(S.lim) then GERA(Intersecao(S,P, lim); S: = P; if t=ultimo then if Dentro(S, lim) and not Dentro(Prim, lim) then else if Dentro(Prim, lim) and not Dentro(S,lim) then GERA(Intersecao(Prim,s,lim)); End; ( RecortaPoligono ) Listagem 2 : Codificação do Algoritmo Sutherland-Hodgman