probleme sur slib : draw/repere & draw/convpixel

Accueil Forums Programmation WIMS Programmation d’exercices OEF probleme sur slib : draw/repere & draw/convpixel

Étiqueté : 

Vous lisez 3 fils de discussion
  • Auteur
    Messages
    • #2344
      Joël
      Participant
      Up
      0
      Down
      ::

      Bonjour,

      Suite à l’usage de draw/repere permettant de tracer un repère mathématique avec une marge, je souhaite placer des points dans ce repère par le biais de draw/convpixel qui convertit les pixels en coordonnées du repère, j’essaye donc de les faire travailler ensemble mais je rencontre quelques soucis.

      Mon bout de programme est le suivant: je trace un repère de -5 à 5 en x et y avec une marge de 20 et j’essaye de placer des points sur ce repère.
      Ce qui avec l’exemple ci dessous ne fonctionne pas.
      Apparemment, le paramètre de bordure de convpixel et le paramètre marge de repere ne semblent pas renvoyer à la même signification.
      Pour que cela fonctionne il faudrait mettre une bordure à 0 pour le point 0,0 et des valeurs différentes (la valeur de la marge \m) pour un point et d’autres valeurs pour d’autres points ce qui n’est pas logique.

      \integer{h=400} \comment{taille horizontale du dessin}
      \integer{v=400} \comment{taille verticale du dessin}
      \integer{m=20} \comment{marge du dessin}
      \real{xmin=-5} \comment{abscisse mini}
      \real{xmax=5} \comment{abscisse maxi}
      \real{ymin=-5} \comment{ordonnée mini}
      \real{ymax=5} \comment{ordonnée maxi}
      \text{A=slib(draw/repere \h,\v,\m,\xmin,\xmax,\ymin,\ymax,1,1,black,grey)}
      \text{conv1=slib(draw/convpixel 0,0,\h,\v,\xmin,\xmax,\ymin,\ymax,0,pixels)}
      \text{conv2=slib(draw/convpixel 5,-5,\h,\v,\xmin,\xmax,\ymin,\ymax,\m,pixels)
      \statement{
      <H1 ALIGN=JUSTIFY> Le titre </H1>
      \draw{500,500}{
      \A
      circle \conv1[1],\conv1[2],10,blue \comment{point au centre}
      circle \conv2[1],\conv2[2],10,brown \comment{point en 5 , -5}
      }
      }

      N.B.1: il me semble qu’il y ait une inversion sur la signification de l’option pixels de la slib convpixel
      N.B.2: j’aurais pu éviter le problème en utilisant les slib graphpaper/millimetre et graphpaper/func mais je voulais d’abord résoudre mon problème d’usage de convpixel
      N.B.3: D’ailleurs serait-il possible d’éclaircir les différences entre slib(graphpaper/millimetre millimetre correct_milli ?

      Bien cordialement.
      Et encore merci pour le travail effectué et ce superbe outil.

    • #2393
      eric
      Participant
      Up
      0
      Down
      ::

      Bonjour,

      Oui, le problème est dans la documentation de la slib. Les formules utilisées sont les suivantes si les paramètres sont x,y,sizex,sizey,x1,x2,y1,y2,b,option :

      s’il n’y a pas d’option pixel, on renvoie
      (x2-x1)/(sizex) * (x+b) + x1 , -(y2-y1)/sizey * (y+b) + y2

      s’il y a une option pixel, on renvoie
      round(sizex*(x-x1)/(x2-x1)-b) , round(sizey*(-y+y2)/(y2-y1) - b)

      Donc effectivement, comme tu le dis dans ton N.B.1, l’option pixel convertit des coordonnées du repère mathématique vers les pixels de l’image et non l’inverse.

      A noter la petite différence (signe et x1<-->y2) entre le traitement des abscisses et celui des ordonnées, dû au fait que pour l’image les ordonnées vont de haut en bas : l’origine de l’image est en HAUT à gauche.

      Les paramètres 3 et 4 (sizex et sizey) sont en pixels.
      Les paramètres 5,6,7,8,9 (x1,x2,y1,y2,b) sont dans les coordonnées mathématiques du repère. Le paramètre b est juste un décalage (changement d’origine) de même amplitude en x et en y.

      Les paramètres 1 et 2 (x et y) DEPENDENT de l’option. S’il n’y a pas d’option, ce sont les coordonnées mathématiques du point dont on cherche la place en pixels dans l’image. S’il y a l’option pixels, x et y sont des nombres de pixels par rapport au coin origine de l’image et la valeur renvoyée est les coordonnées dans le repère.

      Je ne réponds pas aux autres questions faute de temps pour l’instant, désolé.

      Eric

    • #2395
      eric
      Participant
      Up
      0
      Down
      ::

      Ah zut, j’ai fait la même inversion que celle de la doc !

      Les paramètres 1 et 2 (x et y) DEPENDENT de l’option. S’il n’y a pas d’option, ce sont les coordonnées mathématiques du point dont on cherche la place en pixels dans l’image. S’il y a l’option pixels, x et y sont des nombres de pixels par rapport au coin origine de l’image et la valeur renvoyée est les coordonnées dans le repère.

      Il fallait lire : S’il y a l’option pixels, ce sont les coordonnées mathématiques du point dont on cherche la place en pixels dans l’image. S’il n’y a pas d’option, x et y sont des nombres de pixels par rapport au coin origine de l’image et la valeur renvoyée est les coordonnées dans le repère.

      Eric

    • #2406
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      En fait, une possibilité est la suivante (mais fais le avec la bordure nulle,
      et un repère symétrique (-a,a pour le xrange et le yrange) car il y a je pense
      un bogue dans ce dernier cas si cela n’est pas « symétrique).
      rajoutes après le code que fournit la slib
      xrange -5,5
      yrange -5,5
      puis le code à rajouter par exemple
      plot red , sin(x).
      Flydraw calcule à partir de là en coordonnées mathématiques, même si avant
      le calcul est fait en pixels comme le fait la slib reperer.

      Bien sûr le -5,5 doit être les paramètres fournis à la slib.

      Bernadette

Vous lisez 3 fils de discussion
  • Vous devez être connecté pour répondre à ce sujet.