Ir ao conteúdo
  • Cadastre-se

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


Rodrigo Felipe

Posts recomendados

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

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...