24
Desenho de primitivas vetoriais em Canvas no MATLAB Pedro Cortez Lopes Rafael Lopez Rangel Luiz Fernando Martha CIV2801 – Fundamentos da Computação Gráfica Aplicada 2019.2

Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Desenho de primitivas vetoriais em Canvas no MATLAB

Pedro Cortez Lopes

Rafael Lopez Rangel

Luiz Fernando Martha

CIV2801 – Fundamentos da Computação Gráfica Aplicada 2019.2

Page 2: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Funções de plotagem no MATLAB

O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização de curvas e gráficos, bem como a modelagem gráfica de objetos.

A função plot tem como entrada vetores x e y, onde cada par de coordenadas

(xi,yi) representa um ponto a ser conectado por retas.

A função scatter tem como entrada vetores x e y, onde cada par de coordenadas

(xi,yi) representa um ponto a ser plotado. A especificação

‘filled’ faz com que esses pontos sejam círculos cheios.

O comando hold on garante que o

último plot seja mantido no canvas

(eixos de plotagem).

Page 3: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Funções de plotagem no MATLAB

As funções gráficas do MATLAB podem ser usadas para visualizar modelos estruturais, como, por exemplo, um pórtico tridimensional.

Page 4: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Funções de auxiliares de desenho

Page 5: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Funções de auxiliares de desenho

Page 6: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Funções de auxiliares de desenho

Page 7: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformações Geométricas

Transformação Linear:

Page 8: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformações Geométricas Exemplo: R3 R2

Page 9: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformações Lineares R2 R2

x

y

P =

y´ P´ =

x

y

x

y

m11 x´

y´ =

m21 m22

m12

T(a1 P1+ a2 P2) = a1 T(P1) + a2 T(P2)

Mostre que:

1

0 x

y

0

1

m11

m21 1

0 T =

m12

m22 0

1 T =

T (0) = 0 A)

B)

Page 10: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformação Linear (escala em relação à origem)

x

y

sx x´

y´ =

x

y

P =

y´ P´ =

x

y

0 sy

0

Encurtamento (0< sx <1) ,

Alongamento (sy >1)

Page 11: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

x

y

P

P =

y´ P´ =

x´ = -1.x

y´ = y

x

y

x

y

-1

0

0

1

y´ =

Transformações Lineares (espelhamento em relação ao eixo y)

Page 12: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

x

y

x´ = x.cos q - y.sen q

y´ = x.sen q + y.cos q

cos q x´

y´ =

sen q cos q

-sen q

x

y

P =

y´ P´ =

x

y q

Transformações Lineares (Rotação em relação à origem)

Page 13: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

x

y

cos q u

v =

sen q cos q

-sen q

u

x

y

P = x

y

v

u

v ou

- q

x

y

ux u

v =

vx vy

uy

x

y

P =

y´ P´ =

x

y q

Transformação Linear (rotação vs. mudança de base)

Rotação de um ponto por um ângulo q tem o mesmo

efeito da rotação dos eixos da base por um ângulo –q.

A matriz que implementa a transformação é construída

por linhas, colocando os cossenos diretores dos

vetores da nova base em relação à antiga em cada linha.

Page 14: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformações Lineares Propriedades

(Propriedade muito importante em computação gráfica)

Linha reta Linha reta

Page 15: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

x

y

P

x

y P’ =

P’

tx

ty

t =

tx

ty

+ = x’

y’

x

y

? x´

y´ =

? ?

? Não pode ser

escrita dessa maneira

x

y

1 x´

y´ =

0 1

0 tx

ty

+ Não é prático

para implementação

Transformação por Translação

Page 16: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformações Afins (transformations lineares com translação)

Page 17: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Vantagem de expressar uma tranformação por uma única matriz: concatenação

x

y

x0

y0

a

x

y

x

y

a

x

y

x0

y0

1 0

0 1

0 0 1

0

0

-

-

x

y 1 0

0 1

0 0 1

0

0

x

y

cos sin

sin cos

a a

a a

-

0

0

0 0 1

x

y

x

y

x

y

x

y

'

'

cos sin

sin cos

1

1 0

0 1

0 0 1

0

0

0 0 1

1 0

0 1

0 0 1 1

0

0

0

0

-

-

-

a a

a a

Page 18: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Concatenação de Transformações

x

y

x

y

x

y

x

y

x

y

x

y T1

R1

E

R2

T2

P’= T2 R2 E R1 T1 P

Page 19: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Definições Sistema de Coordenadas do Mundo (World Coordinate System) - É o espaço de coordenadas do objeto (modelo). É o espaço onde o modelo de aplicacação é definido. Sistema de Coordenadas da Tela (Screen Coordinate System) - É o espaço de cooordenadas onde a imagem é mostrada. Janela do Mundo (World Window ou Clipping Window) - É o retângulo no sistema de coordenadas do mundo que define a região que é mostrada. Janela de Interface - É a janela aberta na tela em que a imagem será mostrada. Viewport - É a porção retangular da janela de interface que define onde a imagem é mostrada (usualmente é toda a janela de interface, mas em alguns casos pode ser modificada para uma porção da janela de interface). Transformação Window-Viewport - É o processo de mapeamento de uma world window em coordenadas do mundo para coordenadas da tela de um Viewport.

(Fonte: Hankins, 2014 – Lecture Notes on Computer Graphics at MTSU)

Transformação Window-Viewport

Page 20: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Transformação Window-Viewport

Page 21: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Proporção (regra de três):

Transformação Window-Viewport é uma Transformação Afim

0 0

0 01

w

s w

w

s w

xx xa e a e

yy yd f d f

Page 22: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Ajuste dos limites da Window para manter razão de aspecto do Viewport

Quando os retângulos que definem window e viewport não são proporcionais,

ocorre o que se chama de distorção, fenômeno este que pode ser visualizado

na figura abaixo, onde a “torre de uma igreja” passou a ser vista como um

“galpão”.

Window

World

Viewport

Canvas

Para que tal efeito não ocorra, é necessário que os lados da window e viewport

sejam proporcionais.

Page 23: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

Ajuste dos limites da Window para manter razão de aspecto do Viewport (cont.)

1. Obter as dimensões do canvas (viewport) em pixels:

w (largura) h (altura)

2. Calcular a razão de aspecto do retângulo do canvas:

h_w = h / w (altura / largura)

3. Inicializar limites da window com os mínimos e máximos da caixa

envolvente do modelo: xmin, xmax, ymin, ymax

4. Calcular o centro da window e tamanhos mínimos com folga de 10%:

Lx = (xmax – xmin) * 1.10 Ly = (ymax – ymin) * 1.10

Mx = (xmin + xmax) / 2 My = (ymin + ymax) / 2

Considerando que o viewport ocupa integralmente o canvas, para que se

consiga definir um par window-viewport de modo a não ocorrer a distorção e

utilizar toda a superfície de visualização, deve-se proceder da seguinte forma:

Page 24: Desenho de primitivas vetoriais em Canvas no MATLAB · O MATLAB oferece funcionalidades de desenho e plotagem de relativo fácil uso. Comandos como plot permitem a visualização

5. Ajustar tamanho da window para que não haja distorção:

6. Calcular os limites ajustados da window:

xmin = Mx – Lx / 2 ymin = My – Ly / 2

xmax = Mx + Lx / 2 ymax = My + Ly / 2

Ajuste dos limites da Window para manter razão de aspecto do Viewport (cont.)

Canvas w-1

h-1

h_w = h/w

World

y_x > h_w

Lx = Ly / h_w

y_x < h_w

Ly = Lx * h_w

(0,0)

y_x = Ly/Lx

Window Lx

Ly

Viewport