GARANTIR DESCONTO

Fórum distancia entre pontos #444855

05/06/2013

0

boa noite pessoal, tenho o seguinte trabalho pra fazer: Crie uma classe Point com os atributos x e y privados do tipo inteiro. Forneça métodos para acessar estes atributos. Forneça também um construtor que permita criar um objeto Point
somente se for informados os valores de x e y. Crie uma classe Quadrilatero que possui como atributos quatro pontos (Point) que o delimitam. Forneça um construtor para a classe Quadrilatero que recebe como parâmetro estes pontos. Crie as classes Retangulo e Trapezio que são classes mais específicas de Quadrilatero.
Forneça nestas classes métodos que permitam calcular a área dos objetos destes tipos.

Exercicio bobinho de facul que esta me dando um nó na cabeça.

a classe Point ficou assim:
public class Point
{
	private int x,y;
}


A classe Quadrilatero até entao esta da seguinte forma:
public class Quadrilatero
{
	Point p1,p2,p3,p4;
	
	public Quadrilatero(Point x1, Point x2, Point x3, Point x4)
	{
		p1 = x1;
		p2 = x2;
		p3 = x3;
		p4 = x4;
	}

}


O Retangulo assim:
public class Retangulo extends Quadrilatero
{
	public Retangulo(Point x1, Point x2, Point x3, Point x4)
	{
		super(x1,x2,x3,x4);
	}
	
	public void CalculaRetangulo()
	{	
		// incompleto neste calculo de distancia de pontos
		//nao sei como fazer o get
		float baseMaior = Math.sqrt(Math.pow(p1.get(x) - p2.x)
	}
}


Assim como no Trazpezio que esta da mesma maneira, alg poderia me ajudar ? :(
Return

Return

Responder

Posts

05/06/2013

Joel Rodrigues

Pra começar, aprimore a classe Point, conforme solicitado, adicionando os métodos de acesso às variáveis X e Y.
Exemplo:
public int getX()
{
	return this.x;
}

public void setX(int _x)
{
	this.x = _x;
}


O mesmo para o Y.

Pois você precisa poder acessar essas variáveis externamente, e da forma como está, as variáveis estão apenas internas (privadas).
Responder

Gostei + 0

06/06/2013

Joel Rodrigues

Para a área do retângulo é simples. Primeiro você precisa definir quais pontos representam quais vértices do quadrado. Por exemplo:
P1 = superior esquerdo
P2 = superior direito
P3 = inferior esquerdo
P4 = inferior direito


A área do retângulo é o produto base x altura. Então antes de tudo você precisa encontrar a base (b) e a altura (h):

Para descobrir o comprimento dos lados (base e altura), basta subtrair as coordenads X ou Y de dois pontos colineares. Por exemplo:
int b = P2.getX() - P1.getX();
//Considerando X como o eixo horizontal

int h = P1.getY() - P3.getY();
//Considerando Y como a coordenada vertical


Logo, a área é o produto bxh:
public int getArea()
{
int b = P2.getX() - P1.getX();
//Considerando X como o eixo horizontal

int h = P1.getY() - P3.getY();
//Considerando Y como a coordenada vertical

return b*h;
}


Qualquer dúvida, é só falar.
Responder

Gostei + 0

06/06/2013

Joel Rodrigues

Já para o trapézio, a área é: [(Base maior + base menor) x altura ]/2.

Nesse caso, precisaremos encontrar as bases separadamente, pois elas são diferentes. A altura pode ser encontrada da mesma forma que no retângulo e as bases seguem o mesmo raciocínio. Aqui chamaremos as bases de b1 e b2, pois não é importante saber qual é a menor e qual é a maror.
int b1 = P2.getX() - P1.getX(); //base superior
int b2 = P4.getX() - P3.getX(); //base inferior
int h = P1.getY() - P3.getY(); //altura


Assim sendo, a área é:
public int getArea()
{
int b1 = P2.getX() - P1.getX(); 
int b2 = P4.getX() - P3.getX();
int h = P1.getY() - P3.getY();

return ((b1+b2) * h)/2;
}


Dúvidas? Perguntas?

Ah, alguma coisa pode estar errada aí, pois fiz direto no notepad sem testar, mas acho que é isso.
Responder

Gostei + 0

06/06/2013

Return

Já para o trapézio, a área é: [(Base maior + base menor) x altura ]/2.

Nesse caso, precisaremos encontrar as bases separadamente, pois elas são diferentes. A altura pode ser encontrada da mesma forma que no retângulo e as bases seguem o mesmo raciocínio. Aqui chamaremos as bases de b1 e b2, pois não é importante saber qual é a menor e qual é a maror.
int b1 = P2.getX() - P1.getX(); //base superior
int b2 = P4.getX() - P3.getX(); //base inferior
int h = P1.getY() - P3.getY(); //altura


Assim sendo, a área é:
public int getArea()
{
int b1 = P2.getX() - P1.getX(); 
int b2 = P4.getX() - P3.getX();
int h = P1.getY() - P3.getY();

return ((b1+b2) * h)/2;
}


Dúvidas? Perguntas?

Ah, alguma coisa pode estar errada aí, pois fiz direto no notepad sem testar, mas acho que é isso.



Obrigadissima Joel, eu consegui chegar até setar os pontos antes de ver o seu codigo, mais nao estava executando porque eu nao tinha feito a alteração na classe Point. A única coisa que fiz a mais foi fazer as quatro possibilidades de que se (P1.getx < p2.getx && P1.gety < p2.gety) ou (P2.getx < p1.getx && P2.gety < p1.gety) ou (P1.getx < p2.getx && P2.gety < p1.gety) ou (P2.getx < p1.getx && P1.gety < p2.gety) , porque ele só pode fazer a subtração dos pontos se souber qual é o menor, pelo menos foi a essa a orientação que me deram.

vc conseguiu clarear a minha mente e muuuito (como sempre né), muitissimo obrigada!!
Vou tentar executar aqui, qualquer coisinha grito você
Responder

Gostei + 0

06/06/2013

Joel Rodrigues

Boa sorte, Natália.
Eu não fiz essas verificações por que considerei que OBRIGATORIAMENTE o usuário iria digitar os pontos corretamente, como eu defini. Mas essas verificações são importantíssimas.
Boa sorte e qualquer coisa, é só falar.
Responder

Gostei + 0

06/06/2013

Gustavo M.

Joel, meu professor passou o mesmo desafio da Natália, porém não consigo fazer a classe pra testar o Quadrilátero.

Meu código está assim, mas nao consigo prosseguir.

import java.util.Scanner;

public class TesteQuadrilatero
{
	public static void main(String args[])
	{
		Quadrilatero qd = new Quadrilatero();
		int op;
		Scanner sc = new Scanner(System.in);
		
		system.out.printf("\Coordenada X P1: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada Y P1: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada X P2: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada Y P2: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada X P3: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada Y P3: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada X P4: ");
		 = sc.nextInt();
		system.out.printf("\Coordenada Y P4: ");
		 = sc.nextInt();

		System.out.printf("1 ---------- Retangulo\n");
		System.out.printf("2 ---------- Trapezio\n");
		System.out.printf("\nDigite a opcao: ");
		op = sc.nextInt();
		if (op == 1)
			/* Calc Retangulo */
			else if (op == 2)
				/* Calc Trapezio */
	}
}


Poderia me ajudar?
Responder

Gostei + 0

07/06/2013

Joel Rodrigues

Opa, tudo bem?
Não estaria faltando alguma coisa antes do operador de atribuição nessas linhas?

= sc.nextInt();


Creio que seria algo como:
qd.P1.x = sc.nextInt();

ou
qd.P1.setX(sc.nextInt());


Ou seja, você precisa atribuir o valor lido às coordenadas do quadrilátero.

Abraço.
Responder

Gostei + 0

08/06/2013

Private

Um duvida, ja o trapezio o calculo é mais complexo, se para calcular a distancia dos pontos no retangulo o codigo ficou asism:

	public void CalculaRetangulo()
	{									
		double d1 = Math.sqrt(Math.pow ((p1.getX() - p2.getX()),2) + Math.pow ((p1.getY() - p2.getY()),2));
		double d2 = Math.sqrt(Math.pow ((p2.getX() - p4.getX()),2) + Math.pow ((p2.getY() - p4.getY()),2));
		double d3 = Math.sqrt(Math.pow ((p4.getX() - p3.getX()),2) + Math.pow ((p4.getY() - p3.getY()),2));
		
		if (d1 == d2 && d1 == d3)
		{
				System.out.printf("Eh um quadrado");
				
				System.out.printf("A area do quadrado eh: ", Area(d1,d2));
		}else
					{
						System.out.printf("Eh um retangulo");
					
					Area(d1,d3);
					//comparar os pontos pra ver ql eh diferente, calcula diferente
					System.out.printf("A area do retangulo eh: ", Area(d1,d2));
					}
	}


O do trapézio ficará assim para base maior e menor:

public void CalculaTrapezio()
	{	
		double bMaior = Math.sqrt(Math.pow ((p1.getX() - p2.getX()),2) + Math.pow ((p1.getY() - p2.getY()),2));
		double bMenor = Math.sqrt(Math.pow ((p3.getX() - p4.getX()),2) + Math.pow ((p3.getY() - p4.getY()),2));
		double h = //duvida; 
	}


COMO fazer a altura já que o trpezio tem este formato:

p1 _________ p2
/ |\
/ h| \
/ | \
p3 ---------------p4

Responder

Gostei + 0

08/06/2013

Private

ERRATA
Um duvida, ja o trapezio o calculo é mais complexo, se para calcular a distancia dos pontos no retangulo o codigo ficou asism:

	public void CalculaRetangulo()
	{									
		double d1 = Math.sqrt(Math.pow ((p1.getX() - p2.getX()),2) + Math.pow ((p1.getY() - p2.getY()),2));
		double d2 = Math.sqrt(Math.pow ((p2.getX() - p4.getX()),2) + Math.pow ((p2.getY() - p4.getY()),2));
		double d3 = Math.sqrt(Math.pow ((p4.getX() - p3.getX()),2) + Math.pow ((p4.getY() - p3.getY()),2));
		
		if (d1 == d2 && d1 == d3)
		{
				System.out.printf("Eh um quadrado");
				
				System.out.printf("A area do quadrado eh: ", Area(d1,d2));
		}else
					{
						System.out.printf("Eh um retangulo");
					
					Area(d1,d3);
					//comparar os pontos pra ver ql eh diferente, calcula diferente
					System.out.printf("A area do retangulo eh: ", Area(d1,d2));
					}
	}


O do trapézio ficará assim para base maior e menor:

public void CalculaTrapezio()
	{	
		double bMaior = Math.sqrt(Math.pow ((p1.getX() - p2.getX()),2) + Math.pow ((p1.getY() - p2.getY()),2));
		double bMenor = Math.sqrt(Math.pow ((p3.getX() - p4.getX()),2) + Math.pow ((p3.getY() - p4.getY()),2));
		double h = //duvida; 
	}


COMO fazer a altura já que o trpezio tem este formato:

....p1 _________.p2
...../........|\
..../........h|.\
.../..........|..\
p3 ---------------p4

Responder

Gostei + 0

08/06/2013

Joel Rodrigues

Opa, se você olhar na resposta que eu dei pra Natalia, verá que nem é TÃO complexo assim. Na verdade eu nem vejo necessidade de usar Pitágoras.
A altura é a diferença entre as coordenadas Y de dois pontos que se encontrem em lados opostos verticalmente. No seu desenho, essa altura poderia ser:
d1 - d3
d1 - d4
d2 - d3
d2 - d4

Considerando a subtração do Y de cada ponto, pois d1 e d2 estão na mesma coordenada Y, bem como d3 e d4.

Deu pra sacar a ideia? Qualquer coisa é só falar.

Abraço.
Responder

Gostei + 0

09/06/2013

Private

Muuuuuuuito obrigada Joel, me ajudou muito na resolução do exercício.. (((:
Responder

Gostei + 0

09/06/2013

Joel Rodrigues

Opa, que bom. Fico muito feliz.
Precisando, é só avisar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar