IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Calcul d'une surface [FAQ]


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Par défaut Calcul d'une surface
    voila le problème :

    J'ai un plan (de maison, d'immeuble, de champ, ...) sout forme de fichier JPEG

    Sur ce plan, je place des points, lesquels définissent des segments de droites permettant de délimiter une surface CLOSE (pièce, appartement, parcelle, etc...), cad le premier point et le dernier point de la poylignes définie par les segments de droite sont les mêmes.

    Je définis aussi les échelles (horizontale et verticale) par rapport des élements du plan dont je connais les dimensions.

    Là où je sèche, c'est pour calculer la surface : la forme peut être quelconque (ceux qui ont fait de l'arpentage ou qui voient régulièrement certains plans d'architectes me comprendront, il n'y a qu'a voir l'image ci jointe).
    Nom : btm12_ap35.jpg
Affichages : 620
Taille : 8,8 Ko

    J'ai déjà regardé les forums, notamment celui "Algo". Mais très souvent on parle de définir un tableau qu'on va "colorier", de découper en triangles, ou d'utiliser des outils mathématiques que j'ai un peu de mal à comprendre (Pour le découpage en triangle à partir d'un sommet fixe, je vois franchement pas comment faire pour l'image ci dessus). La solution la plus 'envisageable' que j'ai trouvé se trouve là :Code de j.p.mignot (en C++)

    Pour mon grand malheur, en plus d'être largué en math, je ne comprends pas le C++ (je comprends en gros comment fonctionne le programme, mais je n'arrive pas à le traduire en Pascal). En fait que représente le * dans S'agit il d'une forme de pointeur ? et que représente de signe de pourcentage dans la partie suivante :
    je suppose qu'il ne s'agit pas d'une division, mais alors, qu'est-ce ?

    Donc, quelqu'un pourrait-il m'aider à traduire cet algo en pascal ?
    Ou, quelqu'un connait-il une méthode pour calculer la surface d'un élement (comme sur l'image ci-dessus) sans sortir la grosse artillerie (intégrale et autres joyeusetés )?

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par diam's
    En fait que représente le * dans S'agit il d'une forme de pointeur ?
    Ce n'est pas une forme de pointeur, c'est un pointeur. DX est un pointeur sur float. En Pascal ça donne :
    Citation Envoyé par diam's
    et que représente de signe de pourcentage dans la partie suivante :
    je suppose qu'il ne s'agit pas d'une division, mais alors, qu'est-ce ?
    C'est stricutement équivalent au mod du Pascal.

    Pour le calcul d'aire, je ne connais aucun de ces algorithmes, mais j'associerait le nom "triangularisation à un sommet fixe" à ce type de résolution :
    • Tu choisis un des sommets de ta forme. Notons-le O. Les autres sommets seront, dans l'ordre, A, B, C, etc. jusque N. Tu peux tourner dans un sens ou dans l'autre, peu importe.
    • Pour chaque paire d'autres sommets consécutifs : A-B, B-C, ..., M-N. On nomme cette paire X-Y.
    • Tu calcules l'aire du triangle OXY par la formule de Héron :
      p = demi-périmètre = ( |OX| + |XY| + |YO| ) / 2
      aire = \/¨( p (p-|OX|) (p-|XY|) (p-|YO|) )
    • Tu détermines si l'angle XOY est positif ou négatif (tu peux choisir le sens, mais par logique on prendra le sens trigonométrique).
    • Si l'angle est positif, alors tu ajoutes l'aire du triangle OXY à l'aire totale de ta forme ; si l'angle est négatif, tu l'en retranches.
    • Si à la fin, tu te retrouves avec une aire négative, tu prends sa valeur absolue - c'est juste que tu auras tourné dans le "mauvais" sens.
    Si un connaisseur d'algo peut confirmer... Là je viens d'inventer ça sur le vif
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Par défaut
    Merci Sjrd pour les infos sur les conventions en C++

    Par contre, pour ce qui est de la triangulation à sommet fixe, je ne vois pas comment faire. C'est effectivement simple avec une forme géométrique simple, mais avec la forme ci-dessous, c'est plus compliqué. Je m'explique :

    Prenons ce dessin, tiré d'un cas réel (et oui, y'a parfois des architectes 'tordus')
    Nom : btm12_ap35.jpg
Affichages : 429
Taille : 23,2 Ko

    Il est aisé, avec ta méthode, de calculer la surface du triangle BOC. Mais il est plus délicat de calculer celle du triangle IOJ. En effet, IOJ n'est pas 'plein' et en plus, une partie de sa surface se recoupe avec celle des triangles QOP, SOT, PON et TOU. A moins que je n'ai mal compris

    Alors, j'ai pensé à déplacer le point O à l'intérieur de la forme. Mais quelque soit l'endroit où je le place, je retombe forcément sur le cas 'IOJ ' ci dessus.

    N'y aurait-il pas quelqu'un qui aurait développé une fonction/un compo permettant de connaitre la surface d'une forme géométrique fermée dont un connait TOUS les sommets ?

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par diam's
    (et oui, y'a parfois des architectes 'tordus')
    En tant que géomètre, je te réponds +100000

    Par contre, si c'est bien la surface que tu veux, il existe une méthode pour la calculer à partir des coordonnées
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Par défaut
    Citation Envoyé par Pedro
    Par contre, si c'est bien la surface que tu veux, il existe une méthode pour la calculer à partir des coordonnées
    ça tombe bien, c'est ce que je cherche

    par contre, cette méthode, tu l'aurais pas sous le coude par hasard ?

    C'est pas un truc du style remplissage de tableau j'espère ? Par ce que, les tableaux, c'est va pas etre facile car :
    - si cotation en cm, une case doit représenté 1cm sur 1 cm
    - pour un batiment dont la surface projetée peut être inscrite dans un carré de 100 m x 100 m, cela fait 100 000 000 de cases. En admettant que chaque case contienne un booleen (la case est DANS la forme ou AU DEHORS), cela fait 100 000 000 d'octets (un bool est, je crois, codé sur un octet), soit environ 95 mO en mémoire...

    Bon d'accord, c'est vrai qu'un bâtiment de 100/100 m, c'est pas fréquent, jusqu'à présent j'ai jamais dépassé le 120 x 50 m, mais quand même...

  6. #6
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Va vite voir ici si ça répond à ta question, parce que personnellement, c'est ce que j'utilise
    http://www.efg2.com/Lab/Graphics/PolygonArea.htm

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par diam's
    ça tombe bien, c'est ce que je cherche

    par contre, cette méthode, tu l'aurais pas sous le coude par hasard ?
    Je pense que l'exemple que donne Waskol est le bon
    Citation Envoyé par diam's
    C'est pas un truc du style remplissage de tableau j'espère ? Par ce que, les tableaux, c'est va pas etre facile car :
    - si cotation en cm, une case doit représenté 1cm sur 1 cm
    - pour un batiment dont la surface projetée peut être inscrite dans un carré de 100 m x 100 m, cela fait 100 000 000 de cases. En admettant que chaque case contienne un booleen (la case est DANS la forme ou AU DEHORS), cela fait 100 000 000 d'octets (un bool est, je crois, codé sur un octet), soit environ 95 mO en mémoire...

    Bon d'accord, c'est vrai qu'un bâtiment de 100/100 m, c'est pas fréquent, jusqu'à présent j'ai jamais dépassé le 120 x 50 m, mais quand même...

    Non rien de tout cela, ça utilise les coordonnées des extrémités Et puis c'est quoi cette manie qu'ont les architectes de travailler en cm... L'unité SI est le mètre!
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de la normale d'une surface (raytracing)
    Par aerendil dans le forum Mathématiques
    Réponses: 0
    Dernier message: 02/06/2009, 17h57
  2. Calculer la normale d'une surface
    Par choko83 dans le forum OpenGL
    Réponses: 5
    Dernier message: 09/12/2008, 19h51
  3. [isosurface] Calcul de l'aire d'une surface
    Par kamelcompte dans le forum Images
    Réponses: 6
    Dernier message: 24/10/2008, 12h32
  4. Calcul normale facette d'une surface
    Par yabbiyou dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/12/2007, 13h55
  5. calcul de surface : exclusion d'une surface qelconque
    Par zax-tfh dans le forum Mathématiques
    Réponses: 4
    Dernier message: 26/02/2007, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo