Como calcular a área de um polígono irregular

Recentemente precisei calcular a área de um polígono irregular. Mas como? Fiz uma pesquisa sobre geometria computacional, e uma das formas que encontrei foi em dividir o polígono em vários triângulos e, após isso, calcular a área de cada triângulo. Tudo bem, mas como dividir o polígono em vários triângulos menores? Por exemplo, como dividir automaticamente o polígono da figura 1 em triângulos? Existem algoritmos para isso, para fazer a triangulação de polígonos.

triangulacao

Figura 1 – Um polígono dividido em vários triângulos

Basicamente o algoritmo funciona da seguinte forma. Divide o polígono em vários polígonos monotone* e depois faz a triangulação de cada um desses algoritmos usando um algoritmo para fazer a triangulação.

Essa é uma das formas de se fazer isso. Uma outra forma é baseada na técnica descrita no post “Como calcular computacionalmente o valor de PI“. Nesse caso podemos fazer o seguinte. Desenhamos o polígono em cima de um outro polígono já conhecido, no caso um retângulo. Sabemos como calcular a área do retângulo. Depois disso, começamos a gerar pontos aleatórios dentro do retângulo (o polígono que queremos calcular a área está em cima do retângulo). Para cada ponto, vemos se o ponto caiu dentro do polígono irregular. Se dividirmos a quantidade de pontos que caiu dentro do polígono pela quantidade de pontos gerada, temos a relação entre a área do polígono e a área do retângulo. Como a área do retângulo é conhecida, fica simples calcular a área do polígono, basta fazer uma multiplicação.

No entanto, fica a questão: Como saber se um ponto está dentro do polígono?  Para efeitos práticos para o cálculo da área dessa forma, podemos traçar uma semi-reta paralela ao eixo x em direção a +x. Se essa semi-reta interceptar um número ímpar de arestas, podemos dizer que ele está dentro do polígono – Figura 2.

dentroforaFigura 2 – Ponto dentro e fora do polígono

Agora que sabemos quando um ponto está dentro de um polígono, precisamos saber que essa semi-reta interceptou uma das arestas. Isso pode ser feito da seguinte forma:

Primeiro, calculamos a equação da aresta. Considerando que os vértices da aresta são (x1, y1) e (x2,y2), temos que a equação é:

x = x1 + (y-y1)\frac{(x2-x1)}{(y2-y1)}

Aplicando a coordenada y do ponto nessa equação, temos um valor de x. Se esse valor for maior que o valor da coordenada x do ponto, sabemos então que o ponto está a esquerda da aresta.

Além disso, se verificarmos que a coordenada y está entre min(y1,y2) e max(y1,y2), então sabemos que a semi-reta intercepta a aresta.

Com isso já podemos calcular a área de um polígono irregular.

Para ilustrar, segue um código Java para isso.

Classe Ponto

classe-ponto

Classe Aresta

classe-aresta

Classe Poligono

classe-poligono

Como primeiro teste, desenhei um polígono e gerei vários pontos aleatórios para testar se o método para verificar se está dentro do polígono está funcionando. Os pontos verdes estão fora do polígono e os amarelo dentro. Desenhei pequenos círculos em volta do ponto gerado, para aproveitar uma rotina que já tenho aqui. Podemos ver que a rotina se mostra adequada para o problema.

teste-ponto-esta-dentro-do-poligono

Figura 3 – Teste do método para verificar se pontoe stá dentro do polígono

Resta agora testar se isso funciona para calcular a área. Para isso, vamos criar um quadrado de lado 1 e gerar pontos aleatórios dentro de um quadrado de lado 2 e calcular a relação entre a quantidade de pontos dentro do quadrado e a quantidade de pontos gerada. Esse valor multiplicado pela área do quadrado maior (4), deve dar a área do quadrado, que sabemos que é 1. Na verdade, como esse método não é exato, a área deve ser próxima de 1, e não exatamente 1. Segue trecho de código usado para teste:

teste-calculo-da-area

Uma das saídas desse programa é mostrada na figura abaixo. Note que o valor da área calculado por esse método é muito próximo ao valor real. Na verdade, podemos aumentar a precisão do algoritmo aumentando o número de pontos gerados.

saida-do-programaFigura 4 – Resultado do programa

A Figura 5 mostra uma figura de exemplo para esse teste, com os pontos gerados:

exemplo-de-pontos-gerados

Figura 5 – Exemplo do teste efetuado

* – optei por não fazer a tradução dessa palavra pois não sei como ela é traduzida em geometria computacional.

About these ads

Tags: , , ,

35 Respostas to “Como calcular a área de um polígono irregular”

  1. Daniana de Oliveira Silva Says:

    como é difícil calcular a área de um polígono irregular.
    parabéns pela idéia brilhante do blog

  2. Ilamar Says:

    Olá… Gostaria de fazer um calculo para achar o tamanho de uma reta numa forma irregular… tipo

    se eu tenho uma letra O em um programa gráfico e quero saber o valor numa reta da letra o inteira… como fazer isso?

  3. Vitor Fernando Pamplona Says:

    Se o polígono for 2D e vc tem uma equação analítica que o descreve, você pode aproximar por monte carlo. Para isso vc estima uma região onde todos os pontos do teu polígono vão estar inclusos e sorteira, com distribuição uniforme, vários pares x,y. Resolvendo a equação para cada um dos pares, vc sabe se ele está dentro ou fora do polígono. Some o número de pontos dentro do polígono, faça a razão entre esta soma e o total de pontos e multiplique pela área da tua região total estimada.

    O número de pontos sorteados depende da precisão que vc necessita. Normalmente, poucos pontos são suficientes.

  4. Breno Says:

    Boa noite!

    Eu tenho as dimensões de uma lagoa (73m x 40m x 1,5m), será que tem como calcular a área em metro quadrado?

    Abraço e obrigado

  5. Formulação simples para cálculo de Área de Polígono Says:

    Gostaria de dizer que o artigo tá legal mas que caso você tenha um polígono fechado que não se cruza você pode usar uma formulação mais simples.
    areatotal=areatotal+((x1*y2)-(x2*y1)), iniciando areatotal com zero e acumulando até o último ponto. Lembro que o último ponto na realidade é o primeiro ponto repetido. Com esta formulação simples você calcula a área total do polígono. Se voce estiver sobre uma imagem digital o resultado será em pixel se precisar da área em metros quadrados basta verificar o tamanho do pixel no terreno e executar a formula abaixo: ÁreaFinal=areatotal*(resolucaopixel^2) (Descricao: a AreaFinal será o resultado da areatotal calculada multiplicada pela resolução do pixel ao quadrado.

    Um grande abraço FRATERNO

    Dalmar José dos Santos
    Engenheiro Cartógrafo
    Curitiba/PR

  6. miriam Says:

    muito complicado a sua forma de calcular

  7. paulo Says:

    como calcular a area de um quadrado?

  8. Diancarlos Cabral Says:

    tenho uma dúvida sobre uma area que medi as seguintes medidas lado direito 6,71m, lado esquerdo 3,85m, 10 de frete e 5,03 de fundo, qual a medida em metros quadrado?

  9. Dyego Says:

    Eu ja consegui obter o valor da area em pixels. mas agora quero transformar em metros quadrados. Tem como eu fazer isso ??
    Ou Coisa parecida ?

    Muito Obrigado !!

  10. demoniodemaxwell Says:

    Dian Carlos Cabral, dá uma olhada aqui: http://pessoal.sercomtel.com.br/matematica/conline/quadconv/quadconv.htm

    Dyego, esse método já te dá o resultado na unidade que você tá trabalhando. Veja que no exemplo acima a gente está considerando um quadrado de lado 2 (pode ser 2m, 2cm, 2km) e o resultado é dado em função disso. Se for 2m, o resultado será dado em metros quadrados. Se você estiver pensando em cm, o resultado será dado em cm quadrados.

  11. ELSON ROSA SERAFIM Says:

    Tenho duvida para medir um terreno de 16,80m frante, 26,75m fundos e 50,20m Direito, e 39,90m esquerdo gostaria de saber qual a regra mais simples e correta de calcular. Grato.
    Serafim

  12. demoniodemaxwell Says:

    http://www.webcalc.com.br/frame.asp?pag=http://www.webcalc.com.br/matematica/quadrilatero.html

  13. rafael Says:

    eu desejo imagens de poligonos e rapidoooooooooooooooooo!!!!!!!!!!!!!!!!!

  14. gustavo Says:

    gostaria de calcular a área de um terreno irregular, com as seguintes medidas:
    Frente: 8,70 m
    Fundo: 14,45 m
    Lateral esq.: 24,0 m
    Lateral dir.: 27,20 m
    Fico no aguardo.

  15. Cládio Says:

    Olá, este algoritmo foi testado? tentei reproduzi-lo aqui e não funcionou. A saída do programa é: Relação: 0.0 Área: 0.0

  16. demoniodemaxwell Says:

    Cládio,

    funciona sim. Se você quiser, deixe seu e-mail que eu mando o código.

  17. jnkkk Says:

    kn jjjjjjjjjjjjjj

  18. karina Says:

    enendi

  19. karina Says:

    entendi

  20. WALMIR CERQUEIRA Says:

    GOSTARIA DE SABER A AREA DE UM TERRENO COM AS SEG. MEDIDAS:LADO A =10,00MTS – LADO B = 15,00MTS -LADO C = 13,00MTS – LADO D = 20,00MTS

  21. Rafael Says:

    Excelente post, cara.

    Preciso calcular o metro quadrada de um polígono irregular.

    Eu mesmo imaginei uma forma para resolver o problema e gostaria de saber se irá funcionar.

    Meu raciocínio:
    Para calcular o metro quadrado eu multiplico comprimento X largura. Ok.

    Funciona se eu pegar os N pontos do polígono, multiplicá-los e depois dividir pela número de pontos?

    Exemplo:

    Lado A = 5m.
    Lado B = 3m.
    Lado C = 6m.
    Lado D = 2m.
    Lado E = 8m

    Fórmula: (5 X 3 X 6 X 2 X 8) / 5

    Seriam 288 metros quadrados!?

    Gostaria de saber se funciona este meu raciocínio??

    Aguardo ancioso.

  22. demoniodemaxwell Says:

    Rafael, não funciona.

    Você propôs uma coisa que deveria funcionar para qualquer polígono. Para ver que não funciona, pense num caso muito simples: Um quadrado de lado 1. A área é desse quadrado é 1m2. De acordo com sua proposta, seria (1x1x1x1)/4 = 0.25.

  23. Rafael Says:

    Bom, quem disse que ia ser fácil.

    Agradeço a ajuda.

    Como você já facilitou postando o código, sou grato em copiar e adaptar ao meu contexto.

    Valeu.

  24. thiagoturim Says:

    Muto bom seu artigo.
    Já usou a api Polygon (http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Polygon.html), do java funcina da mesmo forma ?

  25. vanessa nicholle Says:

    como eu caulculo a área de uma cruzzzzz eu naum sei como se faz

  26. demoniodemaxwell Says:

    Thiagoturim,

    Não sei se o Polygon tem um método para calcular a área, mas o método contains poderia ser utilizado para verificar se um ponto está dentro do polígono.

  27. demoniodemaxwell Says:

    Vanessa, divida a cruz em retângulos e calcule a área de cada retângulo. Depois some todas as áreas.

  28. thiagoturim Says:

    tem como você disponibilizar o código para download ?

  29. demoniodemaxwell Says:

    thiagoturim,

    deixei seu e-mail que mando o código.

  30. Márcio José Mantau Says:

    Olá, demoniodemaxwell.

    Realizei minha pesquisa de TCC e achei seu post muito interessante, e gostaria de colocar no referencial teórico.
    Somente tem um problema, não posso colocar na bibliografia o nome: demoniodemaxwell.

    se pudesse me informar quem realmente escreveu este post. ficaria grato desde ja.
    valew.

  31. estudante Says:

    kra alguém disse que essa solução é brilhante! (no primeiro comentário) poderia até ser se a complexidade de um algoritmo fosse uma variável desprezível!!! esse seu algoritmo é péssimo, além de não ser aplicável a situações reais, tipo em um aplicativo SIG.

  32. Orlando Pedro Says:

    Dividir uma área poligonal fechada em triângulos é facil. Determinar o comprimento de cada lado dos triângulos por medição ou pelo teorema de pitágoras se conhecidas as coordenadas dos marcos do terreno é trabalhoso,mas também é facil. Multiplicando um lado do triângulo pela sua altura e dividindo por dois temos a área de cada triângulo. A dificuldade é saber a altura “h” que com os meus 84 anos foi fácil deduzir.
    h é a raiz quadrada de b2-e2 (b ao quadrado menos e ao quad.).
    Sendo os catetos a, b, c, e=(c2+b2-a2)/2.c ou ainda:

    h=SQR(b^2-((c^2+b^2-a^2)/2*C)^2)

  33. paulo weverton Says:

    gostaria de saber como calcular uma area de um pentagono de lados diferentes.ex: a) 26m b) 28m c)29 d)32 e) 33?

  34. Anónimo Says:

    I don´t like, I found a little confusing, meaningless, I think that would have more information

  35. hhhg Says:

    what mano que q isso entendi nada

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: