Exercícios 2D
Reveja a matéria de Álgebra Linear e de Geometria Analítica.
Geometria 2D
Distância de um ponto a uma reta |
---|
- A distância () entre o ponto vermelho () e a reta azul é a distância entre o ponto vermelho () e o ponto azul ().
- O ponto azul () é a interseção entre a reta azul e a reta verde tracejada.
- A reta verde tracejada tem equação paramétrica - falta determinar o vetor .
- O parâmetro da reta verde tracejada é perpendicular ao parâmetro da reta azul:
Exercício 1
Considere a equação paramétrica da reta, .
Suponha que são dados dois pontos, e .
Determine os valores dos parâmetros da reta que passa em e tais que:
- quando e
- quando .
Exercício 2
Escreva uma expressão matemática para definir:
- Os segmentos de reta , e .
- O triângulo de vértices .
- O quadrado .
- O interior do quadrado e triângulo anteriores.
Exercício 3
Encontre os valores dos parâmetros da equação paramétrica:
- Da reta:
- Que passa nos pontos e .
- Que passa nos pontos e .
- Que passa nos pontos e .
- Da reta com equação algébrica:
- .
- .
- .
- Da circunferência:
- Centrada em e de raio .
- Centrada em e de raio .
- Centrada em e de raio .
- Centrada em e que passa no ponto .
- Centrada em e que passa no ponto .
- Centrada em e que passa no ponto .
Programação 2D
Reveja a programação, em particular a linguagem
JavaScript
.
Exercício 4
Calcule os parâmetros da equação algébrica da reta (), dadas as coordenadas de dois pontos.
- Implemente a função
eqna_s(x1, y1, x2, y2)
que devolve um objeto com atributos{A, B, C}
. - Em que casos é que as entradas
x1, y1, x2, y2
não definem uma reta? No seu código detete esse caso e devolvanull
. - Em que casos é que define a mesma reta que ? Implemente uma função
equala_ss(A1, B1, C1, A2, B2, C2)
que devolvetrue
se os parâmetros definem a mesma reta efalse
caso contrário.
Exercício 5
Calcule os parâmetros da equação paramétrica da reta (), dadas as coordenadas de dois pontos.
- Implemente a função
eqnp_s(x1, y1, x2, y2)
que devolve um objeto com atributos{P, v}
. - Em que casos é que as entradas
x1, y1, x2, y2
não definem uma reta? No seu código detete esse caso e devolvanull
. - Em que casos é que os parâmetros definem a mesma reta que os parâmetros ? Implemente uma função
equalp_ss(P1, v1, P2, v2)
que devolvetrue
se os parâmetros definem a mesma reta efalse
caso contrário.
Exercício 6
Implemente uma função
dot(x1, y1, x2, y2)
para calcular o produto interno
Use essa função para implementar funções para calcular:
- O comprimento de um vetor,
length_v
: . - A distância entre dois pontos,
dist_pp
: . - A distância de um ponto a uma reta,
dist_ps
. Sugestão: Use a equação paramétrica da reta. - O «reflexo» de um ponto por uma reta,
mirror_ps
. - O «reflexo» de uma reta por outra reta,
mirror_ss
. - Se duas retas são perpendiculares,
are_perp
.
Exercício 7
Pode gerar pontos de uma circunferência usando uma equação paramétrica.
Implemente a função points_c(x1, y1, r, n)
que gera uma lista com pontos equidistantes da circunferência de centro e raio .
Use a função points_c
para estimar a distância de uma circunferência a:
- Um ponto:
edist_cp
. - Uma reta:
edist_cl
. - Outra circunferência:
edist_cc
.
Exercício 8
Pode gerar pontos de um segmento de reta usando os dois extremos do segmento e uma equação paramétrica.
Implemente a função points_s(x1, y1, x2, y2, n)
que gera uma lista com pontos equidistantes do segmento limitado pelos pontos e . Sugestão: Use a equação vetorial da reta:
Estime a distância de um segmento de reta a:
- Um ponto:
edist_sp
. - Outro segmento de reta:
edist_ss
. - Uma circunferência:
edist_sc
. Suponha que esta circunferência:- Está definida por centro e raio.
- Está aproximada por um conjunto de pontos.
Exercício 9
A forma de representar as coordenadas dos pontos usada acima é muito «trapalhona».
Em vez de usar x1, y1
(ou outros indíces) use listas, P1 = [x1, y1]
, para representar pontos. Atualize todas as funções anteriores.
Por exemplo, x = dot(P, Q)
.
Exercício 10
Pode obter formas simples usando apenas conjuntos de pontos para definir o contorno do objeto gráfico.
Implemente:
-
A função
join(A, B)
em queA
eB
são listas de pontos e que devolve a lista que resulta de acrescentar os pontos deB
a seguir aos pontos deA
. -
A função
frame(A)
que calcula os cantos superior esquerdo e inferior direito dos pontos emA
, isto é, a moldura para os pontos deA
. -
A função
min_circ(A)
que calcula a menor circunferência que contém todos os pontos deA
. Resolva em duas versões: uma que devolve o centro e o raio da circunferência e outra que devolve uma aproximação com pontos.
Exercício 11
Pode transformar pontos usando as operações da álgebra linear.
Implemente a função [x1, y1, z1] = dot_mv(a,b,c,d,e,f,g,h,i,x0,y0,z0)
que calcula
Esta forma de representar matrizes e vetores é muito «trapalhona».
Represente os vetores por listas, v = [x, y, z]
, e as matrizes por listas de listas,
A = [[a, b, c], [d, e, f], [g, h, i]]
. Note que A[0]
é a primeira linha de A
.
Deve ficar com uma função X1 = dot_mv(A, X0)
.
Exercício 12
Implemente funções para gerar matrizes e calcular operações comuns.
- A matriz
zeros(n,m)
tem linhas, colunas e todas as entradas são . - Na matriz
ones(n, m)
tem linhas, colunas e todas as entradas são . - A matriz
eye(n)
é a matriz identidade de ordem . - A função
t(A)
é a matriz transposta de . - A função
sum_mm(A, B)
soma as matrizes e . Se as dimensões forem incompatíveis, devolvenull
. - A função
dot_mm(A, B)
multiplica as matrizes e . Se as dimensões forem incompatíveis, devolvenull
. - A função
translate(dx, dy)
devolve a matriz da translação por . - A função
rotate(alpha)
devolve a matriz da rotação por radianos. - A função
scale(sx, sy)
devolve a matriz da escala por .
Exercício 13
Use a biblioteca de funções que definiu acima para construir e transformar (aproximações) de circunferências e de segmentos.
Visualize as formas originais (a verde) e transformadas (a vermelho) nos sistemas C2D
e SVG
.
Exercício 14
Implemente a regra par-ímpar de enchimento de formas.
Suponha que F
é um conjunto de pontos que aproxima uma figura 2D:
- Defina a função
sort_h(F)
que devolve os pontos deF
ordenados da esquerda para a direita (isto é, primeiro os pontos com menor coordenadax
). - Defina a função
strip_h(F, y0, e)
que devolve os pontos deF
que estão numa faixa horizontal, isto é os pontos deF
cuja coordenada é tal que . Se não existirem pontos assim emF
, devolve a lista vazia. - Defina a função
first_left(F)
que devolve o ponto mais à esquerda deF
. SeF
for uma lista vazia devolvenull
. - Defina a função
next_right(F, x0)
que devolve o ponto deF
que, de todos os pontos deF
com coordenadax
maior quex0
, é o que tem menor coordenadax
. Se não existir tal ponto devolvenull
. - Use as funções
sort_h, strip_h, first_left
enext_right
para definir a funçãofill_evenodd(F, ...)
, que implementa a regra par-ímpar por faixas horizontais.- O resultado deve ser uma lista com os segmentos horizontais interiores, sendo cada segmento definido por dois pontos.
- Considere ainda que argumentos são úteis e/ou necessário e como detetar e assinalar potenciais erros.
Exercício 15
Visualize o preenchimento de formas pela regra par-ímpar.
Use vermelho para a forma e verde para o interior. Resolva esta alínea para os sistemas C2D
e SVG
.
Exercício 16
Visualize o interior da forma usando os sistemas
C2D
eSVG
com:
- Um gradiente horizontal com várias cores (pelo menos 3).
- Um gradiente vertical com várias cores (pelo menos 3).
- Um padrão xadrez.
Modelação 2D
Exercício 17
Escreva um programa que use o C2D
para desenhar um caminho entre os pontos de coordenadas e que tenha um arco de raio 16.
Exercício 18
Escreva um programa javascript
para o C2D
que desenhe um círculo amarelo no meio de um retângulo 100x100 azul. Defina a mesma imagem com um documento SVG
.
Exercício 19
Procure na internet: Qual é o intervalo dos comprimentos de onda das cores visíveis?
Exercício 20
Marque os seguintes pontos num referencial cartesiano e num referencial de ecrã (desenhados numa folha de papel): (1, 3), (-2, 1.5), (0, -2), (0, 0), (2, 1), (-1.5, 1.5), (3, -0.5)
.
Exercício 21
Meia Lua | Yin-Yang |
---|---|
Escreva um programa para o C2D
, e um documento SVG
para desenhar:
- Uma meia lua (ver acima).
- Um quadrado centrado e rodado 45º.
- Um tabuleiro de xadrez.
- Um tabuleiro tri-colorido. Generalize para uma função que desenhe um tabuleiro -colorido.
- O símbolo oriental Yin-Yang (ver acima).
- Um retângulo pintado com um gradiente radial acíclico.
- Um retângulo pintado com um gradiente radial cíclico.
- Um octógono. Generalize para um -ágono.
- Uma estrela de cinco pontas. Generalize para pontas.
- Desenhe a bandeira da união europeia.
Exercício 23
Implemente uma função
grafico(f, n, a, b)
para ajudar a desenhar o gráfico de uma função matemática.
- Esta função devolve pontos do gráfico da função , com as abcissas igualmente espaçadas entre e (e ).
- Implemente funções para adaptar as listas a caminhos
C2D
eSVG
.
Exercício 24
Implemente uma pequena biblioteca gráfica 2D.
Suponha que cada objeto gráfico é definido por:
- Um caminho, isto é uma lista de pontos
x, y
. - Uma transformação com uma translação, uma rotação e uma escala.
- Propriedades de aspeto (
stroke
efill
).
Implemente uma função para desenhar estes objetos gráficos num
C2D
e para produzir um elementoSVG
.