π
<-

Comment inverser les coordonées Y

Programmation et implémentation d'algorithmes.

Comment inverser les coordonées Y

Unread postby canomod74 » Yesterday, 19:19

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 :help:

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.

Image

Merci :)
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 🥲.
User avatar
canomod74
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 66.7%
 
Posts: 7
Joined: 29 Jan 2025, 22:05
Location: Haute-Savoie / ANNECY
Gender: Male
Calculator(s):
MyCalcs profile

Re: Comment inverser les coordonées Y

Unread postby critor » Yesterday, 19:35

Bonjour.

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)
C'est par exemple la nuance entre les fonctions RECT_P() et RECT().

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;
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42137
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Comment inverser les coordonées Y

Unread postby canomod74 » Yesterday, 21:55

Bonsoir,

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 :

Image

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 🥲.
User avatar
canomod74
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 66.7%
 
Posts: 7
Joined: 29 Jan 2025, 22:05
Location: Haute-Savoie / ANNECY
Gender: Male
Calculator(s):
MyCalcs profile

Re: Comment inverser les coordonées Y

Unread postby critor » Yesterday, 22:13

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.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42137
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Comment inverser les coordonées Y

Unread postby critor » Yesterday, 22:22

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).
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42137
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Comment inverser les coordonées Y

Unread postby critor » Yesterday, 22:47

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 :
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 :
Image

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;
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42137
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Comment inverser les coordonées Y

Unread postby canomod74 » Yesterday, 23:19

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 :#fou#:

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.

Image
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 🥲.
User avatar
canomod74
Niveau 2: MI2 (Membre Initié)
Niveau 2: MI2 (Membre Initié)
Level up: 66.7%
 
Posts: 7
Joined: 29 Jan 2025, 22:05
Location: Haute-Savoie / ANNECY
Gender: Male
Calculator(s):
MyCalcs profile


Return to Programmation

Who is online

Users browsing this forum: No registered users and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
852 utilisateurs:
>834 invités
>11 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)