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

Langage Delphi Discussion :

Conseil programme calcul de surfaces


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut Conseil programme calcul de surfaces
    Bonjour,

    J'aimerai avoir votre avis, voila j'aimerai developper un logiciel de calcul de surface, l'utilisateur dessinerai sa surface (ex: un rectangle) et il aurait automatiquement la surface et le perimetre...
    Que dois je utiliser pour dessiner la surface ? comment je peux faire pour redimensionner la surface au cas ou ? dois je stocker les coordonnées des lignes ?

    merci

  2. #2
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Pour le principe, enregistre plutot les coordonnées de chaque point et les lignes ne seront en fait que 2 pointeurs vers leurs extrémités. Comme ça, tu pourras directement calculer la surface depuis la liste des points
    exemple:
    PointsList:
    Point1 (120,153)
    Point2 (523,521)
    LinesList
    Line1 (Point1,Point2)
    Comme cela, il sera encore plus simple de modifier la surface, il te suffit de modifier le point et les lignes bougeront en fonction de sa position. Après, ce n'at qu'une histoire d'affichage. (Utilisation de OnPaint)
    Bon courage

  3. #3
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Tout dépend de ce que tu souhaites à l'arrivée, ca peut être + ou - compliqué

    comme le dit Pedro204, il vaut mieux utiliser du vectoriel.

    Ensuite, tes points auront-il des coord écran, ou des coord adapatées (style ton écran représente 15000x25000)
    Ensuite, quel type de formes ? n'importe ? X cotés ? concaves ?

    Donc selon les contraintes, ca peut changer du tout au tout.

    Mais une méthode qui marche pas mal (mais qui n'est pas une formule mathématique) est le scan-line.

    Pour une forme concave, il y a 1 point le + haut, 1 point le plus bas, 2 chemins de P1 à P2 qui représentent ta forme.
    Ces 2 chemins representent 2 tableaux de tailles identiques, de taille variable éventuellement selon la dimension que tu utilises.
    Selon un coef. propre à ta dimension, c'est la sommes des tailles de chaque ligne horizontale x coef.

    Idealement, si dimension = écran, le coef est 1, l'incrément de passe d'une ligne à une autre c'est 1, et la surface de chaque ligne (!) le nombre de pixels. (on ramène l'analogique au discret). A l'arrivée, ta surface est la somme de tous les pixels contenu dans ta forme.

    Quant au périmètre c'est la longueur de tes 2 tableaux X 2

    Le dev. le plus dur, sera de trouver les 2 chemins descendants, et d'adapter tes coefficients de régul, si la dimension ne correspond pas aux coord écrans.

    Il y a surement d'autres méthodes, mais pour le cas général, je vois ca...

    bon courage !

  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
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par TicTacToe
    Ensuite, quel type de formes ? n'importe ? X cotés ? concaves ?
    Ah je crois avoir une méthode qui marche pour n'importe quelle forme... Mais avec les points déclarés dans le bon sens

  5. #5
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    rapide!
    ca fait parti du dev. le plus, trouvé les chemins descendants

    Ca me rapelle le remplissage de polygones tout ca

  6. #6
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par TicTacToe
    Ca me rapelle le remplissage de polygones tout ca
    Ah moi c'est plus la topographie que ça me rappelle

    Comme le dis donc (si bien ) TicTacToe, il faut utiliser un système vectoriel de la même manière qu'AutoCAD: Chaque objet (entité) est enregistré dans une base de données avec ses propriétés propres (calque, couleur, épaisseur, etc.) et à chaque fois qu'il doit redessiner, AutoCAD parcourt cette base et redessine les entités nécessaire. Il ne tient ensuite qu'à toi de créer des liaisons dynamiques entre -par exemple- les points et les lignes qui les relient pour pouvoir modifier la surface

  7. #7
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    Ok je vais donc essayé de faire comme tu me l'indiques Pedro, je vais enregistré les coordonnées de chaque point, par contre pour le calcul de la surface je dois m'organisé comment ?

  8. #8
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Avec P1(X1,Y1) et P2(X2,Y2), la distance entre deux points est donnée par la formule:
    [(X2-X1)^2 + (Y2-Y1)^2]^-2, nous obtiendront des pixels comme dimension.
    la valeur d'un pixel en millimètre est donné dans ce tutoriel
    le reste n'est plus que de la trigo et de la géométrie classique, les fonctions de base sont dans l'unité "maths" de Delphi. (delphi 2005 pour moi)
    Cordialement,
    Hauwke

  9. #9
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    bin !???

    j'ai donc blablaté pour rien a propos de la surface alors...
    Ou alors on parle pas la même langue
    ou alors, ma proposition ne te convient vraiment pas

    ...

    Mais en lisant le post de Hauwke, il y a une autre solution que le scan line.

    pour une forme à X cotés, il faut découper ton polygone en triangles, et cumuler la surfaces des triangles, et là effectivement ce n'est que de la trigo.
    La difficulté: le découpage d'un polygone en triangle, mais je suis certains que c'est faisable, ou tout du moins que des sources existent

    AVANTAGE: calcul précis, non dépendant de la dimension. (on ne travaille qu'avec des coord selon la dimension choisie), surement plus rapide que le scan-line

    DESAVANTAGE/ SCAN-LINE: ne peut pas calculer de surface sur des non-polygones (avec des arcs) ou patatoides.

  10. #10
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par TicTacToe
    pour une forme à X cotés, il faut découper ton polygone en triangles, et cumuler la surfaces des triangles, et là effectivement ce n'est que de la trigo.
    La difficulté: le découpage d'un polygone en triangle, mais je suis certains que c'est faisable, ou tout du moins que des sources existent
    C'est précisément la méthode que je propose. En fait, les angles concaves sont "compensés" par les convexes (ou vice versa). Et il n'y a donc pas besoin de penser à un quelconque déoupage:
    Tu prends le premier point comme base puis le 2nd et le 3eme, ensuite le 1er avec le 3eme et la quetrième etc...

  11. #11
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Autant pour moi alors, je n'avais pas compris dans ce sens.
    J'avais percuté 'repertorier ses formes en vectoriel dans une liste' en gros.

    Mais c'est exact, le découpage en triangle de sommet unique (et quelconque) est de loin la solution la plus simple.

  12. #12
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Citation Envoyé par TicTacToe
    AVANTAGE: calcul précis, non dépendant de la dimension. (on ne travaille qu'avec des coord selon la dimension choisie), surement plus rapide que le scan-line
    +1 pour la précision et même l'extrême précision 10^-9 reste trés facile à obtenir...
    Citation Envoyé par TicTacToe
    DESAVANTAGE/ SCAN-LINE: ne peut pas calculer de surface sur des non-polygones (avec des arcs) ou patatoides.
    Distance entre deux points P1(p1,thêta1), P2(p2,thêta2) (coordonnées polaires):
    [p1^2+p2^2-2*p1*p2*cos(thêta2-thêta1)]^-2
    de mémoire, avec un peu de calcul intégral au bout ça régle tous les problèmes et rend toujours la même possibilité de précision. il suffit de travailler avec une matrice de points. Les fonctions de base du calcul matriciel sont égalements dans les unités de Delphi. il y a de trés nombreuses sources disponibles sur le sujet.
    Cordialement,
    Hauwke

  13. #13
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    Merci pour toutes ces informations, j'ai plus qu'a m'y mettre.

Discussions similaires

  1. 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
  2. Calcul de surface ?
    Par fatdarron dans le forum Delphi
    Réponses: 6
    Dernier message: 17/11/2006, 21h55
  3. Calcul de surface et de périmètre de forme géométrique
    Par Nathan dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 15/05/2006, 13h52
  4. [Conseils] Programmation d'un protocole IRC
    Par Malko06 dans le forum IRC / mIRC
    Réponses: 2
    Dernier message: 25/03/2006, 01h50
  5. [LG] Programme calculant l'entier pythagoricien
    Par Darkarcher dans le forum Langage
    Réponses: 4
    Dernier message: 21/11/2005, 20h33

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