Page 1 sur 1

intersectionpoints : erreur de segmentation

Posté : mar. 5 nov. 2013, 22:36
par maurice
Bonsoir,

je souhaitais faire un dessin tout simple sur la médiatrice et sa construction au compas. Pour tracer cette dernière je pensais utiliser intersectionpoints mais voila :

Figure asymptote 7a8f000ba44224a99b7210d79d058f07
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import geometry;
  2. size(5cm);
  3.  
  4. pair pA=(0,0), pB=(2,0);
  5. draw(pA--pB);
  6. path c1=arc(pA, 1.5, -100, 100);
  7. path c2=arc(pB, 1.5, 80, 280);
  8. draw(c1, gray);
  9. draw(c2, gray);
  10.  
  11. // point[] pt=intersectionpoints(c1, c2);
  12. // draw(line(pt[0], pt[1]), dashed);
  13. dot("$A$", pA, W);
  14. dot("$B$", pB, E);


Si je decommente les lignes

Code : Tout sélectionner

// point[] pt=intersectionpoints(c1, c2);
// draw(line(pt[0], pt[1]), dashed);


j'ai une erreur de segmentation.

Code : Tout sélectionner

$ asy geometrie-mediatrice.asy
Erreur de segmentation (core dumped)


Y'a-t-il un erreur dans le code ?
Sinon, y a-t-il le même problème chez vous ?

Merci

Bruno

PS : bien sur, dans mon cas, c'est très simple de se passer de intersectionpoints...

Re: intersectionpoints : erreur de segmentation

Posté : mer. 6 nov. 2013, 11:22
par GM
Bonjour,
je suis occupé de réinstaller mon poste de travail principal après l'achat de ceci... et je n'en suis pas encore arrivé à l'étape de réinstallation d'Asymptote et des plugins qui vont bien avec Notepad++ pour l'utiliser. Donc si personne ne répond avant, je ferai le test plus tard dans la journée.

Re: intersectionpoints : erreur de segmentation

Posté : mer. 6 nov. 2013, 12:34
par chellier
Bonjour Bruno,

Chez moi (ubuntu, 2.24svn-r5568), je n'ai pas d'erreur de segmentation, mais ça ne compile pas non plus, j'ai arreté la compilation au bout de plusieurs minutes...

j'ai essayé avec la fonction Arc de graph : même problème.

Par contre en utilisant les types de geometry.asy, ça compile.

Figure asymptote 82285091b6f037b87109c3bdcf965fc1
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import geometry;
  2. size(5cm);
  3.  
  4. point pA=(0,0), pB=(2,0);
  5. draw(pA--pB);
  6.  
  7. circle c1=circle(pA, 1.5);
  8. circle c2=circle(pB, 1.5);
  9.  
  10. arc ac1=arc(c1, -100, 100);
  11. arc ac2=arc(c2, 80, 280);
  12.  
  13. draw(ac1, gray);
  14. draw(ac2, gray);
  15.  
  16. point[] pt=intersectionpoints(c1, c2);
  17. draw(line(pt[0], pt[1]), dashed);
  18. dot("$A$", pA, W);
  19. dot("$B$", pB, E);


Ou encore en utilisant pair[] au lieu de point[]

Figure asymptote d8420bcb0996f62770fb8514cdae30a7
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import geometry;
  2. size(5cm);
  3.  
  4. pair pA=(0,0), pB=(2,0);
  5. draw(pA--pB);
  6. path c1=arc(pA, 1.5, -100, 100);
  7. path c2=arc(pB, 1.5, 80, 280);
  8. draw(c1, gray);
  9. draw(c2, gray);
  10.  
  11. pair[] pt=intersectionpoints(c1, c2);
  12. draw(interp(pt[0],pt[1],-.2)--interp(pt[0],pt[1],1.2), dashed);
  13. dot("$A$", pA, W);
  14. dot("$B$", pB, E);


Il faut apparemment faire attention à ne pas trop mélanger les différents types...
Je n'ai pas d'explications plus précises, désolé !

Christophe

Re: intersectionpoints : erreur de segmentation

Posté : mer. 6 nov. 2013, 14:11
par GM
J'ai comme l'impression qu'il y a une erreur dans geometry.asy :

Dans la définition suivante du transtypage d'un pair[] en un point[]

Code : Tout sélectionner

point[] operator cast(pair[] p)
{/*<asyxml></code><documentation>Cast pair[] to point[] relatively to the current coordinate
   system 'currentcoordsys'.</documentation></operator></asyxml>*/
  pair[] op;
  for (int i = 0; i < p.length; ++i) {
    op.push((point)p[i]);
  }
  return op;
}


je verrai bien le changement de

Code : Tout sélectionner

  pair[] op;
en

Code : Tout sélectionner

  point[] op;
.

Mais c'est bizarre qu'il y aurait une telle erreur depuis si longtemps... sans qu'il n'y ait eu d'autres problèmes rencontrés avant.

Re: intersectionpoints : erreur de segmentation

Posté : mer. 6 nov. 2013, 15:02
par GM
GM a écrit :Mais c'est bizarre qu'il y aurait une telle erreur depuis si longtemps... sans qu'il n'y ait eu d'autres problèmes rencontrés avant.


Philippe est aussi étonné que moi :

En réponse à un mail, Philippe a écrit :Salut Gaétan,

Merci pour la remontée ; ça me paraît incroyable comme bug depuis le temps…

Il y a peut-être eu un changement au niveau de la façon de caster puisque la fonction est définie comme retournant un point[] alors que le return fait un retour de pair[]…
Je suis persuadé que ça marchait avant, pas possible autrement.

Je regarde dès que possible, pas avant ce wk, suis au boulot là…

Re: intersectionpoints : erreur de segmentation

Posté : mer. 6 nov. 2013, 20:40
par maurice
Bonsoir, merci pour vos réponses.
On attend donc le week-end !
Bruno

Re: intersectionpoints : erreur de segmentation

Posté : jeu. 19 déc. 2013, 21:36
par OG
Bonsoir

J'ai testé une ancienne version d'Asymptote (vers la 2.00 ou un svn de 2010)
et le même problème subsiste.
Je n'ai pas eu le courage de tester la compilation de la doc et des exemples
qui vont avec.
Vu l'extrait de code de Gaëtan (et sa suggestion), je ne suis pas sûr que
le bug soit nouveau. Peut-être est-il passé au travers des mailles ?

O.G.

Re: intersectionpoints : erreur de segmentation

Posté : ven. 20 déc. 2013, 12:37
par YoungFrog
L'erreur de segmentation est une erreur de "stack overflow" je suppose, au vu de la doc :
As in C++, infinite nested recursion will generate a stack overflow (reported as a segmentation fault, unless a fully working version of the GNU library libsigsegv (e.g. 2.4 or later) is installed at configuration time).


En tout cas, j'ai testé avec la version de "asy" qui se trouve dans texlive 2010 jusque texlive 2013, et j'ai une segfault à chaque fois :

Code : Tout sélectionner

$ ASYMPTOTE_DIR=/usr/local/texlive/2010/texmf/asymptote /usr/local/texlive/2010/bin/i386-linux/asy ~/tmp/test.asy
/usr/local/texlive/2010/texmf/asymptote/geometry.asy: 245.1: runtime: Stack overflow or segmentation fault: rerun with -nothreads
Abandon (core dumped)
$ ASYMPTOTE_DIR=/usr/local/texlive/2010/texmf/asymptote /usr/local/texlive/2010/bin/i386-linux/asy -nothreads ~/tmp/test.asy
/usr/local/texlive/2010/texmf/asymptote/geometry.asy: 245.1: runtime: Stack overflow
Abandon (core dumped)
$ ASYMPTOTE_DIR=/usr/local/texlive/2011/texmf/asymptote /usr/local/texlive/2011/bin/i386-linux/asy ~/tmp/test.asy
Erreur de segmentation (core dumped)
$ ASYMPTOTE_DIR=/usr/local/texlive/2012/texmf/asymptote /usr/local/texlive/2012/bin/i386-linux/asy ~/tmp/test.asy
Erreur de segmentation (core dumped)
$ ASYMPTOTE_DIR=/usr/local/texlive/2013/texmf-dist/asymptote /usr/local/texlive/2013/bin/i386-linux/asy ~/tmp/test.asy
Erreur de segmentation (core dumped)


Et bien sûr (c'est facile de dire "bien sûr", quand le boulot est fait :)) la solution de GM résout cela (enfin, j'ai juste testé sur la version svn, pas sur les ancienens). Bizarre que ça n'ait pas été corrigé dans le dépôt svn, d'ailleurs, non ? Ou alors je ne suis pas à jour ?

Re: intersectionpoints : erreur de segmentation

Posté : sam. 21 déc. 2013, 15:35
par OG
Bonjour

Bravo pour les tests. Comme de plus en utilisant les types de geometry.asy
tout fonctionne correctement, cela confirmerait un bug.
Si tout fonctionne bien (la doc par exemple et les figures de celles et
ceux qui utilisent geometry) avec le changement que verrait bien Gaëtan
et en fonction du temps de tous, on peut toujours proposer cette modification
de geometry.asy dans le svn d'asymptote, via Philippe (s'il a le temps,
sinon par mail à John, paraîtrait-même que j'ai les autorisations).

@Gaëtan : alors ton SSD ça donne quoi ?

Joyeuses fêtes de fin d'année
O.G.