Recursos Necessários

Propaganda
Programação Orientada por Objectos
Trabalho prático para avaliação 2:
Distância de um ponto a uma circunferência
Considere um editor gráfico onde é agora necessário resolver instâncias do seguinte
problema de geometria analítica plana:
Pretende-se dada uma circunferência c e um ponto P, garantidamente exterior a c,
determinar a distância d, de c a P.
Se dois pontos forem definidos genericamente por (x1, y1) e (x2, y2) a distância d, é dada
por: d 
x1  x 22  y1  y22 .
A circunferência é definida pelo utilizador através de 3 dos seus pontos, designados por
A, B e C. Um método de determinar o centro X, da circunferência é o seguinte (existem
outros):
i) Trace duas retas que passam por dois dos pontos como no exemplo: r = AB e
s = BC.
ii) Obtenha a reta r’ que passa pelo ponto médio da reta r e lhe é perpendicular.
iii)Obtenha a reta s’ que passa pelo ponto médio da reta s e lhe é perpendicular.
iv) Determine o ponto de intersecção da reta r’ com s’ que dá o centro da
circunferência
Para a definição das rectas auxiliares r, r’, s e s’, considere que:
 O declive m, de uma recta que passa por dois pontos (x1, y1) e (x2, y2) é dado
por m = (y2 - y1) / (x2 - x1)
 Os declives de rectas perpendiculares satisfazem a igualdade m' = -1 / m
Após determinado o centro o raio é a distância do centro, o ponto X, a um qualquer dos
pontos A, B ou C.
O método de construção da circunferência deve suportar qualquer inclinação das retas
auxiliares, incluindo retas horizontais e retas verticais.
Nem sempre 3 pontos definem uma circunferência. Se os 3 pontos forem colineares não
é possível criar duas retas, pois os pontos pertencem à mesma reta.
Notas para implementação:
Todas as variáveis reais devem ser do tipo double.
POO TP02 - 1/4
Programação Orientada por Objectos
Deve-se tomar em atenção que uma reta paralela ao eixo dos yy tem declive infinito. Em
Java o infinito positivo é representado, para os números reais double, por:
Double.POSITIVE_INFINITY
É assim possível comparar se um double é infinito (ignorando o sinal) com:
double m;
//...
if (Math.abs(m) == Double.POSITIVE_INFINITY) //do something;
Assim seja m0 e m1 o declive das retas r' e s' respetivamente; xc e yc as coordenadas do
centro da circunferência; x0 e y0 as coordenadas do ponto médio da reta r; x1 e y1 as
coordenadas do ponto médio da reta s:
Se o declive de uma reta é infinito, a coordenada x do centro da circunferência é a
coordenada x do ponto médio, então:
Se | m0 | = ∞
xc = x0
yc = m1.(xc - x1) + y1
Se | m1 | = ∞
xc = x1
yc = m0.(xc – x0) + y0
No caso geral se nenhum declive for infinito:
xc = (m1.x1 - m0.x0 + y0 - y1) / (m1 - m0)
yc = m0.(xc – x0) + y0
ou
yc = m1.(xc - x1) + y1
Entrada do Programa
Quatro linhas, cada uma com dois valores reais, as coordenadas x e y de um ponto. As 3
primeiras linhas representam cada um dos pontos A, B e C que definem a circunferência
c. A última linha as coordenadas x e y do ponto P para o qual se pretende calcular a
distância à circunferência c.
É assumido que os 3 pontos que definem a circunferência fornecidos são diferentes e
não colineares.
Saída do programa
Um número real que representa a distância do ponto P à circunferência c.
Exemplo de entrada 1
12
22
21
31
POO TP02 - 2/4
Programação Orientada por Objectos
Exemplo de saída 1
0.8740320488976422
Exemplo de entrada 2
00
22
21
54
Exemplo de saída 2
3.5666762404093104
Entrega do trabalho prático
A entrega do trabalho prático tem duas componentes:
1) Submissão de relatório e código fonte no sistema de entregas:
http://www.deei.fct.ualg.pt/POO/Entregas
2) Submissão do código fonte ao Mooshak:
http://mooshak.deei.fct.ualg.pt/~mooshak/
O trabalho só é considerado entregue e só será avaliado após ambas as submissões.
Data limite de entregas: 31 de Outubro de 2012.
1) Submissão de relatório e código fonte no sistema de entregas
Deve ser entregue um relatório:
i) indicando como é obtido o centro da circunferência se for diferente do proposto
neste enunciado.
ii) diagrama de classe UML.
Deverá ser também entregue o código fonte.
Nota1: Os ficheiros com o relatório e o código fonte devem ser submetido num ficheiro
com formato .zip ou .tar.gz.
Nota2: O relatório e os ficheiros com o código fonte devem ter a identificação do grupo,
turno e de todos os elementos do grupo.
2) Submissão de código fonte ao Mooshak
O código fonte Java, desenvolvido de acordo com o enunciado e os princípios da
programação orientados por objetos deve ser submetido para validação ao Mooshak,
concurso POO 2012/13 problema C.
Antes de submeter ao Mooshak confirme que a solução está correta no computador
local de acordo com os exemplos do enunciado.
POO TP02 - 3/4
Programação Orientada por Objectos
Nota: O código fonte para submeter ao Mooshak poderá ser guardado num só ficheiro,
ou em vários ficheiros.
Se estiver guardado em vários ficheiros deverá ser compactada a pasta onde se
encontram os ficheiros no formato .zip ou .tar.gz e submeter o ficheiro compactado ao
Mooshak.
Se o programa for desenvolvido em Eclipse pode ser compactada a pasta como o nome
src dentro da pasta do projeto.
POO TP02 - 4/4
Download