Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » blibiothèque de fonctions en C.Basic
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

blibiothèque de fonctions en C.Basic

Posté le 24/01/2019 19:30

Bonjour les casionautes!!!

aujourd'hui je suis fiers de vous présenter un projet que j'ai à peine commencé mais dont je suis très fiers... suspense...
une bibliothèque de fonctions en C.Basic pour graphs 90+e... je vois quelques déçus... (merci sentaro21 pour ce magnifique interpréteur de Basic)


si je fait cette bibliothèque que sur la fameuse graph 90+e (et toutes celle qui supporte la même version de C.Basic), c'est parce que le thème des fonctions de cette bibli est portées sur... les couleurs et les dégradés !!!

liste des fonctions
Cliquer pour enrouler
Circle
Cliquer pour enrouler

la fonction c'est :
{coordonnée x du centre,coordonnée y du centre, rayon, Red de départ, Green de départ, Blue de départ, Red d'arrivé, Green d'arrivé, Blue d'arrivé, angle de départ, épaiseur}→List Ans:Prog  "_Circle"


ce qui donne :
.

F-Line
Cliquer pour enrouler

la fonction c'est :
{coordonnée x de départ,coordonnée y de départ, coordonnée x d'arrivée, coordonnée y d'arrivée, Red de départ, Green de départ, Blue de départ, Red d'arrivé, Green d'arrivé, Blue d'arrivé, épaiseur}→List Ans:Prog "_F-Line"


ce qui donne :
.

Text
Cliquer pour enrouler

la fonction c'est :
{coordonnée x de départ,coordonnée y de départ, Red de départ, Green de départ, Blue de départ, Red d'arrivé, Green d'arrivé, Blue d'arrivé, épaiseur}→List Ans:"/*texte*/"→Str 1:Prog "_Text"


ce qui donne :
.


le tout donne ça :
.

puisque je suis sympa je m'apprend un truc , je vous laisse les programme C.Basic qui font les fonctions dans le fichier joint, pour que vous puissiez voir que je suis un énorme bourrin niveau code

si vous voulez m'aider, vous pouvez (en me conseillant ou en optimisant mon code par exemple) et sinon, la fonction que je vais commencer va faire des carrés et des rectangles tout zoli
(en fait, avant ça, je vais faire des lignes, pour m'entrainer entre autre...)

Cordialement,
votre cher Manolo

Fichier joint


Pages : 1, 2Suivante
LephenixnoirEn ligneAdministrateurPoints: 15226 Défis: 136 Message

Citer : Posté le 24/01/2019 20:59 | #


Oooh... pas mal cette idée.

Que dis-tu de donner un nom bien fixé à ta bibliothèque et de le mettre en préfixe de tes noms de programmes ? Ça évitera les collisions avec les noms de sous-programmes de tes utilisateurs dans le futur. Par exemple, si tu appelles ta bibliothèque "Manolo's C.Basic Library" (au hasard) tu peux appeler ton programme MCL_Cercle (plus de 8 caractères ça passe ?).


@Sentaro21, something for you now!

Are you working with the linear or gamma color space? Do you have any code to manage this specifically? The gradient on the screenshots looks pretty good but I'd be surprised if the calculator worked in linear mode.

This is also something I'm concerned about because I'm planning on doing some blending graphics in the future and I need to heed for gamma properly.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 24/01/2019 21:38 | #


Pas con, je teste, et désolé si j'ai pas suivi ton conseil et d'utiliser le gama (dans la shout, hier).

Ajouté le 24/01/2019 à 21:25 :
C'est 8 caractères max... (Pour le nom du prgm)

Ajouté le 25/01/2019 à 00:39 :
Mince, j'ai fais une erreur dans mon code, je vais le corriger demain mais en attendant, je vous donne le truc, dans le programme, dans les lignes 1, 2 et 3, à un moment, il y a "240-:-", il faut le remplacer par "235-:-". Déso.
Sentaro21Hors ligneMembrePoints: 521 Défis: 0 Message

Citer : Posté le 25/01/2019 09:13 | #


@Manolo
Thanks for C.Basic application!
It is a very beautiful gradation.
It may be easier to calculate the gradation using HSV or HSL.

To change the drawing thickness, please use the ML command.
(_Point X,Y,Width or _FillCircle X,Y,Radius)

// Radius->List Ans[11]
RGB(List Ans[4],List Ans[5],List Ans[6])
_FillCircle (List Ans[1]+List Ans[3]sin (U)),(List Ans[2]-List Ans[3]cos (U)),List Ans[11]




@Lephenixnoir
Yes!
C.Basic supports only linear scale of RGB888.
However, the accuracy is in the range of RGB565.


// d=RGB565 to RGB888(r,g,b)
b = ((d & 0x001F) << 3);
g = ((d & 0x07E0) >> 3);
r = ((d & 0xF800) >> 8);

//RGB888(r,g,b) to RGB565
RGB565 = ((r<<8)&0xF800) | ((g<<3)&0x7E0) | ((b>>3)&0x1F);



HSV and HSL are processed with RGB888.
Cliquez pour découvrir
Cliquez pour recouvrir


void hsv2rgb( int H, int S, int V, int *R, int *G, int *B ){    //  h:0~359  s:0~255  v:0~255  ->RGB(0~255)
    int max,min;
    max = V;
    min = ((max*255)-(S*max)+128)/255;
    if ( H<= 60 ) {
        *R = max;
        *G = ((H)*(max-min)+min*60+30)/60;
        *B = min;
    } else
    if ( H<=120 ) {
        *R = ((120-H)*(max-min)+min*60+30)/60;
        *G = max;
        *B = min;
    } else
    if ( H<=180 ) {
        *R = min;
        *G = max;
        *B = ((H-120)*(max-min)+min*60+30)/60;
    } else
    if ( H<=240 ) {
        *R = min;
        *G = ((240-H)*(max-min)+min*60+30)/60;
        *B = max;
    } else
    if ( H<=300 ) {
        *R = ((H-240)*(max-min)+min*60+30)/60;
        *G = min;
        *B = max;
    } else {
        *R = max;
        *G = min;
        *B = ((360-H)*(max-min)+min*60+30)/60;
    }
}

void hsl2rgb( int H, int S, int L, int *R, int *G, int *B ){    //  H:0~359  s:0~255  v:0~255  ->RGB(0~255)
    int max,min;
    if ( L<128 ) {
        max = ((L*255)+L*S+128)/255;
        min = ((L*255)-L*S+128)/255;
    } else {
        max = ((L*255)+(255-L)*S+128)/255;
        min = ((L*255)-(255-L)*S+128)/255;
    }
    if ( H<= 60 ) {
        *R = max;
        *G = ((H)*(max-min)+min*60+30)/60;
        *B = min;
    } else
    if ( H<=120 ) {
        *R = ((120-H)*(max-min)+min*60+30)/60;
        *G = max;
        *B = min;
    } else
    if ( H<=180 ) {
        *R = min;
        *G = max;
        *B = ((H-120)*(max-min)+min*60+30)/60;
    } else
    if ( H<=240 ) {
        *R = min;
        *G = ((240-H)*(max-min)+min*60+30)/60;
        *B = max;
    } else
    if ( H<=300 ) {
        *R = ((H-240)*(max-min)+min*60+30)/60;
        *G = min;
        *B = max;
    } else {
        *R = max;
        *G = min;
        *B = ((360-H)*(max-min)+min*60+30)/60;
    }
}

void rgb2hsv( int R, int G, int B, int *H, int *S, int *V ){    //  RGB(0~255) ->  H:0~359  S:0~255  V:0~255
    int max,min;
    max = R;
    if ( G > max ) max = G;
    if ( B > max ) max = B;
    min = R;
    if ( G < min ) min = G;
    if ( B < min ) min = B;
    if ( R==max ) *H = (G-B)*60/(max-min);
    else
    if ( G==max ) *H = (B-R)*60/(max-min)+120;
    else
    if ( B==max ) *H = (R-G)*60/(max-min)+240;
    if ( *H < 0 ) *H += 360;

    *S = (max-min)*255/max;
    *V = max;
}

void rgb2hsl( int R, int G, int B, int *H, int *S, int *L ){    //  RGB(0~255) ->  H:0~359  S:0~255  L:0~255
    int max,min;
    max = R;
    if ( G > max ) max = G;
    if ( B > max ) max = B;
    min = R;
    if ( G < min ) min = G;
    if ( B < min ) min = B;
    if ( R==max ) *H = (G-B)*60/(max-min);
    else
    if ( G==max ) *H = (B-R)*60/(max-min)+120;
    else
    if ( B==max ) *H = (R-G)*60/(max-min)+240;
    if ( *H < 0 ) *H += 360;

    *L = (max+min)/2;
    if ( *L < 128 ) {
        *S = ((max-min)*255)/(max+min);
    } else {
        *S = ((max-min)*255)/(510-max-min);
    }
}


Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
LephenixnoirEn ligneAdministrateurPoints: 15226 Défis: 136 Message

Citer : Posté le 25/01/2019 17:52 | #


That's nice, well done!

As I mentioned above, it would be very useful, I believe, to allow programs with names longer than 8 characters. Do you think this would be possible?
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 25/01/2019 18:15 | #


sorry @sentaro21 but as with a lot of graphical functions in C.Basic, it doesn't appear during a loop.

Ajouté le 25/01/2019 à 18:09 :
otherwise, just with the "circle" function, it works.
Sentaro21Hors ligneMembrePoints: 521 Défis: 0 Message

Citer : Posté le 26/01/2019 06:55 | #


@Lephenixnoir
The specification of the file name is based on the specification of the monochrome version.
In the future I would like to update it according to the specifications of the CG series OS(similar to FAT32).


@Manolo
The most of all extended graphics commands are not transferred to the LCD screen after command execution.
Therefore, the following commands are required for display LCD screen.

// Transfer 0 to 191 lines.
PutDispDD
// Transfer -24 to 191 lines.
_DispVram

The difference between these two commands is,
PutDispDD does not include the status line, but _DispVram transfers full screen.

If you add a semicolon at the end, the refresh rate will be controlled.
It is possible to prevent wasteful transfer.
(Normal 90+E/CG50 can only transfer about 90fps.)

// Transfer 0 to 191 lines with refresh rate controll.
PutDispDD;
// Transfer -24 to 191 lines with refresh rate controll.
_DispVram;

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 26/01/2019 11:26 | #


ah, okay....

Ajouté le 27/01/2019 à 11:56 :
une MàJ de la fonction cercle arrive cet aprèm et une fonction line arrive bientôt.
Sentaro21Hors ligneMembrePoints: 521 Défis: 0 Message

Citer : Posté le 27/01/2019 14:04 | #


Je suis impatient d'y être.

Un indice pour en faire une bibliothèque complète.
Les variables utilisées uniquement dans les sous-programmes peuvent être des variables locales.
// sub program
Local A,B,C,x,y,z

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 27/01/2019 21:45 | #


c'est bon, j'ai fait la MàJ du topic ! je devais la faire cet après-midi normalement...

Ajouté le 27/01/2019 à 21:29 :
ah yes ! thank you sentaro21 !

Ajouté le 28/01/2019 à 17:38 :
Je viens de remarquer, mais il y a une sorte de rond bizarre à la fin du tracé, invisible quand le cercle est fin mais trop visible quand le cercle est épais... Si quelqu'un a une solution (je pense que Sentaro21 en a une )
LephenixnoirEn ligneAdministrateurPoints: 15226 Défis: 136 Message

Citer : Posté le 28/01/2019 18:03 | # | Fichier joint


Tu veux parler de ça ?

KikoodxHors ligneMembrePoints: 1285 Défis: 7 Message

Citer : Posté le 28/01/2019 18:39 | #


C'est une bonne idée ! À quand les lignes toutes simples ?
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 28/01/2019 19:02 | #


@Lephenixnoir
C'est exactement ça !

@Kikoodx
Hein? Remplacer les rond (qui composent le rond rond-ception !) par des lignes ? Pas con...
LephenixnoirEn ligneAdministrateurPoints: 15226 Défis: 136 Message

Citer : Posté le 28/01/2019 19:08 | #


Ça a l'air d'être parce que tu repasses au même endroit dans une couleur différente. Si les couleurs de début et de fin sont rigoureusement les mêmes, ça ne devrait pas se voir.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 28/01/2019 20:48 | #


C'est déjà le cas, c'est bizarre... omg
Sentaro21Hors ligneMembrePoints: 521 Défis: 0 Message

Citer : Posté le 29/01/2019 08:29 | # | Fichier joint


I tried using _Line command instead of Circle command.
How about this one?


[Fichier joint] _Circle2.zip
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 29/01/2019 18:30 | #


I noticed that PutDispDD function does not allow to erase everything from graphic screen, is this normal?
Sentaro21Hors ligneMembrePoints: 521 Défis: 0 Message

Citer : Posté le 30/01/2019 00:38 | #


Yes.
It transfers only the area used by Basic Casio by default.
However it can select the transfer area,
You can also transfer the full screen.
PutDispDD -24,191

Or, if you use _DispVram, it will be full screen transfer by default.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 31/01/2019 18:41 | #


ça marche pas... ça me met un syntax error...
Sentaro21Hors ligneMembrePoints: 521 Défis: 0 Message

Citer : Posté le 01/02/2019 00:34 | #


Oh, I'm sorry!
I mistaked in the syntax.

PutDispDD@-24,191

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
ManoloHors ligneMembrePoints: 905 Défis: 13 Message

Citer : Posté le 03/02/2019 12:06 | #


c'est bon ! il y a la MàJ ! venez voir !!!
Pages : 1, 2Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 38 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd