Calcul d'aires

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
micercle
Messages : 7
Enregistré le : lun. 10 déc. 2012, 19:27

Calcul d'aires

Message non lu par micercle » dim. 24 mai 2015, 18:17

Bonjour,

Je manipule des courbes de Bézier et des segments qui constituent des contours fermés. Je cherche à calculer l'aire de la surface entourée par un tel contour. Je me posais la question de savoir si Asymptote dispose d'une telle fonction et j'ai pas trouvé. Utilisant aussi du python, j'ai utilisé la formule de Green-Riemann en approximant mes courbes de Bézier par 4 segments avec l'algorithme de Casteljau. Du coup je me retrouve avec un contour polygonal très proche de mon contour initial et le calcul de l'aire me convient parfaitement (faute d'autre chose :)).

Peut-être des esprits plus astucieux que le mien ont-ils déjà posé le pb, voire ont-ils déjà des débuts de réponse ?

Merci de vos lumières

Micercle
--
FreeBSD 10.1, Asymptote v 2.32, editeur principal kate (KDE), TeXLive 2014
Micercle
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Calcul d'aires

Message non lu par GM » dim. 24 mai 2015, 18:36

micercle a écrit :Bonjour,
Bonjour,
micercle a écrit :Je manipule des courbes de Bézier et des segments qui constituent des contours fermés. Je cherche à calculer l'aire de la surface entourée par un tel contour.
Sujet très intéressant.
micercle a écrit :Je me posais la question de savoir si Asymptote dispose d'une telle fonction et j'ai pas trouvé.
Je n'en ai pas entendu parlé... et je doute fortement qu'elle existe nativement. Mais mon intuition est faillible.
micercle a écrit :Utilisant aussi du python, j'ai utilisé la formule de Green-Riemann en approximant mes courbes de Bézier par 4 segments avec l'algorithme de Casteljau. Du coup je me retrouve avec un contour polygonal très proche de mon contour initial et le calcul de l'aire me convient parfaitement (faute d'autre chose :)).
Une solution programmée en python ?
Si tel est le cas, cela pourrait être intéressant si on peut l'adapter en Asymptote.
micercle a écrit :Peut-être des esprits plus astucieux que le mien ont-ils déjà posé le pb, voire ont-ils déjà des débuts de réponse ?

Merci de vos lumières
La question est posée... et je vais attendre aussi, pour voir si un tel esprit vient, sur le forum, nous éclairer sur ce sujet très intéressant. :-)
Désolé de ne pas avoir pu aider.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

micercle
Messages : 7
Enregistré le : lun. 10 déc. 2012, 19:27

Re: Calcul d'aires

Message non lu par micercle » dim. 24 mai 2015, 21:17

Merci pour la réponse même si elle ne répond pas à la question.

Voici le bout de code en python :

def area(self):
DX,DY = [],[]
A = 0.0
X,Y=[],[]
X,Y = [k.x for k in self.P],[k.y for k in self.P]
DX,DY = [k.x for k in self.points_milieux()],[k.y for k in self.points_milieux()]
for i in range(self.taille):
DX.append((X[(i+1)%self.taille]-X[(i+self.taille-1)%self.taille])/2)
DY.append((Y[(i+1)%self.taille]-Y[(i+self.taille-1)%self.taille])/2)
for i in range(self.taille):
A = A+(X*DY-Y*DX)
return A

c'est une méthode d'un objet qui correspond à la liste des coordonnées (x,y) des points du contour non fermé (le dernier point ne coïncide pas avec le premier) dans le sens de parcours. Le sens est déterminé par le signe de l'aire.

La méthode points_milieux() calcule la liste des coordonnées des points milieux des segments. Ces points me servent pour pour les normales du contour.

self.taille est la taille de la liste de points. Quelques essais sur des formes simples donnent de bons résultats et très rapide. J'aurais aimé comparer avec une méthode utilisant directement la courbe de bézier.

Mes recherches sur le nain ternet ne m'ont renvoyé que des réponses sur les contours polygonaux et rien sur Bézier ! Mais, le nain ternet est vaste !!

Ce n'est ni plus ni moins que green-riemannn dans son aspect pratique. Si des volontaires veulent traduire en asymptote je n'ai que ma bénédiction a apporter.

La suite au prochain numéro ?

Micercle

PS remarque et correction : j'approxime les arcs de bézier en les divisant en 4, mais bon, peu importe l'approximation semble très correcte.
Micercle
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio

micercle
Messages : 7
Enregistré le : lun. 10 déc. 2012, 19:27

Re: Calcul d'aires

Message non lu par micercle » dim. 24 mai 2015, 21:49

Ma solution existe déjà chez Ph. Ivaldi pour un contour polygonal, mais non pour des courbes de bézier !! (http://www.piprime.fr/857/orientation-o ... e-fig0010/)

Micercle
Micercle
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio

Répondre