Page 1 sur 3

À propos de la routine surface()

Posté : lun. 16 janv. 2012, 14:57
par Fabrice
Bonjour,
L'énoncé de l'exercice que je veux illustrer est le suivant :

Code : Tout sélectionner

Une galette circulaire de rayon 15 cm a été entamée depuis le centre. La part entamée est-elle inférieure, égale ou supérieure au quart de la galette ?

Je joins un dessin fait dans le plan de la galette :http://www.fileupyours.com/view/310238/part.pdf
AO = 15, OH = 7 et HC = 6.
Le code est le suivant :

Code : Tout sélectionner

import three;
size(7cm,0);
currentlight=nolight;
currentprojection=perspective(
camera=(-6.10285631430519,36.029455663151,4.5056187380542),
up=(0.00212394924123073,-0.0148253878706536,0.123534632293459),
target=(-3.50925769342241,-0.954817014611455,0.0225523065454158),
zoom=1,
angle=6.53206876661594,
autoadjust=false);
pair z1=(0,0);
real r=15, a1=-62.18, a2=-267.89;
path p=z1--arc(z1,r,a1,a2)--cycle;
path3 p3=path3(p,XYplane);
draw(surface(p3),lightgray,0.8bp+black);
draw(shift(0.8*Z)*surface(p3),lightgray,0.8bp+black);
draw(extrude(p,0.8*Z),lightgray,0.8bp+black);

On verra de suite le problème. De plus, je souhaiterais coder la figure à partir des indications ci-dessus.
Merci.

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 15:28
par GM
Puis-je repartir de zéro pour faire une proposition ?

Si les données sont celles précisées... je n'ai pas trop envie de voir ce genre de choses : a1=-62.18, a2=-267.89.

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 15:34
par GM
Fabrice a écrit :On verra de suite le problème.


Si le problème était celui des traits de trop sur les bases, le patch rapide est celui-ci :

remplacer :

Code : Tout sélectionner

draw(surface(p3),lightgray,0.8bp+black);
draw(shift(0.8*Z)*surface(p3),lightgray,0.8bp+black);

par :

Code : Tout sélectionner

draw(surface(p3),lightgray);
draw(p3,0.8bp+black);

draw(shift(0.8*Z)*surface(p3),lightgray);
draw(shift(0.8*Z)*p3,0.8bp+black);

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 15:44
par GM
(troisième partie de ma réponse)

Pour les cotations, je donne aussi une référence rapide pour dépanner rapidement : ce sujet.
On y suggère deux méthodes différentes : tout dépend... si c'est une figure destinée à être tournée ou pas.

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 17:21
par Fabrice
Salut,
GM a écrit :Puis-je repartir de zéro pour faire une proposition ?

Pourquoi tu ne pourrais pas ?

GM a écrit : je n'ai pas trop envie de voir ce genre de choses : a1=-62.18, a2=-267.89.

J'ai résolu l'exercice à la "manière" des élèves en faisant de la trigonométrie élémentaire, sans chercher la complication !

La figure n'est pas destinée à être bougée mais seulement à illustrer un énoncé de dns.

GM a écrit :
Fabrice a écrit :On verra de suite le problème.


Si le problème était celui des traits de trop sur les bases


Pourquoi ces traits en trop ?
En corrigant un peu mon code, il suffit de faire :

Code : Tout sélectionner

draw(surface(p3),white);
draw(shift(0.8*Z)*surface(p3),white);
draw(extrude(p,0.8*Z),white,0.8bp+red);

Merci.

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 17:39
par GM
Fabrice a écrit :Pourquoi ces traits en trop ?


Une surface est un ensemble de "carreaux" de Bezier de ce genre là :

Image


Une base de ta galette est constituée de deux carreaux. L'un des deux "pen" est pour les mettre en évidence.

Tu remplacerais :

Code : Tout sélectionner

draw(surface(p3),lightgray,0.8bp+black);

par ceci :

Code : Tout sélectionner

draw(surface(p3),nu=5,nv=2,lightgray,0.8bp+black);

et tu aurais chacun des deux carreaux (2 étant le minimum "obligatoire" dans ton exemple compte tenu de la complexité de ta base)...
Image

éclaté en 5x2 "carreaux" :
Image

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 17:52
par GM
GM a écrit :Une base de ta galette est constituée de deux carreaux.

Si tu te dis que :

"c'est bizarre : le "carreau" donné en exemple était défini à partir de 4 points...
alors que pour galette, il semble n'y avoir que trois points pour chacun des carreaux"

je te cite la doc :

Planar Bezier surfaces patches are constructed using Orest Shardt’s bezulate routine, which decomposes (possibly nonsimply connected) regions bounded (according to the zerowinding fill rule) by simple cyclic paths (intersecting only at the endpoints) into subregions bounded by cyclic paths of length 4 or less.


Tu auras lu la fin : "4 ou moins".

A propos de nu et nv :

The parameters nu and nv specify the number of subdivisions for drawing optional mesh lines for each Bezier patch.

Re: À propos de la routine surface()

Posté : lun. 16 janv. 2012, 18:16
par GM
Pour être complet... par rapport à ta question, voilà encore ce que tu peux obtenir avec ton code initial, sous acrobat-reader :

Image


Tu as le détail des parties qui constituent l'image prc... et tu peux les cocher-décocher.

Constate que les bases sont faites en deux parties... parties que j'appelle "carreaux", que la doc appelle "patch"... et qui s'appelle bizarrement "node" dans acrobat-reader.

Re: À propos de la routine surface()

Posté : jeu. 19 janv. 2012, 15:38
par GM
Ai-je rêvé... ou ai-je bien lu depuis mon smartphone au lycée... qu'il y avait une relance qui a disparu.
Le problème serait-il réglé ? :roll:

Re: À propos de la routine surface()

Posté : jeu. 19 janv. 2012, 15:54
par Fabrice
Salut,
Tout d'abord, je te remercie pour toutes ces explications supplémentaires (ce que je précisais dans le message qui a disparu !).

GM a écrit :Ai-je rêvé... ou ai-je bien lu depuis mon smartphone au lycée... qu'il y avait une relance qui a disparu.

Donc, tu n'a pas rêvé !
En fait, j'ai essayé autre chose sans que cela soit très convaincant. La figure ne doit pas être manipulée, j'ai donc essayé avec la routine distance() en compilant de cette manière :

Code : Tout sélectionner

asy -V -noprc -render=0 -f pdf fichier.asy

Le résultat est surprenant !
J'ai donc retiré le message pour essayer de comprendre ce qui s'est passé, mais je n'ai pas encore eu le temps de me pencher sur le problème.