Hier, j'ai eu envie de résoudre un problème mathématique qui me chicotait depuis bien des années, depuis que mon père m'avait montré un vieux logiciels DOS pour calculer l'aire de terrains (lorsqu'il arpentait des lots). Mon père utilisait un ruban à mesurer, une boussole, une feuille de papier et un crayon pour arpenter un lot. Le lot était délimité par des rubans. Pour calculer l'aire, il désignait un point de départ, regardait le ruban suivant et indiquait l'orientation de sa boussole sur sa feuille de papier. Ensuite, il marchait jusqu'au ruban en mesurant la distance. Il essayait d'être le plus droit possible, mais n'y arrivait pas toujours à cause des arbres et des bosses du terrains. La ligne n'était pas droite, mais l'approximation était assez juste pour un lot à bois. Il le faisait à chaque ruban, jusqu'à ce qu'il retourne au point de départ. Ensuite, il entrait les coordonnées et les distances dans un logiciel DOS qui calculait automatiquement l'aire et traçait le polygone. Il pouvait ensuite l'imprimer pour le donner à son patron. Or, à l'époque, je suivait mon cours de programmation VB4 ou VB5 au secondaire et j'avais des bases en trigonométrie et en programmation mais je ne savais toujours pas comment calculer l'aire d'un polygone. Sur papier, c'est facile car il suffit de le diviser visuellement en figure plus simple (triangle, carré, rectangle). D'ailleurs, c'est ce que les professeurs nous apprenaient. Mais pour un ordinateur, le visuel n'existe pas vraiment. Un ordinateur ne traite que des listes de données. Il ne voit pas une figure en 2D. Donc mon problème se résumait à savoir comment calculer l'aire d'un polygone avec des coordonnées (d'un plan cartésien x et y) avec une fonction informatique.
Ma première approche a été de dessiner des figures, du triangle à l'octogone sur une feuille de papier, de les découper en triangle, de nommer les sommets et de spécifier des coordonnées. D'ailleurs sur Wikipédia, on dit qu'on peut facilement calculer l'aire d'un polygone en le découpant en triangle, mais on ne dit pas comment le faire avec un ordinateur. Donc, j'ai commencé à faire la première formule pour calculer l'aire du triangle simple. Or, ce que je me souvenais à l'école, c'était la formule pour l'aire d'un triangle rectangle = base * hauteur / 2. Si le triangle est scalène, je suis un peu embêté... Or, sur Wikipédia, on spécifie la formule en disant qu'il s'agit du produit de deux vecteurs (de deux côtés) / 2. Merci université, j'ai appris à utiliser des vecteurs et à calculer un déterminant, j'ai donc pu comprendre tout de suite ce que ça voulait dire avec la formule. Donc, avec ma formule d'aire du triangle je peux calculer l'aire du triangle.
Après le triangle, c'est la figure à 4 côtés, carrés, rectangles ou autres quadrilatère. Donc, je me suis bien vite aperçu que pour une figure avec les points A,B,C et D, je devais faire un triangle ABC et CDA. Une petite boucle avec un retour vers A et c'est calculé. Facile. Pour une figure A, B, C, D et E c'était ABC, CDE et ACE??? Dès que j'ai 5 côté, je dois faire un triangle supplémentaire qui est à l'intérieur. Avec ABC et CDE, il s'agit de sommets consécutifs. Avec ACE, il s'agit du premier sommet, du troisième et du cinquième. Je fais un bon de 2. Bon, peut-être que j'ai besoin d'une autre boucle.... Voyons avec une figure de 6 côtés (hexagone): ABCDEF. Les triangles sont: ABC, CDE, EFA (première passe) et ACE (deuxième passe). 7 côtés ABCDEFG? ABC, CDE, EFG (première passe), ACE, EGA (deuxième passe). Et quand on est rendu à quelques choses de vraiment compliqué, une croix par exemple, on se retrouve à faire 3 passes, mais la troisième, on prend le 1er point, le 5e point et le 9e point (on augmente de +4). Première passe: +1, deuxième passe: +2, troisième passe: +4. Il s'agit de la suite des exposants de 2 1,2,4,8,16,32, ou 2 exposant la passe.
Ce qui est merveilleux avec cette merveille est que lorsqu'on a un polygone concave (avec des creux), l'ordinateur va créer des aires négatives qui vont être retranché de l'aire totale. Pas besoin de s'embêter avec les creux ou les angles ou l'intérieur du polygone, c'est automatiquement calculé au final.
J'ai trouvé une simplification de ce calcul sur le net en utilisant les sommets seulement 2 fois. Voir le code sur Polygon area...