Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » [BASIC/C-BASIC] Accelerer F-Line
Potter360 Hors ligne Rédacteur Points: 1254 Défis: 2 Message

[BASIC/C-BASIC] Accelerer F-Line

Posté le 22/02/2022 23:46

Bonjour !
Je cherche à faire des textures (ou en tout cas des grands aplats de couleurs) en C-Basic sur G90+E.
J'utilise un For et des F-Lines, qui marchent mais ralentissent le programme...
Donc :
- y'a t-il un moyen de dessiner des rectangles au lieu de dessiner plusieurs F-Lines et et ce que on gagne en vitesse ?
- je dois aussi dessiner des textures sur des triangles donc pas de rectangles, là est ce qu'il y a un moyen de gagner de la vitesse ?

J'ai regardé du côté du DrawStat, mais je ça ne marche pas des masses, à partir du moment où j'ai deux éléments dans mes listes et qu'il me dessine 3 lignes qui n'ont rien à voir, je démissionne x)
Merci d'avance !


Ne0tux Hors ligne Membre d'honneur Points: 3525 Défis: 265 Message

Citer : Posté le 22/02/2022 23:51 | #


Salut, je te propose de t'interesser au Multi-Drawstat et au Super-Drawstat avec en tête une astuce fort pratique :

Un point situé hors écran (ou tout du moins "loin") provoquera un non affichage de ligne.

Autrement dit entre deux éléments graphiques distincts tu peux caler des points à 1e6 par exemple pour qu'aucune ligne n'apparaisse entre les deux !
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 23/02/2022 01:26 | #


DrawStat creates one continuous line from point to point. not multiple different lines

in C.Basic you can place : after a draw command to stop it from immediately displaying to the screen (make sure to have a new line after the :)
Running any other draw command will update the screen (I think C.Basic has a dedicated updatescreen command?)
Drawing to the screen is almost single handedly the slowest operation to do on the calculator, including Addins written in C and asm
(other than every single command in normal Basic)

you can access MonochromeLib's extended drawing commands in C.Basic under [SHIFT]+[F4] (SKTCH), [F3] (ML)
Potter360 Hors ligne Rédacteur Points: 1254 Défis: 2 Message

Citer : Posté le 23/02/2022 07:27 | #


@Redcmd oh,thanks you ! I don’t know this one

@Net0ux oui, c’est ce que j’ai vu dans le tuto de Draw Stat.
En fait mon problème est que je fais deux liste genre :
{35,27}->List 1
{4,8}->List 2

Je les affiche avec Graph(X,Y)=(List 1[T],List 2[T]) et ça dessine un triangle !
(Les valeurs sont au pif)
Globalement, coder. Mal, mais coder.
Choukas Hors ligne Membre Points: 90 Défis: 5 Message

Citer : Posté le 23/02/2022 08:38 | #


Ne0tux a écrit :
Un point situé hors écran (ou tout du moins "loin") provoquera un non affichage de ligne.

Tu peux utiliser du Multi drawstat pour pouvoir lever le crayon facilement comme les lignes ne sont pas continues.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 23/02/2022 11:57 | #


Je les affiche avec Graph(X,Y)=(List 1[T],List 2[T]) et ça dessine un triangle !
(Les valeurs sont au pif)

Tu as bien vérifié que le View-Window pour T c'est 0, <nombre d'éléments>, 1 ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Potter360 Hors ligne Rédacteur Points: 1254 Défis: 2 Message

Citer : Posté le 23/02/2022 12:21 | #


Ahah merde je ne savais pas qu’il fallait renseigner le nombre d’éléments dans le ViewWindows !

Je vais essayer de m’y pencher mais la solution de Redcmd marche très bien, (tout est fluide) donc je ne sais pas si je vais utiliser le DrawStat
Globalement, coder. Mal, mais coder.
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 23/02/2022 13:06 | #


Ça peut valoir le coup d'expliquer comment cette méthode marche.

Graph(X,Y)=() dessine un graphe paramétré. Contrairement au graphe normal où les points sont situés en (x, y(x)), dans un graphe paramétrique les points sont situés en (x(t), y(t)) pour une certaine variable t.

Pour prendre un exemple classique, si tu dessines le graphe paramétré de (cos(t), sin(t)) avec t de 0 à 2π (et un pas assez faible genre 0.1) tu obtiens un cercle.

Le principe du Super DrawStat est d'abuser cette mécanique pour former des images en traçant des lignes. C'est possible parce que le tracé de graphe fonctionne en évaluant (x(t), y(t)) pour "certaines" valeur de t puis en traçant des lignes entre les points obtenus.

Dans le Super DrawStat, x(t) c'est List 1[T] et y(t) c'est List 2[T], c'est-à-dire qu'on indique manuellement tous les points par lesquels le graphe doit passer. D'où la formulation habituelle que "ça permet de tracer une série de lignes".

Cependant, il ne faut pas oublier que (x(t), y(t)) est évalué pour "certaines" valeurs de T qui sont spécifiées dans le View-Window avec (1) un T initial, Tθmin ; (2) un T final, Tθmax ; (3) un pas, Tθpitch. Pour que la formule List 1[T] / List 2[T] ait un sens et fasse ce que tu veux, il faut que T varie de 1 au nombre d'éléments avec un pas de 1, pour que chaque point de la liste soit vu exactement une fois.

Note que du coup si tu veux faire plusieurs Super DrawStat sur le même frame tu es soit obligé de concaténer les listes soit obligé de modifier Tθmax. La seconde option implique un Cls, ce qui veut dire que tu dois faire un StoPict/RclPict (ou BG-PIct) pour ne pas perdre le contenu de l'écran. Ce trick ne marche que sur mono. C'est une faiblesse du Super DrawStat que le Multi DrawStat n'a pas, parce que le Multi DrawStat encode les lignes différemment et utilise toujours Tθmax=1.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Potter360 Hors ligne Rédacteur Points: 1254 Défis: 2 Message

Citer : Posté le 23/02/2022 13:57 | #


Ah, j'avais pas compris ça comme ça !
Mercii !
Globalement, coder. Mal, mais coder.

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 111 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