Accueil › Forums › Programmation WIMS › Programmation d’exercices OEF › probleme sur slib : draw/repere & draw/convpixel
Étiqueté : repere convpixel
- Ce sujet contient 3 réponses, 3 participants et a été mis à jour pour la dernière fois par bernadette, le il y a 9 années et 7 mois.
-
AuteurMessages
-
-
28 juin 2014 à 10:46 #2344JoëlParticipant::
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. -
10 juillet 2014 à 18:33 #2393ericParticipant::
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
-
10 juillet 2014 à 21:34 #2395ericParticipant::
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
-
8 août 2014 à 05:31 #2406bernadetteMaître des clés::
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
-
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.