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
Calcul d'aires
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 :
On va gagner du temps dans les réponses !
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 :
- Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
- Version d'Asymptote et éditeur utilisé pour les figures Asymptote
- Distribution LaTeX et éditeur utilisé pour les tex.
On va gagner du temps dans les réponses !
Calcul d'aires
Micercle
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio
Re: Calcul d'aires
Bonjour,micercle a écrit :Bonjour,
Sujet très intéressant.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.
Je n'en ai pas entendu parlé... et je doute fortement qu'elle existe nativement. Mais mon intuition est faillible.micercle a écrit :Je me posais la question de savoir si Asymptote dispose d'une telle fonction et j'ai pas trouvé.
Une solution programmée en python ?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 ).
Si tel est le cas, cela pourrait être intéressant si on peut l'adapter en Asymptote.
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.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
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 !
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 !
Re: Calcul d'aires
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.
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
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio
Re: Calcul d'aires
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
Micercle
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio
-- -- -- -- --
FreeBSD-10.1-Asy 2.32-TeXLive-2014-Kate/TexMaker/TeXstudio