Géométrie des fonctions polynomiales - Degrés 0 à 4

Sujets variés concernant le développement en PureBasic
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par Ollivier »

Salut les amis,

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
Dernière modification par Ollivier le dim. 23/avr./2023 7:07, modifié 1 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par Ollivier »

Moi, la remarque que je peux tenter de vous dire (mais qui n'est que mon avis personnel) :

le bouton a (celui à droite toute) gère la hauteur
le bouton b gère l'angle (attention : angle asymptotique, pas angle trigonométrique. Ici 0 degré égale zéro, 90 degrés égale l'infini)
le bouton c gère l'éclaté symétrique de petite échelle
le bouton d gère l'éclaté asymétrique
le bouton e gère l'éclaté symétrique de grande échelle

(pas besoin d'asymétrie à grande échelle, ça c'est le degré 5)

vocabulaire : définition de "éclaté" = chose qui évolue de plus en plus vite, ici, en l'occurence, c'est de l'évolution verticale dont il est question.
définition de "échelle" = facteur horizontal
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par Guillot »

salut Olivier,
t'aurais pu rajouté le réglage du zoom sur les ordonnées
pourquoi une si petite fenêtre ? t'as installé PB sur montre connectée ?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par Ollivier »

Bonjour Guillot,

déjà, c'est un honneur de te lire, et je te remercie. Cela me fait penser qu'à la mise à jour du code source plus haut, j'en profiterai pour récupérer ton travail publié il y a quelques semaines et t'en faire retour.

Alors, je vais m'occuper de ce zoom, qu'il sera un plaisir de programmer.

Normalement, je pense faire les modifs suivantes :

- compacter les calculs (j'hésite beaucoup à me faire un petit résolveur de calcul
* l'avantage : faciliter la compréhension d'un calcul à l'autre
* de fil en aiguille, un résolveur de calcul sans un affichage mathématique, en simple Courier New, c'est frustrant)

- faciliter l'affichage des courbes (zoom, redimensionnement)

Ça va être une première mise à jour du code source. Mais ça va aller lentement car je n'utilise pas beaucoup l'ordinateur. Cependant, mettre un peu plus de temps permet de voir arriver d'autres remarques.

Donc merci Guillot pour ta pertinence, on pourra zoomer dans la prochaine version, c'est une option très facile à mettre en place.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par kernadec »

bjr olliver guillot
c'est pas facile de lire l'heure avec des aiguilles tordue :lol:
Cdt
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par Ollivier »

Bonjour Kernadec,

c'est une bonne surprise ton intervention. Alors la pertinence de ton message étant proche du zéro, néanmoins, cela n'est que dans l'explicite. Implicitement, que je vois ta présence, il me vient différentes contributions passées.

- des aimants source infinies d'énergie (chacun a ses petits moments de faiblesse). Bon on sait que ça n'existe pas. Néanmoins un nota physique : la magnétisation d'un aimant peu être vue comme un certain potentiel, un capital qui (difficilement encore) peut être converti jusqu'à absence totale de magnétisation. C'est cette conversion d'énergie qui t'a fait croire à une solution perpétuelle. Un exemple à (très) grande échelle de l'aspect physique potentiel de la magnétisation d'un matériau : les magnétars.

- et puis, plus anciennement, un exemple très intelligent de code source d'application du quaternion. Je crois que la pertinence implicite de ton message est lâ, parce qu'il s'agit d'un véritable mode "triche" pour m'aider. Il faudra que l'on retrouve ce lien, car ce code source mérite beaucoup d'être vu et revu.

Bon... J'en étais au resizing...
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par kernadec »

bjr Ollivier
ces calculs me dépasse carrément, mais merci pour la démonstration
ce qui m'as fait rire dans ce sujet c'était la remarque de Guillot :mrgreen:
voilà pourquoi, j 'ai ajouté mon grain de sel :lol:
Cdt
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par Ollivier »

Je risque de lâcher le compilateur pureBasic. Pour 2 raisons :

- le DPI ça a foutu la mouise (bravo Microsoft) et pureBasic en est une des victimes. Pour l'OS Windows de Microsoft, c'est à peine voilé de swaper volontairement d'une version à l'autre et d'une mise à jour à l'autre l'activation du DPI. Je comprendrai peut-être la difficulté avec un autre compilateur. Mais il y a une résultante de valeurs à isoler et capter. J'arrive à programmer sur ma bécane, mais c'est typique pour me décourager. Tu as un écran qui est géant subitement sans aucun changement apparent, avec toutes les fenêtres 3 fois trop grande soudainement. Obligé de rebooter pour retrouver la normale : c'est instable et c'est bugué. Microsoft a toujours fait le boulet pour s'en mettre plein les poches.

- le 2ème point : je ne suis pas à la page avec paypal et compagnie. Ça ne me rassure pas de préciser x infos personnelles jusqu'à la taille de mon slip pour faire un paiement. J'en ai parlé à Fred qu'il y a des systèmes bancaires simples et fiables depuis longtemps, mais il ne répond pas à ce sujet. Donc ça ne se fait pas d'utiliser son produit sans lui offrir un juste retour. À chaque fois que j'ai besoin d'accéder à mon espace perso, Fred répond présent, c'est génial. Je lui parle de paiement autre que le circuit usuel : Fred est ailleurs ! Je lui redemanderai encore.


Concrètement, j'étais en train de voir pour avancer un truc propre dans ce sujet. C'est compliqué, ça demande de se focaliser sur les maths. J'ai les pièces du puzzle qui sont sur plusieurs fichiers source. Il manque l'affichage d'une équation mathématique pour faire un joli perfect fluide de 1000 lignes. Mais cette histoire de bug DPI ça défonce tout, et ça me gonfle. Le temps est précieux. Et, en 2023, grâce à Microsoft, je m'éclate sur papier mieux que sur ordi... Ça fait 20 ans que je ne me suis pas acheté un ordinateur fixe à monter moi-même. Je n'ai pris que des portables. Alors je vais peut-être, après vingt ans (et cinq ordinateirs portables successivement) d'abstinence, me refaire un petit réseau comme dans les années 90 avec deux à trois bons appareils, et là, si je réussis à me trouver un OS stable, je retesterai ce compilateur. Mais là c'est beaucoup trop de perte de temps. Donc les amis, RDV dans deux ans (peut-être une seule année, mais je préfère prévoir large) avant de reprendre la programmation comme j'aime.

PS: prochaine crise où j'aurai une envie incontrôlable de programmer, je gaufrerai tout en full screen, comme un extra-terrestre... Mais là, au moins c'est stable...
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: Géométrie des fonctions polynomiales - Degrés 0 à 4

Message par threedslider »

Cool ! c'est super ton truc de polynomiale ^^
Répondre