Bonjour,
Dans un programme ou application sur HP Prime, comment peut-on définir un environnement graphique où le 0, 0 serait en bas à gauche et non pas en haut à gauche
Pour le moment j'ai contourné le problème en créant des fonctions intermédiaires qui inversent le y, mais si je pouvais définir de base un environnement avec le 0, 0 en bas à gauche celà simplifierai mes programmes.
Merci
Comment inverser les coordonées Y
7 posts
• Page 1 of 1
Comment inverser les coordonées Y
J'ai aussi une SHARP EL-9300 et une HP PRIME G2, et une feu HP 48 GX que j'adorais, mais problème au niveau de l'écran, irréparable 🥲.
-
canomod74
Niveau 2: MI2 (Membre Initié)- Posts: 7
- Joined: 29 Jan 2025, 22:05
- Location: Haute-Savoie / ANNECY
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Comment inverser les coordonées Y
Bonjour.
La HP Prime offre 2 variantes pour chaque fonction de tracé :
L'orientation graphique que tu décris me semble correspondre à ce dernier cas, donc il suffit juste de configurer le repère pour que les coordonnées entières correspondent bien aux différents pixels, et de n'utiliser ensuite que les fonctions de tracé qui ne sont pas suffixées d'un _P.
La HP Prime offre 2 variantes pour chaque fonction de tracé :
- une variante fonctionnant avec des coordonnées en pixels (origine en haut à gauche, orienté vers la droite et vers le bas)
- une variante fonctionnant dans un repère orthogonal direct à définir (mais orienté vers la droite et vers le haut)
L'orientation graphique que tu décris me semble correspondre à ce dernier cas, donc il suffit juste de configurer le repère pour que les coordonnées entières correspondent bien aux différents pixels, et de n'utiliser ensuite que les fonctions de tracé qui ne sont pas suffixées d'un _P.
- Code: Select all
Xmin:=0;
Xmax:=319;
Ymin:=0;
Ymax:=239;
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42137
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: Comment inverser les coordonées Y
Bonsoir,
Merci pour l'astuce, mais ça ne semble pas fonctionner correctement, je m'explique
Pour un environnement
L'affichage a l'écran ne couvre pas tout l'écran, cela laisse des bordures et tout l'espace d'environ 20 pixel réservé au menu du bas.
Il faut donc tricher pour couvrir tout l'espace mais cela étire l'espace graphique chaque pixel n'est plus représentatif de son emplacement réel.
Ainsi en tâtonnant sur les valeurs, j'arrive à avoir un affichage qui correspond à ce que je veux visuellement, mais c'est d'une part très compliqué d'arriver à placer les pixels où on veux vraiment.
De plus lorsque j'essai de parcourir avec une boucle FOR la plage Xmin -> Xmax et Ymin -> Ymax avec des pixels, il y'a des trous dans la raquette.
Ce qui visuellement donne ça :
avec ce code :
On voit que les coordonnées qui doivent être défini sont décalées (sur pout Ymin).
Si on défini Xmin = 0, Xmax= 319, Ymin = 0, Ymax = 239, alors il y'a un contour qui apparait + le menu du bas
A moins que je me sois trompé, j'ai l'impression que les fonction sans le _P ne sont pas fiable pour travaillé au pixel près.
Merci pour l'astuce, mais ça ne semble pas fonctionner correctement, je m'explique
Pour un environnement
- Code: Select all
Xmin := 0;
Xmax := 319;
Ymin := 0;
Ymax := 239;
L'affichage a l'écran ne couvre pas tout l'écran, cela laisse des bordures et tout l'espace d'environ 20 pixel réservé au menu du bas.
Il faut donc tricher pour couvrir tout l'espace mais cela étire l'espace graphique chaque pixel n'est plus représentatif de son emplacement réel.
Ainsi en tâtonnant sur les valeurs, j'arrive à avoir un affichage qui correspond à ce que je veux visuellement, mais c'est d'une part très compliqué d'arriver à placer les pixels où on veux vraiment.
De plus lorsque j'essai de parcourir avec une boucle FOR la plage Xmin -> Xmax et Ymin -> Ymax avec des pixels, il y'a des trous dans la raquette.
Ce qui visuellement donne ça :
avec ce code :
On voit que les coordonnées qui doivent être défini sont décalées (sur pout Ymin).
Si on défini Xmin = 0, Xmax= 319, Ymin = 0, Ymax = 239, alors il y'a un contour qui apparait + le menu du bas
- Code: Select all
EXPORT Demo_RECT()
BEGIN
LOCAL i, j, k;
Xmin:=1;
Xmax:=318;
Ymin:=21;
Ymax:=239;
DIMGROB(G1,319,239);
RECT(G1,#FFFFFF);
RECT(G1,0,1,10,11,RGB(0,255,0),RGB(255,0,0));
RECT(G1,0,239,9,230,RGB(255,0,0),RGB(0,255,0));
RECT(G1,308,229,318,239,RGB(255,0,0),RGB(0,0,255));
RECT(G1,308,1,318,11,RGB(255,0,0),RGB(128,0,128));
LINE(G1, 0, 1, 319, 239, RGB(55,55,55));
FOR k FROM 10 TO Ymax/2 STEP 20 DO
ARC(G1, Xmax/2, Ymax/2, k, {#CCCCCC});
END;
FOR i FROM 0 TO 318 STEP 1 DO
PIXON(G1, i, FLOOR(Ymax/1.5), #FF0000);
PIXON(G1, i, Ymax/2, #FF0000);
PIXON(G1, i, Ymax/3, #FF0000);
END;
FOR j FROM 0 TO 319 STEP 1 DO
PIXON(G1, FLOOR(Xmax/1.5), j, #000FF);
PIXON(G1, Xmax/2, j, #000FF);
PIXON(G1, Xmax/3, j, #000FF);
END;
BLIT(G0, G1);
WAIT();
END;
A moins que je me sois trompé, j'ai l'impression que les fonction sans le _P ne sont pas fiable pour travaillé au pixel près.
Last edited by canomod74 on 01 Feb 2025, 23:01, edited 3 times in total.
J'ai aussi une SHARP EL-9300 et une HP PRIME G2, et une feu HP 48 GX que j'adorais, mais problème au niveau de l'écran, irréparable 🥲.
-
canomod74
Niveau 2: MI2 (Membre Initié)- Posts: 7
- Joined: 29 Jan 2025, 22:05
- Location: Haute-Savoie / ANNECY
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Comment inverser les coordonées Y
canomod74 wrote:Merci pour l'astuce, mais ça ne semble pas fonctionner correctement, je m'explique
Pour un environnement
- Code: Select all
Xmin := 0;
Xmax := 319;
Ymin := 0;
Ymax := 239;
L'affichage a l'écran ne couvre pas tout l'écran, cela laisse des bordures et tout l'espace d'environ 20 pixel réservé au menu du bas.
ça devrait pourtant ; l'écran HP Prime fait très exactement 320*240 pixels, intégralement couverts par la fenêtre graphique.
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42137
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: Comment inverser les coordonées Y
Effectivement, si on peut bien dessiner sur tout l'écran, les bornes Xmin/Xmax/Ymin/Ymax semblent être liées à une zone plus restreinte de l'écran (moins des marges de 1 pixel à gauche et à droite ainsi que la hauteur du menu de bas d'écran).
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42137
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: Comment inverser les coordonées Y
Il y a donc une bizarrerie sur les bornes du repère, mais à part cela ça me semble être utilisable.
On définit les dimensions de l'écran :
Puis on configure les bornes du repère (avec Xmax=319 et non 318 selon mes tests) :
Et maintenant, astuce, on se définit les bornes de l'écran, seules bornes qui seront utilisées par la suite (et surtout pas celles du repère) :
Cela me semble fonctionner :
Et voici le code complet associé :
On définit les dimensions de l'écran :
- Code: Select all
LOCAL ecran_l, ecran_h;
ecran_l:=320;
ecran_h:=240;
Puis on configure les bornes du repère (avec Xmax=319 et non 318 selon mes tests) :
- Code: Select all
Xmin:=1;
Xmax:=ecran_l-1;
Ymin:=21;
Ymax:=ecran_h-1;
Et maintenant, astuce, on se définit les bornes de l'écran, seules bornes qui seront utilisées par la suite (et surtout pas celles du repère) :
- Code: Select all
LOCAL xmin, xmax, ymin, ymax;
xmin:=0;
xmax:=ecran_l-1;
ymin:=0;
ymax:=ecran_h-1;
Cela me semble fonctionner :
Et voici le code complet associé :
- Code: Select all
EXPORT Demo_RECT()
BEGIN
LOCAL ecran_l, ecran_h;
ecran_l:=320;
ecran_h:=240;
Xmin:=1;
Xmax:=ecran_l-1;
Ymin:=21;
Ymax:=ecran_h-1;
LOCAL xmin, xmax, ymin, ymax;
xmin:=0;
xmax:=ecran_l-1;
ymin:=0;
ymax:=ecran_h-1;
LOCAL l;
l:=10;
LOCAL i, j, k;
DIMGROB(G1,ecran_l,ecran_h);
RECT_P(G1,#FFFFFF);
RECT(G1,xmin,ymin,xmin+l,ymin+l,RGB(0,255,0),RGB(255,0,0));
RECT(G1,xmin,ymax,xmin+l,ymax-l,RGB(255,0,0),RGB(0,255,0));
RECT(G1,xmax-l,ymax-l,xmax,ymax,RGB(255,0,0),RGB(0,0,255));
RECT(G1,xmax-l,ymin,xmax,l,RGB(255,0,0),RGB(128,0,128));
LINE(G1, xmin, ymin, xmax, ymax, RGB(55,55,55));
FOR k FROM l TO ymax/2 STEP 2*l DO
ARC(G1, xmax/2, ymax/2, k, {#CCCCCC});
END;
FOR i FROM xmin TO xmax STEP 1 DO
PIXON(G1, i, FLOOR(ymax/1.5), #FF0000);
PIXON(G1, i, ymax/2, #FF0000);
PIXON(G1, i, ymax/3, #FF0000);
END;
FOR j FROM ymin TO ymax STEP 1 DO
PIXON(G1, FLOOR(xmax/1.5), j, #000FF);
PIXON(G1, xmax/2, j, #000FF);
PIXON(G1, xmax/3, j, #000FF);
END;
BLIT(G0, G1);
WAIT();
END;
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42137
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: Comment inverser les coordonées Y
Ah oui effectivement avec ton code ça fonctionne, du moins sur la calculatrice physique,
car sur l'émulateur, j'ai toujours un trou sur les lignes verticales et les bords des carrés du bas sont hors écran.
Si je met Ymin:=20; sur l'émulateur c'est à présent ok, mais sur la calculatrice j'ai une rangée de 1 pixel qui laisse apparaitre le menu
Peut-être de légères différences entre les versions logicielles et physique. Peut-être différences aussi entre les versions G1 et G2 de la calculatrice.
car sur l'émulateur, j'ai toujours un trou sur les lignes verticales et les bords des carrés du bas sont hors écran.
Si je met Ymin:=20; sur l'émulateur c'est à présent ok, mais sur la calculatrice j'ai une rangée de 1 pixel qui laisse apparaitre le menu
Peut-être de légères différences entre les versions logicielles et physique. Peut-être différences aussi entre les versions G1 et G2 de la calculatrice.
J'ai aussi une SHARP EL-9300 et une HP PRIME G2, et une feu HP 48 GX que j'adorais, mais problème au niveau de l'écran, irréparable 🥲.
-
canomod74
Niveau 2: MI2 (Membre Initié)- Posts: 7
- Joined: 29 Jan 2025, 22:05
- Location: Haute-Savoie / ANNECY
- Gender:
- Calculator(s):→ MyCalcs profile
7 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 3 guests