PolyedresII.mac
3 participants
Page 6 sur 7
Page 6 sur 7 • 1, 2, 3, 4, 5, 6, 7
Re: PolyedresII.mac
Alphonse Capriani a écrit:
Par contre, si je ne me trompe pas les animations postées dans le post précédents sont plus pratiques si on veut les insérées dans une page web ou sur un forum. Donc c'est vrai que ca pourrait être très utile. Tu as réalisé ca comment?
C'est une applet java qui s'appelle JMath3D, le texte de la première applet est le suivant:
- Code:
<applet code="JMath3D.class" archive="JMath3D.jar" width="250" height="250">
<param name="model" value="images/essai3.obj"/>
<param name="echelle" value="1" />
<param name="couleursfaces" value="1à6:#0000ff 7à14:#ff0000 15à26:#ffff00"/>
<param name="animation" value="-0.005 0.005 "/>
<param name="epaisseur" value="0.5 0"/>
<param name="couleurfond" value="#5F9EA0" />
</applet>
Cela suppose la présence de JMath3D.class sur le serveur, et le fichier chargé s'appelle essai3.obj dans cet exemple.
Il serait possible de rajouté un bouton ou une option dans le modèle Animation.mod pour réaliser ce genre d'animation automatiquement?
Cela demande réflexion, il faut d'abord travailler l'export en .obj (que je ne connais pas vraiment encore), à partir de là il devrait être possible d'exporter directement l'applet à partir de Animation.mod.
Re: PolyedresII.mac
Ouais : c'est sur! D'autant que si ca pose problème pour certains polyèdres (heureusement peu nombreux) c'est un peu dommage.
En tout cas, si tu réfléchis a mettre un tel bouton, il serait très agréable d'en créer un aussi pour pouvoir créer une animation en pdf : je viens de re regarder celles que tuu as faites et je dois admettre que je trouve ca vraiment pas mal...
En tout cas, si tu réfléchis a mettre un tel bouton, il serait très agréable d'en créer un aussi pour pouvoir créer une animation en pdf : je viens de re regarder celles que tuu as faites et je dois admettre que je trouve ca vraiment pas mal...
Re: PolyedresII.mac
Alphonse Capriani a écrit:
En tout cas, si tu réfléchis a mettre un tel bouton, il serait très agréable d'en créer un aussi pour pouvoir créer une animation en pdf : je viens de re regarder celles que tuu as faites et je dois admettre que je trouve ca vraiment pas mal...
Sauf que ces animations pdf passent par un format (u3d) qui est tout sauf simple (il utilise des algorithmes de compression et il y a plus d'une centaine de pages dans la doc...), autrement dit, il faudra passer par un autre logiciel (MeshLab est le seul qui soit libre et qui propose le format u3d, c'est dire!). Mais de toutes les façons il faut quand même un fichier obj.
Re: PolyedresII.mac
Je proposais ca comme ca!!! Si ca doit être un vrai casse tête pour ajouter cette option, c'est pas la peine : on s'en passera
Re: PolyedresII.mac
Salut!!
Je propose une petite nouveauté que j'ai vue sur le site de Syracuse et que je trouve pas mal. L'idée est de creuser chaque facette en laissant une bandelette d'une certaine largeur au bord.
Voivi une macro FacettesCreuses( facettes [, epaisseur] ):
Pour tester cela, j'ai chargé le modèle PolyedresII.mod (merci Alphonse ) et j'ai crée l'élément graphique Utilisateur suivant:
ce qui donne:
Je propose une petite nouveauté que j'ai vue sur le site de Syracuse et que je trouve pas mal. L'idée est de creuser chaque facette en laissant une bandelette d'une certaine largeur au bord.
Voivi une macro FacettesCreuses( facettes [, epaisseur] ):
- Code:
{FacetteCreuse( polyedre [, epaisseur] ) }
[if %2=Nil then $ep:=0.25 else ep:=%2/2 fi,
MapBy(
[$A1:=Nil, $A2:=S[0,2],$A3:=S[1,2], $F:=Nil,
$aux:= Map3D([ A1:=A2, A2:=A3, A3:=Z,
if A1<>Nil then
$u:=normalize(A1-A2), $v:=normalize(A3-A2),
$ecart:=angle(u,v)/2,
$L:=ep/sin(ecart),
Insert(F,A2+L*normalize(u+v))
fi
], $Z, [S[3,0],S[1,2]]),
$compt:=0, $B:=Nil,
Map3D( [Inc(compt,1), $A:=B, B:=$Z,
if A<>Nil then
A,B,F[2*compt-1,2], F[2*compt-3,2],jump
fi,
], Z, S),
B,Copy(S,1,2),F[1,2],F[2*compt-1,2]
],
S, %1, jump) ]
Pour tester cela, j'ai chargé le modèle PolyedresII.mod (merci Alphonse ) et j'ai crée l'élément graphique Utilisateur suivant:
- Code:
[ background(full, lightskyblue),
poly:=Archimede(6, [0,0],[3,0]),
FillColor:=gold, FillStyle:=full,
DrawPolyNC(FacettesCreuses(poly,0.35),1)
]
ce qui donne:
Re: PolyedresII.mac
Ah ouais! Pas mal!!
J'avais pas penser a ce genre de truc!!!
Ta macro marche pour n'importe quel polyèdre convexe? Il se passe quoi avec un polyèdre non convexe? (Intuitivement, je pense que le résultat avec un polyèdre non convexes ne doit pas etre terrible et est donc probablement sans intérêt. J'essaie tout de suite...
J'avais pas penser a ce genre de truc!!!
Ta macro marche pour n'importe quel polyèdre convexe? Il se passe quoi avec un polyèdre non convexe? (Intuitivement, je pense que le résultat avec un polyèdre non convexes ne doit pas etre terrible et est donc probablement sans intérêt. J'essaie tout de suite...
Re: PolyedresII.mac
Woooow! Ca donne des résultats pas mal!!!
Même avec les polyèdres non convexes, on obtient des résultats (presques) satisfaisant!
En voici la preuve avec le grand rhombicuboctaèdre uniforme et le petit dodécaèdre étoilé :
Je te suggère d'ajouter cette macro au fichier polyedres.mac. Je trouve qu'elle a plus sa place dans ce fichier plutot que dans PolyedresII.mac car c'est une macro qui s'applique visiblement a n'importe quel polyèdres convexes : pas besoin de l'utiliser avec un polyèdres régulier, semi régulier, ou un polyèdre de Johnson.
En plus, je veux pas de tes macros dans mon fichier : on ne mélange pas les cochons avec les vaches!!!
Non : je rigole!!!! (D'autant que tu as déja contribué a mon fichier (nottement la pour la macro transf))
Même avec les polyèdres non convexes, on obtient des résultats (presques) satisfaisant!
En voici la preuve avec le grand rhombicuboctaèdre uniforme et le petit dodécaèdre étoilé :
Je te suggère d'ajouter cette macro au fichier polyedres.mac. Je trouve qu'elle a plus sa place dans ce fichier plutot que dans PolyedresII.mac car c'est une macro qui s'applique visiblement a n'importe quel polyèdres convexes : pas besoin de l'utiliser avec un polyèdres régulier, semi régulier, ou un polyèdre de Johnson.
En plus, je veux pas de tes macros dans mon fichier : on ne mélange pas les cochons avec les vaches!!!
Non : je rigole!!!! (D'autant que tu as déja contribué a mon fichier (nottement la pour la macro transf))
Re: PolyedresII.mac
Les résultats sont davantage satisfaisants avec la commande Build3D:
Cette macro rejoindra effectivement polyedres.mac.
PS: tu as aussi les macros cup et cap à tester, tu les as vues dans la rubrique annonces?
- Code:
[background(full, lightskyblue),
poly:=PolyNC(9, [0,0],[4,0], face1,face2,face3,aretes),
FillColor:=gold, FillStyle:=full,
Build3D( [face1[1],face1[2],FacettesCreuses(face1[3,0],0.5)],
[face2[1],face2[2],FacettesCreuses(face2[3,0],0.5)],
[face3[1],face3[2],FacettesCreuses(face3[3,0],0.5)],
aretes
), Display3D()
]
Cette macro rejoindra effectivement polyedres.mac.
PS: tu as aussi les macros cup et cap à tester, tu les as vues dans la rubrique annonces?
Re: PolyedresII.mac
P.Fradin a écrit:Les résultats sont davantage satisfaisants avec la commande Build3D:
Et ouais!!! J'aurais mieux fais de rester couché ce matin :
Concernant tes macros Cap et Cup, je les teste de suite! A noter que j'ai déja répondu a ton post concernant ces macros...
(AAaaaaahhh!! Ca fait du bien un peu d'activité sur le forum : depuis quelques temps, on n'y voyait plus grand monde!!! Ca sent les vacances...)
Re: PolyedresII.mac
Alphonse Capriani a écrit:
(AAaaaaahhh!! Ca fait du bien un peu d'activité sur le forum : depuis quelques temps, on n'y voyait plus grand monde!!! Ca sent les vacances...)
En particulier on ne voit plus Samuel...
Re: PolyedresII.mac
Ouais! C'est vrai!!!
Il fait peut être des infidélités à ton logiciel...
Mais ce n'est pas le sujet (ou alors il faut ouvrir un nouveau topic intitulé "Petits potins sur les utilisateurs de TeXgraph...")
Il fait peut être des infidélités à ton logiciel...
Mais ce n'est pas le sujet (ou alors il faut ouvrir un nouveau topic intitulé "Petits potins sur les utilisateurs de TeXgraph...")
Re: PolyedresII.mac
Salut,
Maintenant que l'on sait évider les facettes, pourquoi ne pas remplir les facettes creuses?
Variante de la macro FacettesCreuses( <listes>, <epaisseur>, <facettes enlevées>), qui permet de récupérer dans le troisième paramètre, la liste des facettes qui ont été enlevées.
Exemple:
Ce qui donne:
Maintenant que l'on sait évider les facettes, pourquoi ne pas remplir les facettes creuses?
Variante de la macro FacettesCreuses( <listes>, <epaisseur>, <facettes enlevées>), qui permet de récupérer dans le troisième paramètre, la liste des facettes qui ont été enlevées.
- Code:
[if %2=Nil then $ep:=0.25 else ep:=%2/2 fi,
MapBy(
[$A1:=Nil, $A2:=S[0,2],$A3:=S[1,2], $F:=Nil,
$aux:= Map3D([ A1:=A2, A2:=A3, A3:=Z,
if A1<>Nil then
$u:=normalize(A1-A2), $v:=normalize(A3-A2),
$ecart:=angle(u,v)/2,
$L:=ep/sin(ecart),
Insert(F,A2+L*normalize(u+v))
fi
], $Z, [S[3,0],S[1,2]]),
$compt:=0, $B:=Nil, Insert($interieur,[F,jump]),
Map3D( [Inc(compt,1), $A:=B, B:=$Z,
if A<>Nil then
A,B,F[2*compt-1,2], F[2*compt-3,2],jump
fi,
], Z, S),
B,Copy(S,1,2),F[1,2],F[2*compt-1,2]
],
S, %1, jump), %3:=interieur ]
Exemple:
- Code:
[background(full, CplColor(gold)),
poly:=Archimede(9, [0,0],[4,0]),
Build3D( [1+1.5*i, gold, FacettesCreuses(poly,0.15,S)],
[1-i, Rgb(0.54,1,0.56)+0.7*i, S]
), Display3D()
]
Ce qui donne:
Re: PolyedresII.mac
Ouais : pas mal!!!
Cela dit, je viens de tester ta macro FacettesCreuses et rien ne s'affiche!!!
J'ai regardé vite fait le code et je voit pas ce qui coince.
Je viens également de voir qu'une nouvelle macro venait de faire son apparition : CplColor(<Couleur>)
Je suppose qu'elle permet de définir la couleur "complémentaire" de celle pris en argument.
Si je ne me trompe pas, cette macro n'est pas encore disponible dans la version test de TeXgraph, non?
Cela dit, je viens de tester ta macro FacettesCreuses et rien ne s'affiche!!!
J'ai regardé vite fait le code et je voit pas ce qui coince.
Je viens également de voir qu'une nouvelle macro venait de faire son apparition : CplColor(<Couleur>)
Je suppose qu'elle permet de définir la couleur "complémentaire" de celle pris en argument.
Si je ne me trompe pas, cette macro n'est pas encore disponible dans la version test de TeXgraph, non?
Re: PolyedresII.mac
Tu as bien chargé PolyedresII.mac?
Quant à la macro CplColor() elle fait partie d'une liste que j'avais déjà donnée sur le fil "Future version".
Quant à la macro CplColor() elle fait partie d'une liste que j'avais déjà donnée sur le fil "Future version".
Re: PolyedresII.mac
P.Fradin a écrit:Tu as bien chargé PolyedresII.mac?
Tout à fait!!! Je vais réessayer pour voir si ca marche aujourd'hui : t'as macro bug peut être quand elle est exécutée un lundi?
P.Fradin a écrit:Quant à la macro CplColor() elle fait partie d'une liste que j'avais déjà donnée sur le fil "Future version".
Ah ouais? J'ai du passer à coté : je vais voir ca tout de suite...
Re: PolyedresII.mac
Alphonse Capriani a écrit:P.Fradin a écrit:Tu as bien chargé PolyedresII.mac?
Tout à fait!!! Je vais réessayer pour voir si ca marche aujourd'hui : t'as macro bug peut être quand elle est exécutée un lundi?
Elle marche tous les jours de la semaine, elle ne dépend que de l'utilisateur en fait
Tu as bien appelé la macro FacettesCreuses, hein? Le même nom que celui utilisé dans l'élément graphique?
Re: PolyedresII.mac
Bon!!! J'ai trouvé quel était le problème :
En fait, j'avait inséré ta macro dans le fichier polyedres.mac, mais je n'avais pas mis le double dièse ## a la fin de la macro (habituellement, quand je fait cette oubli, TeXgraph me le signale, mais la, il s'est tu!!!)
J'ai corriger le fichier et ca marche impeccable. En voici un bel exemple :
Et voici le code associé :
En fait, j'avait inséré ta macro dans le fichier polyedres.mac, mais je n'avais pas mis le double dièse ## a la fin de la macro (habituellement, quand je fait cette oubli, TeXgraph me le signale, mais la, il s'est tu!!!)
J'ai corriger le fichier et ca marche impeccable. En voici un bel exemple :
Et voici le code associé :
- Code:
[
background(full, Light(black, 0.3)),
StyleL:=Thicklines,
$P:=DodecaedreAdc(Origin, vecI, A, B, C, D),
FacettesCreuses(Copy(A, 3, 0), 0.1, A'),
FacettesCreuses(Copy(B, 3, 0), 0.1, B'),
FacettesCreuses(Copy(C, 3, 0), 0.1, C'),
Build3D([1, Color1, A'], [1, Color2, B'], [1, Color3, C'], [2, ColorL, StyleL, Aretes(P)]),
Display3D()
]
Re: PolyedresII.mac
Ah oui, c'est rigolo, la macro qui sert à creuser les facettes peut aussi servir à creuser les bords!
Re: PolyedresII.mac
J'ai pensé a une autre syntaxe pour ta macro FacettesCreuses. La voici :
FacettesCreuses(<Liste de faces>, <écart+i*mode>, [Faces éliminées])
Le mode prendrait les valeurs 0 pour creuser les faces comme la macro le faisait déjà, ou 1 pour creuser les faces de cette manière :
Je pense qu'on peut alors aboutir a de jolis polyèdres creusés...
En plus, en réitérant le procédé sur les facettes creusé que l'on récupère, on pourrait faire des polyèdre a faces "spiralées"!!! J'aimerais bien créer un icosidodécaèdre dont les faces pentagonales soit de ce style :
FacettesCreuses(<Liste de faces>, <écart+i*mode>, [Faces éliminées])
Le mode prendrait les valeurs 0 pour creuser les faces comme la macro le faisait déjà, ou 1 pour creuser les faces de cette manière :
Je pense qu'on peut alors aboutir a de jolis polyèdres creusés...
En plus, en réitérant le procédé sur les facettes creusé que l'on récupère, on pourrait faire des polyèdre a faces "spiralées"!!! J'aimerais bien créer un icosidodécaèdre dont les faces pentagonales soit de ce style :
Re: PolyedresII.mac
Une proposition pour FacettesCreuses à tester (je n'ai pas trop le temps maintenant):
[Edit 21h30] Voilà, je viens de faire un test: après avoir chargé PolyedresII.mac et défini l'élément graphique:
PS: lorsque le mode vaut 1, alors le paramètre en partie réelle doit être en 0 et 1, il représente la portion de segment qui va être pris (et non une longueur). Je ne sais pas si c'est clair...
on obtient:
- Code:
[if %2=Nil then $ep:=0.25, $mode:=0 else ep:=Re(%2)/2, $mode:=Im(%2) fi,
if mode=0 then
MapBy(
[$A1:=Nil, $A2:=S[0,2],$A3:=S[1,2], $F:=Nil,
$aux:= Map3D([ A1:=A2, A2:=A3, A3:=Z,
if A1<>Nil then
$u:=normalize(A1-A2), $v:=normalize(A3-A2),
$ecart:=angle(u,v)/2,
$L:=ep/sin(ecart),
Insert(F,A2+L*normalize(u+v))
fi
], $Z, [S[3,0],S[1,2]]),
$compt:=0, $B:=Nil, Insert($interieur,[F,jump]),
Map3D( [Inc(compt,1), $A:=B, B:=$Z,
if A<>Nil then
A,B,F[2*compt-1,2], F[2*compt-3,2],jump
fi,
], Z, S),
B,Copy(S,1,2),F[1,2],F[2*compt-1,2]
],
S, %1, jump),
else
ep:=2*ep,
MapBy(
[$A1:=Nil, $A2:=S[1,2], $F:=Nil,
$aux:= Map3D([ A1:=A2, A2:=Z,
if A1<>Nil then
$u:=A2-A1,
Insert(F,A1+ep*u)
fi
], $Z, [S[3,0],S[1,2]]),
$compt:=0, $B:=Nil, Insert($interieur,[F,jump]),
Map3D( [Inc(compt,1), $A:=B, B:=$Z,
if A<>Nil then
B,F[2*compt-1,2], F[2*compt-3,2],jump
fi,
], Z, S),
Copy(S,1,2),F[1,2],F[2*compt-1,2]
],
S, %1, jump),
fi,
%3:=interieur]
[Edit 21h30] Voilà, je viens de faire un test: après avoir chargé PolyedresII.mac et défini l'élément graphique:
- Code:
[
background(full,beige),
P:=Icosidodecaedre([0,0],[5,0],penta,tri), nb:=15,
P:=penta[3,0], Q:=tri[3,0],
Y:=[0.74,1,0.7], R:=[0.75,0,0],
Build3D( for k from 1 to nb do
P:=FacettesCreuses(P, 0.1+i, aux),
C:=((nb-k)*R+k*Y)/nb,
[1,Rgb(C[1],C[2],C[3]) , P],
P:=aux, Re(jump)-i
od,
[1,darkgreen+0.7*i, P],
for k from 1 to nb do
Q:=FacettesCreuses(Q, 0.1+i, aux),
C:=((nb-k)*[0,0,0.75]+k*[1,0,0])/nb,
[1,Rgb(C[1],C[2],C[3]) , Q],
Q:=aux, Re(jump)-i
od,
[1,red+0.7*i,Q]
),
Display3D()
]
PS: lorsque le mode vaut 1, alors le paramètre en partie réelle doit être en 0 et 1, il représente la portion de segment qui va être pris (et non une longueur). Je ne sais pas si c'est clair...
on obtient:
Re: PolyedresII.mac
Parfait : je teste ca tout de suite...
Voici un premier test : certes, il est moins impressionnant que ce que tu viens de poster, mais bon : je le mets quand même.
C'est limpide : tu veux dire que l'écart n'est plus une longueur mais un taux t. Les facettes éliminées sont alors définies par les points barycentre de {(A_i, t), (A_i+1, 1-t)} ou [A_i, A_i+1] représente un coté de face. On retrouve simplement le paramétrage d'un segment! (je pense avoir été encore moinc clair que toi!!! )P.Fradin a écrit:PS: lorsque le mode vaut 1, alors le paramètre en partie réelle doit être en 0 et 1, il représente la portion de segment qui va être pris (et non une longueur). Je ne sais pas si c'est clair...
Voici un premier test : certes, il est moins impressionnant que ce que tu viens de poster, mais bon : je le mets quand même.
Re: PolyedresII.mac
Revoici deux tests ressemblant un peu au précédent, mais combinant les 2 modes de la macro FacettesCreuses. Dites moi ce que vous en pensez...
Re: PolyedresII.mac
Eh eh! On s'amuse bien à ce que je vois! Mon petit doigt me dit que les valeurs possibles pour le mode vont vite devoir dépassé la valeur 1...
En tous cas cela fait de bien belles figures! C'est une très bonne idée que tu as eue là!
En tous cas cela fait de bien belles figures! C'est une très bonne idée que tu as eue là!
Re: PolyedresII.mac
Ouais!!! J'avais imaginé égallement de creuser les faces avec des cercle de même centre que les faces avec un rayon compris entre 0 et le rayon du cercle inscrit aux faces mais c'est peut etre compliqué vu qu'un cercle est en fait une "grande" ligne polygonale.P.Fradin a écrit:Eh eh! On s'amuse bien à ce que je vois! Mon petit doigt me dit que les valeurs possibles pour le mode vont vite devoir dépassé la valeur 1...
J'ai même une autre idée un peu plus audacieuse!!! Sachant qu'une face comporte au moins 3 sommets, on peut définir pour chaque face un repère barycentrique avec trois sommets consécutifs d'une face (pour chaque face). On pourrait ainsi avoir un autre mode pour la macro FacettesCreuses :
FacettesCreuses(<Liste de faces>, 2*i, <[a1, b1, c1, a2, b2, c2, ..., an, bn, cn]>, [F])
La liste mis en 3ème argument correspond a des coordonnées barycentriques ; elle défini donc une ligne polygonale dont les sommets sont :
Bar{(A, a_i), (B, b-i), (C, c_i)}, i=1, ..., n, avec A, B, C trois sommets consécutifs de la faces que l'on traite.
Voici un exemple :
Voici le code me permettant de créer ce dessin :
- Code:
[
FillStyle:=full, FillColor:=orange,
$P:=polyreg(0, 1, 5),
Ligne(P, 1),
FillColor:=white,
$L:=[0.5, 0.5, 1, 12, 4,
1, -2, 2.7, -2, 3,
-1, -1, -2, 1, -1,
2, 2, 3, 6, -1],
$L':=CoordBar(P, L),
Ligne(L', 1)
]
- Code:
[
$R:=%1, $N:=Nops(R),
$L:=%2,
$k:=1,
while k<Nops(L) do
if L[k]=jump then
jump,
Inc(k, 1)
else
bary(Seq([R[j], L[k+j-1]], j, 1, N)),
Inc(k, N)
fi
od
]
Page 6 sur 7 • 1, 2, 3, 4, 5, 6, 7
Page 6 sur 7
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|