j'ai constaté que mon branlitomètre personnel affichait un max concernant la fourniture de code source.
Pris d'un élan de solidarité, je me suis dit, ce dimanche matin assez matinalement (vu qu'il est 6 heures) << Vas-y, Olliv, fais pas ta prostrée encore trop longtemps : file-leur quelquechose à rogner à cette bonne bande de bon d'accord je vais m'exprimer plus correctement >>.
Alors voici un programme simple, fait plutôt à l'arrache, pas commenté, mais simple.
Son but ? Afficher les 5 courbes respectives aux 5 polynomes de degrés 0, 1, 2, 3 et 4.
Et offrir 5 boutons (ou curseur) pour manier les 1, 2, 3, 4 ou 5 paramètres des polynômes.
Résultat : avec la souris, vous modifiez les positions des curseurs qui modifient les paramètres et les courbes s'affichent en conséquence en temps réel.
Donc le but c'est littéralement de branler les curseurs un par un pour constater qu'est-ce que ça change en temps réel.
Nota : pour faire simple, de droite à gauche, c'est de l'application la plus simple à l'application la plus compliquée.
Rappel :
Polynôme degré 0 : a
degré 1 : bx+a
degré 2 : cx²+bx+a
degré 3 : dx³+cx²+bx+a
degré 4 : ex⁴+dx³+cx²+bx+a
Légendes des boutons : de gauche à droite = e, d, c, b et a
Légendes des courbes :
degré 0 : noire
degré 1 : bleu
degré 2 : vert
degré 3 : cyan
degré 4 : rouge
(de toute façon, ça se voit, les courbes vont de la forme la plus simple à la forme la plus tordue)
Remarque : pas d'échelle, pas de référence, pas de mesure. C'est Spartes mais le but reste juste de vous familiariser avec les polynômes, parce que vous expliquer comment résoudre la courbe rouge (quaternion unitaire * échelle réelle), ça va être un poil prise de chou-fleur bien défoncé dans le pariétal.
Donc pas à pas les amis, d'abord un joujou.
J'attends vos remarques. Comme ça, j'aurai peut-être une chance de réussir à ne pas vous retrouver sur Neptune avec un message en morse << nan nan on n'en veut pas de ta daube... Fais joujou tout seul ! >>
Code : Tout sélectionner
Define.d x, y, y0, y1, y2, y3, y4
Define.d xp, x0
Define.d y0p, y1p, y2p, y3p, y4p
Define.d a, b, c, d, e
Define.d zx, zy
zx = 1/10
zy = 1
If OpenWindow(0, 0, 0, 440, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(10, 10, 10, 200, 200)
TrackBarGadget(11, 220, 10, 20, 200, 0, 10000, #PB_TrackBar_Vertical)
TrackBarGadget(12, 240, 10, 20, 200, 0, 10000, #PB_TrackBar_Vertical)
TrackBarGadget(13, 260, 10, 20, 200, 0, 10000, #PB_TrackBar_Vertical)
TrackBarGadget(14, 280, 10, 20, 200, 0, 10000, #PB_TrackBar_Vertical)
TrackBarGadget(15, 300, 10, 20, 200, 0, 10000, #PB_TrackBar_Vertical)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget() > 10 And EventGadget() < 16
If StartDrawing(CanvasOutput(10))
w = OutputWidth()
h = OutputHeight()
Box(0, 0, w, h, RGB(255, 255, 255) )
a = - (GetGadgetState(11) / 10000 - 0.5) * 100000000
b = - (GetGadgetState(12) / 10000 - 0.5) * 1000000
c = - (GetGadgetState(13) / 10000 - 0.5) * 10000
d = - (GetGadgetState(14) / 10000 - 0.5) * 100
e = - (GetGadgetState(15) / 10000 - 0.5)
Line(0, e * h + (h/2), w, 1, RGB(1, 1, 1) )
For i = 0 To w / zx
xp = x0
x = i / (w / zx) - (0.5 * zx)
x0 = (x + (0.5 * zx)) * w / zx
y0p = y0
y0 = d * x + e
y0 = (y0 + 0.5) * h * zy
Box(x0, y0, 1, 1, RGB(1, 1, 255) )
If i > 0
LineXY(xp, y0p, x0, y0, RGB(1, 1, 255) )
EndIf
y1p = y1
y1 = c * x * x + d * x + e
y1 = (y1 + 0.5) * h * zy
Box(x0, y1, 1, 1, RGB(1, 255, 1) )
If i > 0
LineXY(xp, y1p, x0, y1, RGB(1, 255, 1) )
EndIf
y2p = y2
y2 = b * x * x * x + c * x * x + d * x + e
y2 = (y2 + 0.5) * h * zy
Box(x0, y2, 1, 1, RGB(1, 255, 255) )
If i > 0
LineXY(xp, y2p, x0, y2, RGB(1, 255, 255) )
EndIf
y3p = y3
y3 = a * x * x * x * x + b * x * x * x + c * x * x + d * x + e
y3 = (y3 + 0.5) * h * zy
Box(x0, y3, 1, 1, RGB(255, 1, 1) )
If i > 0
LineXY(xp, y3p, x0, y3, RGB(255, 1, 1) )
EndIf
Next
StopDrawing()
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf