Archives pour l'étiquette function

Comment ajouter vos propres fonctions à « gc »

Salut à tous,

Comme vous le savez, afin de réaliser des opérations graphiquesen Lua sur la plateforme Nspire, vous devez utiliser gc et ses méthodes que TI a créé, comme drawString, drawRect, fillArc, etc.

Et bien, comment feriez-vous pour avoir votre propre fonction « gc », comme drawRoundRect ?

Vous pourriez très bien faire quelque chose comme :

function drawRoundRect(gc, x, y, wd, ht, rd)
        if rd > ht/2 then rd = ht/2 end
        gc:drawLine(x + rd, y, x + wd - (rd), y)
        gc:drawArc(x + wd - (rd*2), y + ht - (rd*2), rd*2, rd*2, 270, 90)
        gc:drawLine(x + wd, y + rd, x + wd, y + ht - (rd))
        gc:drawArc(x + wd - (rd*2), y, rd*2, rd*2,0,90)
        gc:drawLine(x + wd - (rd), y + ht, x + rd, y + ht)
        gc:drawArc(x, y, rd*2, rd*2, 90, 90)
        gc:drawLine(x, y + ht - (rd), x, y + rd)
        gc:drawArc(x, y + ht - (rd*2), rd*2, rd*2, 180, 90)
end
 
function on.paint(gc)
        drawRoundRect(gc, 100, 50, 20, 15, 5)
        ...
end

Certes, ceci fonctionne.

Mais ne serait-ce pas plus sympa de pouvoir écrire quelque chose du genre : « gc:drawRoundRect(100,50,20,15,5) », qui fait bien plus naturel et qui ne requiert pas le passage explicite de gc en premier argument ? 😉
Well, here is the definitive solution to this, by Jim Bauwens 😉

function AddToGC(key, func)
        local gcMetatable = platform.withGC(getmetatable)
        gcMetatable[key] = func
end
 
local function drawRoundRect(gc, x, y, wd, ht, rd)
        -- the code above
end
 
AddToGC("drawRoundRect", drawRoundRect)
 
function on.paint(gc)
        gc:drawRoundRect(100, 50, 20, 15, 5)
        ...
end

 

A noter :

Vous avez pu remarqué l’utilisation de platform.withGC, qui est une fonction de l’API « 2.0 »+ (OS 3.2+). VOici comment la « recréer » pour les versions plus anciennes :

if not platform.withGC then
        platform.withGC = function(func, ...)
            local gc = platform.gc()
            gc:begin()
            func(..., gc)
            gc:finish()
        end
    end

 
[Update] : John Powers from TI commented that this definition of platform.withGC has some limitations, and proposed this better version (thanks !) :

if not platform.withGC then
    function platform.withGC(f)
        local gc = platform.gc()
        gc:begin()
        local result = {f(gc)}
        gc:finish()
        return unpack(result)
    end
end

TabVar v3, l’ultime programme de tableau de variations !

Bonjour à tous,

Aujourd’hui est un grand jour !

En effet, pour les possesseurs de Nspire avec un OS >= 3, JayTe nous a concocté un programme combinant la simplicité du TI-Basic à la puissance de Lua, pour notre grand plaisir…
Je vous présente … TabVar 3 !
Oui, le fameux programme qui étudie toutes vos fonctions en profondeur et vous trace un magnifique tableau de variations !

« Ben ou mais ca existe, non ? », me direz-vous.
Certes. L’idée n’est pas nouvelle.
Chronologiquement, on a en effet eu celui d’Adriweb, le premier pour Nspire, et par la suite, TabVar v1 et v2, par JayTe, dont le moteur est basé à l’origine sur le programme d’Adriweb, mais le tout a été poussé bien plus loin en intégrant beaucoup plus de fonctions plus poussées d’analyse de fonctions.

Ce programme dépasse largement tous ses concurrents, et autres .tns pouvant espérer le rivaliser.

La grande particularité de cette version est que ce programme en exclusivité sur TIPlanet profite et exploite vraiment les fonctionnalités que propose l’OS 3 en intégrant un script dynamique Lua pour un affichage optimal du tableau de variations, qui devient pour le coup totalement graphique. Plus besoin d’astuces [foireuses] pour afficher correctement un tableau de variation digne de ce nom…

Nous n’allons pas vous faire plus attendre pour vous faire découvrir une copie d’écran de TabVar :
Image
et le détail des calculs préliminaires (clic pour l’image en grand) :
Image

A ce jour, vous ne trouverez pas plus fiable au niveau du moteur utilisé (même si rien n’est parfait, bien sûr ; les fonctions de grande complexité peuvent être incomplètement étudiées…)
Vous pouvez par exemple, tester des fonctions assez complexes, comme des polynomiales, rationelles, avec ou sans asymptote(s) et avec ou sans comportements étranges aux limites…
Bref, pour un lycéen (ou autre !), c’est plus que parfait :-)

Lien de téléchargement : http://tiplanet.org/forum/archives_voir.php?id=3751

Merci Qui ?
Merci JayTe !

N’oubliez-pas qu’à ce jour, c’est ce programme qui est de loin le plus fiable et le plus agréable à la lecture pour les études de fonctions..
Une petite capture d’écran pour marquer le coup ?
(Exemple de TabVar v3 contre un concurrent pour la même fonction f(x)=1/x)
Image
Hé oui, pour ne pas avoir une mauvaise note, ne faites pas confiance aux imitations !

TI-Planet, LE site de référence pour trouver tout ce dont vous avez besoin et ce dont vous rêvez!