Arc

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Arc

Messagepar Arnaud » Mardi 18 Janvier 2011, 00:25

J'ai déjà dessiné plusieurs figures comportant des arcs, mais dans ce cas, je ne comprend pas le comportement : j'aimerais dessiner le petit arc et non le grand.

191cf7e5a86361adbe4c4fee0e70ab78.png

Code: Tout sélectionner
import geometry;
size(4cm,0);
dot("$C$",(4,-0.5),blue);
dot("$B$",(0,0),W,blue);
dot("$A$",(3,1),blue);
draw((4,-0.5)--(0,0));
draw((3,1)--(0,0));
draw("$\alpha$",arc((4,-0.5),(0,0),(3,1),1),W,green,Arrow);


Je me suis basé sur les exemples de Gaëtan, et surprise en lisant la doc du package de geometry : je ne trouve pas de fonction arc(point,point,point,real).
Donc j'ai dû raté quelque chose, ce qui ne serait pas étonnant vu ma fatigue. En tout cas, je ne serais pas contre l'une ou l'autre explication.

Merci !
Arnaud

Un peu d'info - Pyromaths
LaTeX - Exemples de formules LaTeX

Pas d'aide en MP (non plus)
Arnaud
Modérateur
 
Messages: 7115
Inscription: Lundi 28 Août 2006, 12:18
Localisation: Allemagne
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Arc

Messagepar GMaths » Mardi 18 Janvier 2011, 01:06

Sois rassuré : tu n'es pas le seul à bricoler avec les arcs !
Déjà, par rapport à ce que tu as pu lire dans les exemples, il faut faire attention à la version d'asymptote avec laquelle cela a été compilé... car justement la modification la plus récente de geometry.asy (de Philippe) concernait un problème sur les arcs... donc peut-être que je ne l'ai pas répercutée.

Ensuite... si on fait une recherche dans mon index déduit de asy.list (même s'il n'est pas fiable à 100%), on trouve beaucoup de choses :
  1. des fonctions arc qui renvoient un objet de type arc
  2. des fonctions arc qui renvoient un objet de type path
  3. des fonctions Arc qui renvoient un objet de type path

Il faudrait vérifier mais, je crois que les trois relèvent de trois extensions :
respectivement geometry, plain_arcs (chargée sans import) et graph.

Pourquoi ce bin's ?
Parce que JCBowman a bien voulu intégrer le package geometry.asy de Philippe... mais il a laissé subsister tout ce qu'il avait lui créé auparavant.
Donc l'extension geometry.asy ne contient pas toutes les fonctions de géométrie : elle contient ce que Philippe a pensé utile d'ajouter.

Je te propose :

1978d84817b6efcb654f84b5161066d6.png

Code: Tout sélectionner
import graph;
size(4cm,0);
pair pA=(3,1), pB=(0,0), pC=(4,-0.5);
dot("$B$",pB,W,blue);
dot("$A$",pA,blue);
dot("$C$",pC,blue);
draw(pA--pB--pC);
draw("$\alpha$",Arc(c=pB,z1=pC/2,z2=pA,true),green,Arrow);


à noter la présence du /2, qui permet de décider que le point de départ de l'arc est le milieu de [BC] :
Code: Tout sélectionner
z1=pC/2

Je te l'accorde : cela va bien car le point B a pour coordonnées (0,0)... et ce serait à revoir sinon.
Ce n'est pas difficile : il faudrait remplacer probablement par quelque chose du genre :
Code: Tout sélectionner
z1=(pB+3pC)/4
pour débuter l'arc au barycentre de (B,1)(C,3), avec un point B qui peut alors être de coordonnées quelconques.

De toutes les syntaxes, j'ai utilisé l'une des trois que l'on trouve dans graph.asy :
Code: Tout sélectionner
path Arc (pair c, explicit pair z1, explicit pair z2, bool direction=<default>, int n=<default>);



PS : je n'ai pas pu m'empêcher d'optimiser le code. :mrgreen:
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar GMaths » Mardi 18 Janvier 2011, 07:52

Après quelques heures de sommeil... une idée m'est venue : te suggérer la routine de Philippe de markers.asy

Code: Tout sélectionner
// Mark the oriented angle AOB counterclockwise with optional Label, arrows, and markers.
// With radius < 0, AOB-2pi is marked clockwise.
void markangle(picture pic=currentpicture, Label L="",
               int n=1, real radius=0, real space=0,
               pair A, pair O, pair B, arrowbar arrow=None,
               pen p=currentpen, filltype filltype=NoFill,
               margin margin=NoMargin, marker marker=nomarker)


1734da150d3a60906480239817dc6b1d.png

Code: Tout sélectionner
import geometry;
size(4cm,0);
point pA=(3,1), pB=(0,0), pC=(4,-0.5);
dot("$B$",pB,W,blue);
dot("$A$",pA,blue);
dot("$C$",pC,blue);
draw(pA--pB--pC);
markangle("$\alpha$",A=pC,O=pB,B=pA,radius=.8cm,green,arrow=Arrow());


Encore trois infos et une remarque :

  • markers.asy est automatiquement appelé par geometry.asy.
  • Une autre syntaxe de markangle se trouve dans geometry.asy :
    Code: Tout sélectionner
    void markangle(picture pic=currentpicture,
                   Label L="", int n=1, real radius=0, real space=0,
                   line l1, line l2,
                   arrowbar arrow=None, pen p=currentpen,
                   filltype filltype=NoFill,
                   margin margin=NoMargin, marker marker=nomarker)
  • J'avais mis des exemples de cette dernière syntaxe dans la section "Triangles et droites particulières".
  • Quitte à utiliser l'extension geometry... on pensera qu'on peut alors utiliser le type "pair évolué" de Philippe : le type point... qui permettra davantage de choses dans une figure complexe.

Je rappelle aux débutants qui passeront par là qu'il y a le type pair, natif, pour les couples.
Et l'extension geometry ajoute un certain nombre de structures évoluées en surcouche, dont les types point (et mass pour des points pondérés) :

List of structures
struct abscissa
struct arc
struct bqe
struct circle
struct conic
struct coordsys
struct ellipse
struct hyperbola
struct inversion
struct line
struct mass
struct parabola
struct point
struct segment
struct side
struct triangle
struct trilinear
struct vector
struct vertex


Classe point :
struct point
This structure replaces the pair to embed its coordinate system. For example, if 'P=point(cartesiansystem((1,2),i,j), (0,0))', P is equal to the pair (1,2).

dont les propriétés sont :
  • coordsys coordsys; // The coordinate system of this point.
  • restricted pair coordinates; // The coordinates of this point relatively to the coordinate system 'coordsys'.
  • restricted real x, y; // The xpart and the ypart of 'coordinates'.
  • real m=1; // Used to cast mass<->point.
  • void init(coordsys R, pair coordinates, real mass) // The constructor.

Lien important : la doc en français de ce qu'ajoute l'extension geometry.asy ! : http://svnweb.tuxfamily.org/filedetails.php?repname=piprim%2Fgeometrydoc&path=%2Fbranches%2Ffr%2Fgeometry_fr.pdf
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar GMaths » Mardi 18 Janvier 2011, 08:36

J'en rajoute une couche sur ce qu'apportent les objets de type point et mass de l'extension geometry par rapport à ceux de type pair...
... avec un exemple pour illustrer la notion de propriété d'une structure :

En console de notepad++, ceci :

Code: Tout sélectionner
import geometry;
point pA=(3,2);
write(pA.coordinates);
write(pA.x);
write(pA.y);
write(pA.m);

coordsys R=cartesiansystem((1,2),i=(1,0),j=(-1,1));
point pB=point(R,pA/R); // couple de coordonnées de pA dans le repère R
write(pB.coordinates);
write(pB.x);
write(pB.y);
write(pB.m);

mass pC=mass(pB,7); // point pondéré
write(pC.M.coordinates);
write(pC.m);


donne cela :

Code: Tout sélectionner
Process started >>>
(3,2)
3
2
1
(2,0)
2
0
1
(2,0)
7
<<< Process finished.


J'arrête de digresser. :mrgreen:
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar GMaths » Mardi 18 Janvier 2011, 08:52

GMaths a écrit:J'arrête de digresser. :mrgreen:
... avec un dernier coup de pub :

s'il fallait citer une raison principale de se mettre à Asymptote, je me demande si je ne citerais pas "la possibilité de faire de la programmation orientée objet" plutôt que le classique argument des "possibilités 3D".
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar c-top » Mardi 18 Janvier 2011, 09:18

GMaths a écrit:
GMaths a écrit:J'arrête de digresser. :mrgreen:
... avec un dernier coup de pub :

s'il fallait citer une raison principale de se mettre à Asymptote, je me demande si je ne citerais pas "la possibilité de faire de la programmation orientée objet" plutôt que le classique argument des "possibilités 3D".


Oui mais un objet qui doit encore beaucoup évolué...
c-top
Déca-utilisateur
 
Messages: 42
Inscription: Samedi 11 Juillet 2009, 19:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar GMaths » Mardi 18 Janvier 2011, 09:44

c-top a écrit:Oui mais un objet qui doit encore beaucoup évolué...

Tu penses à quoi en disant cela ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar c-top » Mardi 18 Janvier 2011, 10:57

2 ou 3 exemples en vrac (car je n'y ai pas vraiment réfléchi)
mais représentatifs d'un langage objet et qui sont des problèmes que
j'ai rencontrés

1) (mineur car question d'habitude) Lors de la création d'un struct (qui représente la classe en programmation Objet)
on doit faire très attention à l'ordre des méthodes que l'on déclare ce qui n'est pas le
cas en Objet, du coup le constructeur doit impérativement venir à la fin du struc s'il utilise
des méthodes du struct.

2) (majeur) un héritage difficile à mettre en place car pas de notion de classe abstraite, donc
des problèmes de typage et surtout de transtypage lourds à gérer avec des cast à n'en
plus finir si beaucoup de classes filles

3) (majeur) pas de notion d'interface pourtant indispensable dans ce type de langage, justement pour
éviter l'heritage à outrance que certains pratiquent.

4) problème de copy profonde d'une classe mais je crois avoir vu çà dans les TODO, il faut vérifier ou çà en est...

à méditer :mrgreen:
c-top
Déca-utilisateur
 
Messages: 42
Inscription: Samedi 11 Juillet 2009, 19:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar Arnaud » Mardi 18 Janvier 2011, 14:15

Merci Gmaths pour les précisions, naturellement tes solutions fonctionnent à merveille.
Concernant les différences entre pair et point, j'avais remarqué cela.

Enfin, la discussion sur la programmation avec asymptote mériterait sans doute un fil à part ( on peut splitter ce sujet ), mais honnêtement, je ne vois pas pour le moment l'intérêt de la POO là-dedans : la plupart des objets sont déjà définis, et ceux que l'on construit soi-même, on ne les utilise finalement pas tant que ça.
Arnaud

Un peu d'info - Pyromaths
LaTeX - Exemples de formules LaTeX

Pas d'aide en MP (non plus)
Arnaud
Modérateur
 
Messages: 7115
Inscription: Lundi 28 Août 2006, 12:18
Localisation: Allemagne
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar GMaths » Mardi 18 Janvier 2011, 17:47

Arnaud a écrit:Concernant les différences entre pair et point, j'avais remarqué cela.

Je me doutais bien que tu le savais... et je le disais surtout pour d'autres qui débuteraient.
J'aime à rappeler ce qu'apporte geometry et surtout qui l'a créé : Philippe qui a fait un travail remarquable.
JCBowman a intégré plusieurs extensions dans la distribution Asymptote dont il n'est pas forcément l'auteur...
... et dont il n'est pas bien sûr qu'il assure le suivi.
Je dirais même qu'il n'est pas bien sûr qu'il développe Asymptote en s'en souciant : il doit s'en remettre, je pense, aux auteurs des extensions... pour les tenir à jour en fonction de ce qu'il développe.
D'où ma précision sur les types pair et point, en ayant voulu rappeler la différence, qui m'a amené à parler brièvement de structure.

Arnaud a écrit:Enfin, la discussion sur la programmation avec asymptote mériterait sans doute un fil à part ( on peut splitter ce sujet )

Je ne crois pas non plus que ce soit nécessaire de mener de grands débats...
Arnaud a écrit:mais honnêtement, je ne vois pas pour le moment l'intérêt de la POO là-dedans, la plupart des objets sont déjà définis,
... même si là, je ne suis pas d'accord : les développements sur les arbres, les graphes, les tableaux de variation des uns et des autres... sont des preuves que l'on peut apporter des outils supplémentaires, en utilisant la notion d'objet et en définissant de nouveaux types.
Arnaud a écrit: et ceux que l'on construit soi-même, on ne les utilise finalement pas tant que ça.

Là, je répondrai que cela dépend des objets...
... mais pour répondre indirectement au message précédent sur les manques en matière de poo, je précise, par contre, que je ne vois pas quel pourrait être le volumineux projet qui fasse ressentir les manques décrits.
Même une extension comme celle de Philippe, assez conséquente en matière d'objets ne nécessitait pas de disposer de tous les artifices possibles de la POO : on ne va pas mourir pour quelques cast. :mrgreen:
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Arc

Messagepar c-top » Mardi 18 Janvier 2011, 19:40

Tout à fait d'accord cela est largement suffisant mais je ne faisais que répondre à la question
GMaths a écrit:Tu penses à quoi en disant cela ?
c-top
Déca-utilisateur
 
Messages: 42
Inscription: Samedi 11 Juillet 2009, 19:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité