Ir ao conteúdo
  • Cadastre-se
Rodrigo Felipe

Calculo da área de figuras geométricas - Algorítimo Java

Recommended Posts

Boa tarde,

Pessoal, to iniciando em java agora, e estou com um exercício do meu curso, que ta me tirando o sono... Preciso fazer um algorítimo em java que calcule a área de qualquer figura geométrica, através da divisão da figura em triângulos, onde a partir do calculo da área desse triangulo eu chegue a área total da figura.

Alguém da uma luz ?

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ate agora fiz o seguinte:



Classe Aresta

public class Aresta {
private Ponto inicio,fim;

public Aresta(Ponto i, Ponto f){
setInicio(i);
setFim(f);
}

public Ponto getInicio(){
if(inicio == null){
inicio = new Ponto(0,0);
}
return inicio;
}

public void setInicio(Ponto inicio) {
this.inicio = inicio;
}

public Ponto getFim(){
if(fim == null){
fim =new Ponto(0,0);
}
return fim;
}

public void setFim(Ponto fim){
this.fim = fim;
}

public boolean verificaSePontoInterceptaAAreaPelaDireita (Ponto p){

Ponto p1 = getInicio();
Ponto p2 = getFim();

double ymin = Math.min(p1.getY(), p2.getY());
double ymax = Math.max(p1.getY(), p2.getY());

//Verifica se esta a esquerda do segmento
double y = p.getY();
double x = p1.getX() + (y-p1.getY()) * (p2.getX() - p1.getX()) / (p2.getY() - p1.getY());

boolean estaEsquerda = p.getX() < x;
boolean interceptaSeguimento = y >= ymin && y <= ymax;
return interceptaSeguimento && estaEsquerda;
}

public boolean verificaSePontoInterceptaAAreaPelaDireita (double px, double py){
Ponto p1 = getInicio();
Ponto p2 = getFim();

double ymin = Math.min(p1.getY(), p2.getY());
double ymax = Math.max(p1.getY(), p2.getY());

//Verifica se esta a esquerda do segmento
double y = py;
double x = p1.getX() + (y-p1.getY()) * (p2.getX() - p1.getX()) / (p2.getY() - p1.getY());

boolean estaEsquerda = px < x;
boolean interceptaSeguimento = y >= ymin && y <= ymax;
return interceptaSeguimento && estaEsquerda;
}
}



Classe Poligono

public class Poligono {
public List<Aresta> arestas;

public Poligono (List<Aresta> a){
setArestas(a);
}

public List<Aresta> getArestas(){
if (arestas == null){
arestas = new ArrayList<Aresta>();
}
return arestas;
}

public void setArestas(List<Aresta> arestas){
this.arestas = arestas;
}

public boolean isDentroDoPoligono (Ponto p) {
int numeroDeArestasInterceptadas = 0;
Iterator<Aresta> i = getArestas().iterator();
while (i.hasNext()){
if(i.next().verificaSePontoInterceptaAAreaPelaDireita(p)){

numeroDeArestasInterceptadas++;
}
}

return numeroDeArestasInterceptadas % 2 == 1;
}

public boolean isDentroDoPoligono(double px,double py){
int numeroDeArestasInterceptadas = 0;
Iterator<Aresta> i = getArestas().iterator();
while(i.hasNext()){
if(i.next().verificaSePontoInterceptaAAreaPelaDireita(px,py)){
numeroDeArestasInterceptadas++;
}
}
return numeroDeArestasInterceptadas % 2 == 1;
}
}


Classe Ponto

package Teste2;

public class Ponto {
private double x,y;

public Ponto (double x, double y){
setX(x);
setY(y);
}

public double getX(){
return x;
}

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

public double getY(){
return y;
}

public void setY(double y){
this.y = y;
}
}

Classe main (teste)

package Teste2;

import java.util.ArrayList;
import java.util.List;

/**
*
* @author Rodrigo
*/
class main{
public static void main(String[] args){
Aresta a1 = new Aresta(new Ponto(0,0), new Ponto(0,1));
Aresta a2 = new Aresta(new Ponto(0,2), new Ponto(2,2));
Aresta a3 = new Aresta(new Ponto(2,2), new Ponto(2,0));
Aresta a4 = new Aresta(new Ponto(1,0), new Ponto(0,0));

List<Aresta> arestas = new ArrayList<Aresta>();
arestas.add(a1);
arestas.add(a2);
arestas.add(a3);
arestas.add(a4);

Poligono p = new Poligono(arestas);
int pontosDentro = 0;
int totalDePontos = 1000000;

double ladoQuadrado = 2;
for (int i = 0; i < totalDePontos; i++){
Ponto ponto = new Ponto (Math.random() * ladoQuadrado,Math.random() * ladoQuadrado);
if (p.isDentroDoPoligono(ponto)){
pontosDentro++;
}
}

double relacaoEntreAreas = (1.0 * pontosDentro / totalDePontos);
double areaQuadrado = ladoQuadrado * ladoQuadrado;
System.out.println("Relação: " + relacaoEntreAreas);
System.out.println("Area: " + relacaoEntreAreas * areaQuadrado);
}
}

Não tenho em mente agora, como buscar do usuário a quantidade de pontas o polígono pode ter e como ele ira informar suas posições (x e y).. Se alguém ai, tiver uma ideia!? valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×