Des nouvelles

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Ph. Ivaldi

Des nouvelles

Message non lu par Ph. Ivaldi »

Bonjour,
Des nouveautés sur mon site consacré à Asymptote:
Voilà... cela faisait longtemps que je voulais faire une page d'animations; c'est chose faite.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [Asymptote] Des nouvelles

Message non lu par MB »

Très bien tout ça. :mrgreen:
Il va falloir que je regarde l'histoire des polyèdres car je pense en avoir besoin sous peu.
Sinon, c'est quoi l'histoire des fichiers OBJ ?
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Re: [Asymptote] Des nouvelles

Message non lu par rebouxo »

Super, génial.

Une petite question, si on veut faire des solides, plus basiques (pyramides à base carrée par exemple). Comment faire ?

Olivier
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

MB a écrit :Il va falloir que je regarde l'histoire des polyèdres car je pense en avoir besoin sous peu.
Salut MB,

Pour l'instant l'extension ne fait pas grand chose: elle affiche juste un ensemble de polyèdres.
Dans le futur... peut-être...
MB a écrit :Sinon, c'est quoi l'histoire des fichiers OBJ ?
Les fichiers obj sont des fichiers texte qui contiennent des informations pour définir un objet 3D.
La plupart des gros logiciels de synthèse d'image en 3D peuvent exporter en .obj
Voir http://fr.wikipedia.org/wiki/Obj
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [Asymptote] Des nouvelles

Message non lu par MB »

rebouxo a écrit :Une petite question, si on veut faire des solides, plus basiques (pyramides à base carrée par exemple). Comment faire ?
Bonne question, ça m'intéresse aussi ça. :mrgreen: (mais je ne sais pas si ce module le permet)
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

rebouxo a écrit :Une petite question, si on veut faire des solides, plus basiques (pyramides à base carrée par exemple). Comment faire ?
C'est très simple, il suffit de définir chaque face:

Code : Tout sélectionner

import polyhedron;
settings.tex="pdflatex";
settings.outformat="pdf"; // for opacity

polyhedron pyramid;
real sq2=sqrt(2)/2;
pyramid[0]=(sq2,-sq2,0)--(sq2,sq2,0)--(-sq2,sq2,0)--(-sq2,-sq2,0)--cycle;
pyramid[0]=pyramid[0]--cycle;
pyramid[1]=(sq2,-sq2,0)--(sq2,sq2,0)--(0,0,1)--cycle;
pyramid[2]=(sq2,sq2,0)--(-sq2,sq2,0)--(0,0,1)--cycle;
pyramid[3]=(-sq2,sq2,0)--(-sq2,-sq2,0)--(0,0,1)--cycle;
pyramid[4]=(-sq2,-sq2,0)--(sq2,-sq2,0)--(0,0,1)--cycle;
size(10cm);
polyhedron[] parr={pyramid};
filldraw(parr,new pen[]{lightgrey},op=0.9);
Pièces jointes
pyramid.png
pyramid.png (19.58 Kio) Consulté 1816 fois
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Re: [Asymptote] Des nouvelles

Message non lu par rebouxo »

Si j'ai bien compris tu décris chacune des faces.
Et si je veux avoir une pyramide en fil de fer : pas de couleur sur les faces, mais des pointillés sur les arêtes cachées ?

C'est possible ?


Olivier
P.Fradin

Re: [Asymptote] Des nouvelles

Message non lu par P.Fradin »

Bonjour à tous,

Si je puis me permettre, pourquoi ne pas faire une macro qui construit elle-même les faces? On lui fournit la liste des sommets puis la liste des faces mais avec les numéros de sommets au lieu des coordonnées. C'est ce que je propose dans mon programme (la macro MakePoly), cela donnerait pour cet exemple:

on définit les 4 sommets de base: s1, s2, s3, s4 puis le sommet du haut s5 (dans le sens direct), on construit ensuite la pyramide comme ceci (attention à l'orientation des faces):

Code : Tout sélectionner

pyramide:= MakePoly([s1,s2,s3,s4,s5],[4,3,2,1,jump,1,2,5,jump,2,3,5,jump,3,4,5,jump,4,1,5,jump])
L'avantage c'est qu'il devient alors plus facile d'écrire ensuite des macros qui calculent des sommets et construisent elle-même des polyèdres.
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

rebouxo a écrit :Et si je veux avoir une pyramide en fil de fer : pas de couleur sur les faces, mais des pointillés sur les arêtes cachées ?
Pour du fil de fer il suffit de remplacer le filldraw(parr,...) par draw(parr).
Les arrêtes en pointillés ne sont pas encore implémentées; si quelqu'un a un algorithme à proposer, je suis preneur.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [Asymptote] Des nouvelles

Message non lu par MB »

Ph. Ivaldi a écrit :Les arrêtes en pointillés ne sont pas encore implémentées; si quelqu'un a un algorithme à proposer, je suis preneur.
En effet, ça ne doit pas être très simple tout ça ... :| (dans un cas général)
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

P.Fradin a écrit :Si je puis me permettre, pourquoi ne pas faire une macro qui construit elle-même les faces? On lui fournit la liste des sommets puis la liste des faces mais avec les numéros de sommets au lieu des coordonnées.
Bonjour Patrick,
C'est effectivement une bonne méthode et c'est ainsi qu'est construit un .obj.
L'extension pour Asymptote est pour l'instant minimaliste; Je verrai ce que je peux faire lorsque j'aurais du temps...
(MB attend encore la fin de trembling et il reste un truc pénible à régler dans geometry_dev)

J'en profite pour te remercier pour les fichiers permettant de fabriquer les animations swf avec les boutons.
P.Fradin

Re: [Asymptote] Des nouvelles

Message non lu par P.Fradin »

Ph. Ivaldi a écrit : Les arrêtes en pointillés ne sont pas encore implémentées; si quelqu'un a un algorithme à proposer, je suis preneur.
Pour les polyèdres convexes (uniquement) j'ai procédé ainsi dans TeXgraph:

- structure de données: une arête est la donnée de deux points et un statut (visible/cachée),
- par défaut toutes les arêtes sont considérées comme cachées,
- on parcourt le polyèdre face par face:
* pour chaque face: on détermine si elle est visible ou non, c'est à dire si son vecteur normal est dirigé vers l'observateur (c'est juste un produit scalaire à faire), si elle est visible alors les arêtes de cette face sont visibles, on modifie donc leur statut.

Voilà c'est tout!

On peut alors envisager plusieurs modes de dessin:

* fil de fer: on dessine juste les arêtes en tenant compte de leur statut
* faces visibles uniquement avec éventuellement un remplissage
* faces visibles + arêtes cachées
pyramide.png
pyramide.png (11.66 Kio) Consulté 1660 fois
J'en profite pour te remercier pour les fichiers permettant de fabriquer les animations swf avec les boutons.
C'est surtout Jean-Michel (Sarlat) qu'il faut remercier!
Dernière modification par P.Fradin le dimanche 10 février 2008, 10:07, modifié 1 fois.
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

Merci, je prends note.
kib2

Re: [Asymptote] Des nouvelles

Message non lu par kib2 »

Salut à tous,

joli travail Philippe, j'aime beaucoup ton bateau playmobil :)

J'avais procédé ainsi avec geoPyX et les objets 3d (qui étaient aussi des .obj, j'ai d'ailleurs toujours un exemplaire de la navette spatiale, parmi pas mal d'autres objets, si ça t'interesse...) :

- trier les faces visibles/cachées (à l'aide du produit scalaire, cf algo de Patrick).
- commencer par tracer toutes les faces cachées en pointillés ;
- ensuite les visibles ;

Le rendu final est acceptable, mais personnelement je me suis arrêté là car je n'en étais pas totalement satisfait (une arête peut-être à la fois cachée/visible car appartenant à deux faces distinctes, la superposition se voit parfois un peu mais il faut vraiment être très attentif pour le remarquer).

Maintenant, (c'est totalement hors-sujet) je m'intéresse de plus en plus aux langages fonctionnels et je viens de trouver ceci implémenté en Common-Lisp: http://www.fractalconcept.com/ex.pdf
C'est le troisième projet (après Lout et Ant) que je vois qui tente une alternative à LaTeX/MetaPost en même temps...mais la barrière semble être le language.
Pourtant j'aime beaucoup la syntaxe minimaliste de Lisp et j'imagine déjà ce qu'on pourrait faire avec de telles choses.
P.Fradin

Re: [Asymptote] Des nouvelles

Message non lu par P.Fradin »

Bonjour,
kib2 a écrit : Le rendu final est acceptable, mais personnelement je me suis arrêté là car je n'en étais pas totalement satisfait (une arête peut-être à la fois cachée/visible car appartenant à deux faces distinctes, la superposition se voit parfois un peu mais il faut vraiment être très attentif pour le remarquer).
Dans l'algorithme que j'ai proposé il n'y a pas ce problème puisque chaque arête est dessinée une seule fois. Initialement toutes les arêtes ont le statut "cachée", puis on parcourt toutes les faces une à une, lorsqu'une face est visible le statut de ses arêtes passe à "visible". Ensuite on peut dessiner chaque arête en fonction de son statut, et une seule fois chacune!.
Maintenant, (c'est totalement hors-sujet) je m'intéresse de plus en plus aux langages fonctionnels ....
Maintenant tu sais pourquoi dans TeXgraph tout est fonction et liste (en fait tout est "arbre" et exécuter signifie évaluer l'arbre)... :wink:
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

kib2 a écrit :joli travail Philippe, j'aime beaucoup ton bateau playmobil :)
Salut Kib2 et merci pour le compliment mais c'est Jens qui a fait le plus gros boulot.
kib2 a écrit : j'ai d'ailleurs toujours un exemplaire de la navette spatiale, parmi pas mal d'autres objets, si ça t'interesse...) :
Un joli .obj m'intéresse effectivement.
kib2 a écrit : une arête peut-être à la fois cachée/visible car appartenant à deux faces distinctes, la superposition se voit parfois un peu
C'est pourquoi je pense qu'il faut parcourir chaque arrête avec un petit pas et lancer un rayon vers la caméra pour savoir s'il intercepte une face.
Une autre idée (bête) et de tracer toutes les arrêtes en trait plein puis de hachurer chaque face (ordonnée) avec la couleur de fond (oui je sais le résultat risque d'être moche).
Ceci dit je ne me suis pas penché sérieusement sur la question...
kib2 a écrit : je viens de trouver ceci implémenté en Common-Lisp: http://www.fractalconcept.com/ex.pdf
C'est intéressant mais avant d'avoir toutes les fonctionnalités de TeX, il risque de passer beaucoup d'eau sous les ponts.
Tu nous tiens au courant des évolutions ?
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

P.Fradin a écrit :Dans l'algorithme que j'ai proposé il n'y a pas ce problème puisque chaque arête est dessinée une seule fois. Initialement toutes les arêtes ont le statut "cachée", puis on parcourt toutes les faces une à une, lorsqu'une face est visible le statut de ses arêtes passe à "visible". Ensuite on peut dessiner chaque arête en fonction de son statut, et une seule fois chacune!.
On est d'accord mais cela ne marche que pour les polyèdres convexes.
Comment faire dans le cas général (on peut supposé --sans perte de généralité-- que chaque face est convexe).
P.Fradin

Re: [Asymptote] Des nouvelles

Message non lu par P.Fradin »

Ph. Ivaldi a écrit : On est d'accord mais cela ne marche que pour les polyèdres convexes.
Comment faire dans le cas général (on peut supposé --sans perte de généralité-- que chaque face est convexe).
Bonjour Philippe,

Pour les non convexes, c'est évidemment plus délicat! Je ne vais pas polluer ce fil consacré à Asymptote avec mon programme, disons que l'utilisateur a deux méthodes pour représenter son polyèdre quand il est non convexe:

1) un tri de facettes de la plus éloignée à la plus proche puis affichage, c'est suffisant quand le solide n'est pas trop tordu.
ou
2) un tri de facettes avec découpage pour les classer, c'est l'algorithme de BSP-trees, ça fonctionne tout le temps mais cela peut faire une image très lourde en vectoriel!

Ce deux méthodes ne donnent pas les arêtes cachées en pointillés, l'astuce est de redessiner en pointillés toutes les arêtes par dessus, dans la même couleur et a même épaisseur bien sûr.
Exemple avec l'algorithme des BSP-trees
Exemple avec l'algorithme des BSP-trees
Personnellement, je n'aime pas trop voir les arêtes cachées en pointillés dans ce cas, je trouve qu'utiliser la transparence donne mieux, d'ailleurs Jean-Michel a mis quelques exemples sur son site Syracuse.
Ph. Ivaldi

Re: [Asymptote] Des nouvelles

Message non lu par Ph. Ivaldi »

P.Fradin a écrit :Je ne vais pas polluer ce fil consacré à Asymptote avec mon programme
Tu ne pollues rien du tout et je ne peux que te remercier pour tes excellents conseils.
P.Fradin a écrit :l'astuce est de redessiner en pointillés toutes les arêtes par dessus, dans la même couleur et a même épaisseur bien sûr.
Excellente astuce !
Finalement je crois qu'il ne manque pas grand chose pour que les modules de Jens affiche les arrêtes cachées en pointillés.
Dès que j'ai un moment, j'y travaille. Encore merci !
OG
Modérateur spécialisé
Modérateur spécialisé
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Des nouvelles

Message non lu par OG »

Bonjour

Tout cela est très joli.
Pour information, l'algorithme de Jens pour les polyèdres est similaire à celui utilisé par Patrick (ou encore m3D par Anthony Phan et bien d'autres encore) et travaille sur les faces.

1) trie selon la distance de la caméra au centre de gravité de la face
2) selon le produit scalaire qui teste face visible/invible on affiche la face et ses arêtes.

Donc facilement adaptable pour faire un mode fil de fer/pointillé. (mélanger transparence et pointillé n'est pas forcément un bon mélange)

Cordialement
O.G.
Répondre