Aller au contenu

Calcul de surface


Didier-AD

Messages recommandés

Pour ceux qui auraient besoin de calculer la surface d'une zone délimitée par une liste de points sans être obligé de dessiner une polyligne et calculer son aire, voici une fonction qui le fait très bien ; elle est issue d'une formule basée sur le calcul vectoriel

http://xs215.xs.to/xs215/07214/calcsurf.jpg

 
(defun SurfaceContour (lp / lx ly Total n soustotal)
 (defun soustotal (X Ya Yb)  (* X (- Ya Yb)))

 (setq lx (mapcar 'car lp)
ly (mapcar 'cadr lp)
Total (soustotal (car lx) (cadr ly) (last ly))
n 1
 )
 (repeat (- (length lp) 2)
   (setq total (+ total (soustotal (nth n lx) (nth  (1+ n) ly) (nth (1- n) ly)))
  n (1+ n)
   )	  
 )
 (setq total (+ total (soustotal (last lx) (car ly) (cadr (reverse ly)))))
 (abs (/ total 2.0))
)  
 

(defun c:test (/ pt lp)
 (setq pt (getpoint "\npremier point")
lp (list pt)
 )
 (while (setq pt (getpoint "\n point suivant"))
   (setq lp (cons pt lp))
 )
 (alert (strcat "Surface du contour =  " (rtos (SurfaceContour lp) 2 3) " Unité²"))
)  

 

[Edité le 23/5/2007 par Didier-AD]

Lien vers le commentaire
Partager sur d’autres sites

Merci du partage, je le garde précieusement! ;)

 

Très intéressant, une particularité que j'aime beaucoup (ça peux, peut être me servir...)

[surligneur]CELA RETOURNE LA SURFACE PROJETEE SUR LE SCU COURANT. [/surligneur] :P

 

Si tu en as d'autre comme ceci, ça m'intéresse beaucoup.

 

Un GRAND Merci !

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour!

 

Ma variante de la fonction, le calcul de la place de la projection du polygone.

 

(defun eea-area-polygon (lst)
                       ;|
 By ElpanovEvgeniy

 Algorithm of function:
 (+ (* (+ x1 x2)(- y1 y2) 0.5)(* (+ x2 x3)(- y2 y3) 0.5) .... )

 Example of use:
(eea-area-polygon
 (mapcar (function cdr)
         (vl-remove-if-not (function (lambda (x) (= (car x) 10)))
                           (entget (car (entsel)))
         ) ;_  vl-remove-if-not
 ) ;_  mapcar
) ;_ area-polygon
|;
(/
 (abs (apply
       (function +)
       (mapcar
        (function
         (lambda (a b) (* (+ (car a) (car b)) (- (cadr a) (cadr b))))
        ) ;_  function
        (cons (last lst) lst)
        lst
       ) ;_  mapcar
      ) ;_  apply
 ) ;_  abs
 2.
) ;_  /
) ;_ defun

 

 

Evgeniy

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

mon prof de topographie, à l'IUT, appelait ça, si je me souviens bien, le calcul de surface par la méthode des trapèzes.

 

Sachant que la surface d'un trapèze est :

(B+b)*h/2

et qu'un polygone peut se décomposer en n trapèzes, on peut retrouver la formule magique.

Par exemple, un polygone de 4 côtés dont on cherche la surface S, peut se décomposer en 4 trapèzes de surface S1, S2, S3 et S4 dont il suffit de faire la différence pour trouver S.

 

S=S1+S2-S3-S4

 

et

S1=(x2-x1)*(y2+y1)/2

S2=(x3-x2)*(y3+y2)/2

S3=(x3-x4)*(y3+y4)/2

S4=(x4-x1)*(y4+y1)/2

 

d'où

2*S=(x2-x1)*(y2+y1)+(x3-x2)*(y3+y2)-(x3-x4)*(y3+y4)-(x4-x1)*(y4+y1)

 

on développe

 

2*S=x2y2+x2y1-x1y2-x1y1+x3y3+x3y2-x2y3-x2y2-x3y3-x3y4+x4y3+x4y4-x4y4-x4y1+x1y4+x1y1

 

on peut simplifier tous les termes en xn*yn

2*S=x2y1-x1y2+x3y2-x2y3-x3y4+x4y3-x4y1+x1y4

 

et on met en facteur suivant les xn

 

2*S=x1(y4-y1)+x2(y1-y3)+x3(y2-y4)+x4(y3-y1)

 

cqfd, si je ne me suis pas planté en cours de route...

 

Comme quoi, c'est une bonne école l'IUT

 

Amicalement

Zebulon_

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité