Jump to content
Natália Oliveira

Distancia entre pontos

Recommended Posts

Natália Oliveira

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: Código

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 ? :(

Share this post


Link to post
Share on other sites
HappyHippyHippo

public class Point
{
 private int x,y;

 // incompleto :
 // quote: "x e y. Forneça métodos para acessar estes atributos"
 // quote: "Forneça também um construtor que permita criar um objeto Point somente se for informados os valores de x e y"
}

public class Quadrilatero
{
 Point p1,p2,p3,p4; // pela filosofia OOP, também deveriam ser privados

 // falta métodos de acesso aos pontos do quadrilátero

 public Quadrilatero(Point x1, Point x2, Point x3, Point x4)
 {
   p1 = x1;
   p2 = x2;
   p3 = x3;
   p4 = x4;
 }
}

para responder/verificar o rectângulo e o trapézio é necessário saber 1 coisa :

as figuras geométricas podem estar dispostas de qualquer maneira no plano em que se encontram ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
KTachyon

Somas a área de dois triângulos. A forma como se encontram dispostos é indiferente.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Natália Oliveira

public class Point
{
 private int x,y;

 // incompleto :
 // quote: "x e y. Forneça métodos para acessar estes atributos"
 // quote: "Forneça também um construtor que permita criar um objeto Point somente se for informados os valores de x e y"
}

public class Quadrilatero
{
 Point p1,p2,p3,p4; // pela filosofia OOP, também deveriam ser privados

 // falta métodos de acesso aos pontos do quadrilátero

 public Quadrilatero(Point x1, Point x2, Point x3, Point x4)
 {
p1 = x1;
p2 = x2;
p3 = x3;
p4 = x4;
 }
}

para responder/verificar o rectângulo e o trapézio é necessário saber 1 coisa :

as figuras geométricas podem estar dispostas de qualquer maneira no plano em que se encontram ?

fiz os gets de acesso na classe Point e chamei na classe retangulo e trapezio atravez do construtor com super();

trazendo os pontos atraves do construtor eu consigo seta-los da seguinte forma: int b = P2.getX() - P1.getX();

Acredito que possam estar dispostas em quarquer maneira, como em um plano cartesiano o cruzamento de duas rets formam um ponto. ex: ponto (4,1)

assim:

plano cartesiano, como se nos pontos a fosse (1,2) e no ponto b fosse (1,5) o pont c fosse (3,2) e o ponto d (3,5)

a -- b

| |

c -- d

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

a minha questão é : o polígono tem de estar "deitado" onde uma das suas arestas tem de ser paralela ao eixo 0X, ou pode rodar livremente em Z ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Natália Oliveira

a minha questão é : o polígono tem de estar "deitado" onde uma das suas arestas tem de ser paralela ao eixo 0X, ou pode rodar livremente em Z ?

Nao tenho a informação, mais prefiro pensar e fazer de modo que "rode" livremente em z

Share this post


Link to post
Share on other sites
HappyHippyHippo

Nao tenho a informação, mais prefiro pensar e fazer de modo que "rode" livremente em z

ok ... é que dessa maneira terás uma dificuldade mais acrescida porque necessitas de verificar se os vértices do rectângulo fazem um ângulo interno de 90 graus. e do trapézio somente dois deles serão de 90 graus e necessitam de ser adjacentes (se não forem adjacentes quer dizer que tens um rectângulo :D )


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
KTachyon

Num trapézio não é obrigatório existirem ângulos de 90º.

Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
HappyHippyHippo

Num trapézio não é obrigatório existirem ângulos de 90º.

ok, no entanto existe a obrigatoriedade de dois lados paralelos


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
KTachyon

Sim. Mas, basicamente, da forma como estão a resolver, estão a cingir o problema a quadrados, rectângulos e trapézios. E os restantes quadriláteros? Acho que ter uma função para cada tipo de quadrilátero não é a melhor forma de resolver o problema.

Todos os quadriláteros podem ser divididos em dois triângulos. Sabendo a área dos dois, sabe-se a área do quadrilátero.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
HappyHippyHippo

se fosse para calcular a área bastaria definir no trabalho o quadrilátero.

estar a pedir para definir o rectângulo e trapézio é de supor que seja necessário impor as suas restrições.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Natália Oliveira

Para o retangulo vou calcular A = b x h e para o trapezio A = ((B+b)*h)/2, porém estes valores serão setados a partir dos pontos x e y da classe Point

Share this post


Link to post
Share on other sites
HappyHippyHippo

ter as fórmulas matemáticas não resolve o problema de dares valores correctos aos pontos que criam o quadrilátero

terás sempre de verificar a existência de arestas paralelas


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jpfelgueiras

Começando por pegar no código que já tens


public class Point {

private float x,y;
public Point(float x, float y) {
setX(x);
setY(y);
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}

}

public class Quadrilatero {
private Point p1,p2,p3,p4;

public Quadrilatero(Point x1, Point x2, Point x3, Point x4) {
setP1(x1);
setP2(x2);
setP3(x3);
setP4(x4);
}
public Point getP1() {
return p1;
}
public void setP1(Point p1) {
this.p1 = p1;
}
public Point getP2() {
return p2;
}
public void setP2(Point p2) {
this.p2 = p2;
}
public Point getP3() {
return p3;
}
public void setP3(Point p3) {
this.p3 = p3;
}
public Point getP4() {
return p4;
}
public void setP4(Point p4) {
this.p4 = p4;
}
}

public class Retangulo extends Quadrilatero {

public Retangulo(Point x1, Point x2, Point x3, Point x4) {
super(x1, x2, x3, x4);
}
public double baseMaior(){

double b1,b2,b3,b4;

b1= Math.sqrt(Math.abs(
Math.pow(super.getP1().getX() - super.getP2().getX(),2)-
Math.pow( super.getP1().getY() -  super.getP2().getY(),2)));
b2= Math.sqrt(Math.abs(
Math.pow( super.getP2().getX() -  super.getP3().getX(),2)-
Math.pow( super.getP2().getY() -  super.getP3().getY(),2)));
b3= Math.sqrt(Math.abs(
Math.pow( super.getP3().getX() -  super.getP4().getX(),2)-
Math.pow( super.getP3().getY() -  super.getP4().getY(),2)));
b4= Math.sqrt(Math.abs(
Math.pow( super.getP4().getX() -  super.getP1().getX(),2)-
Math.pow( super.getP4().getY() -  super.getP1().getY(),2)));
double[] arr = {b1, b2, b3, b4};

return bubbleSort(arr)[3];
}

public double[] bubbleSort(double[] array) {
  boolean swapped = true;
  int j = 0;
  double tmp;
  while (swapped) {
   swapped = false;
   j++;
   for (int i = 0; i < array.length - j; i++) {
	   if (array[i] > array[i + 1]) {
		   tmp = array[i];
		   array[i] = array[i + 1];
		   array[i + 1] = tmp;
		   swapped = true;
	   }
   }
  }
  return array;
}
}

Penso que isto sirva para o que pretendes

Percebi mal a questão, o que faz é o calculo a base maior mas penso que a partir daqui já consegues

Edited by jpfelgueiras

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.