Ma petite contribution.
Code : Tout sélectionner
;Fonctions géomètriques
; Déterminer la distance entre deux points
Procedure.s Distance_Entre_2_Points(X1.f, Y1.f, X2.f, Y2.f)
Protected a.f, b.f
a = X2 - X1
b = Y2 - Y1
ProcedureReturn StrF(Sqr((a * a) + (b * b)), 2)
EndProcedure
; Déterminer l'angle entre deux points et l'axe des X (dans le système de coordonnées)
Procedure.f Angle_Entre_2_points(X1.f, Y1.f, X2.f, Y2.f)
Protected w.f
Angle = ATan((Y2 - Y1) / (X2 - X1)) * 57.295776
If X2 < X1
Angle = 180 + Angle
EndIf
If Angle < 0 : Angle + 360 : EndIf
If Angle > 360 : Angle - 360 : EndIf
ProcedureReturn Angle
EndProcedure
; Déterminer l'angle d'une pente en %
Procedure.f Angle_pente(Longueur.f, Hauteur.f)
Protected.f Pente
Pente = Hauteur / Longueur * 100
ProcedureReturn Pente
EndProcedure
; Déterminer la longueur d'une pente
Procedure.s Longueur_pente(Longueur.f, Hauteur.f)
Protected.f LP = Sqr((Longueur*Longueur) + (Hauteur*Hauteur))
ProcedureReturn StrF(LP,2)
EndProcedure
; Modulo pour les nombres à virgule flottante
Procedure.s ModuloF(a.f, b.f)
If b < 0 : b = -b : EndIf
If a > 0
ProcedureReturn StrF(a - Int(a / b) * b, 2)
Else
ProcedureReturn StrF(b + a - Int(a / b) * b, 2)
EndIf
EndProcedure
; Retourne toujours un angle entre 0 et 360
Procedure.f Mod_Angle(Angle.f)
If Angle >= 360
ProcedureReturn Angle - Int(Angle / 360) * 360
ElseIf Angle < 0
ProcedureReturn 360 + Angle - Int(Angle / 360) * b
Else
ProcedureReturn Angle
EndIf
EndProcedure
; Retourne la proportion de 2 nombres
Procedure.f Proportion(NbDebut.f, NbFin)
Protected Resultat.f = (NbFin * 100) / NbDebut
ProcedureReturn Resultat
EndProcedure
; Retourne la quantité recalculée.
Procedure.f QteProportionnelle(NbRef.f, QteRef.f, NbChoisi.f)
Protected Resultat.f = (NbChoisi * QteRef) / NbRef
ProcedureReturn Round(Resultat, #PB_Round_Nearest)
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
;{ partie commune 1
;- Initialisations
InitSprite()
InitKeyboard()
InitMouse()
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Actions
#Sortie
#Aucune
;Autres
EndEnumeration
Global Police =FontID(LoadFont(#PB_Any, "FontAwesome", 20, #PB_Font_Bold))
Global Police2 =FontID(LoadFont(#PB_Any, "FontAwesome", 20, #PB_Font_Bold|#PB_Font_Italic))
ExamineDesktops() : Global Largeur_Ecran = DesktopWidth(0) , Hauteur_Ecran = DesktopHeight(0) , Profondeur = DesktopDepth(0)
Global x,y,z,Texte.s, Titre.s = ""
;
; ouvrir une fenêtre maximisée de la même taille que le bureau et sans bordure
;
h_Fenetre = OpenWindow(#Fenetre_principale, 0, 0, Largeur_Ecran, Hauteur_Ecran, Titre, #PB_Window_BorderLess)
;
; ouvrir un écran de la même taille que la fenêtre
;
OpenWindowedScreen(h_Fenetre, 0, 0, Largeur_Ecran, Hauteur_Ecran, 0, 0, 0, #PB_Screen_SmartSynchronization)
ClearScreen($0B5000)
StartDrawing(ScreenOutput())
;}
;- début de l'affichage
DrawingFont(Police)
DrawingMode(#PB_2DDrawing_Default)
x = 0 : y = 0 : BackColor(Point(0,0))
;-Début du programme
DrawText(X, Y, "Distance_Entre_2_Points(X1, Y1, X2, Y2)", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Distance entre 2 points 10,10 et 100,100 = "+Distance_Entre_2_Points(10,10,100,100)); Déterminer la distance entre deux points
Y + TextHeight(" ")
Y + TextHeight(" ")
DrawingFont(Police)
DrawText(X, Y, "Angle_Entre_2_points()", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Angle entre 2 points 10,10 et 100,100 = "+Angle_Entre_2_points(10,10,100,100)+" °") ; Déterminer l'angle entre deux points et l'axe des X
Y + TextHeight(" ")
DrawingFont(Police) ;(dans le système de coordonnées)
DrawText(X, Y, "Angle_pente(Longueur, Hauteur)", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Angle d'une pente L = 800, H = 6 = "+Angle_pente(800,6)+" %") ; Déterminer l'angle d'une pente en %
Y + TextHeight(" ")
Y + TextHeight(" ")
DrawingFont(Police)
DrawText(X, Y, "Longueur_pente(Longueur, Hauteur)", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Longueur d'une pente de L = 800, H = 6 = "+Longueur_pente(800,6)) ; Déterminer la longueur d'une pente
Y + TextHeight(" ")
Y + TextHeight(" ")
DrawingFont(Police)
DrawText(X, Y, "ModuloF(a, b)", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Reste de la division de 10,5 \ 3,33 = "+ModuloF(10.5,3.33)) ; Modulo pour les nombres à virgule flottante
Y + TextHeight(" ")
Y + TextHeight(" ")
DrawingFont(Police)
DrawText(X, Y, "Mod_Angle(Angle) l'angle est toujours dans la fourchette 0-360°", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Modulo angle de 460.5 = "+Mod_Angle(460.5) + " °") ; Retourne toujours un angle entre 0 et 360
Y + TextHeight(" ")
Y + TextHeight(" ")
DrawingFont(Police)
DrawText(X, Y, "Proportion(NbDebut, NbFin)", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "45% des moutons d'un troupeau sont blancs. Le troupeau comporte exactement 72 moutons blancs.")
Y + TextHeight(" ")
DrawText(X, Y, "- Le troupeau se compose de " + Proportion(45, 72) + " moutons.", $999EFC)
Y + TextHeight(" ")
Y + TextHeight(" ")
DrawingFont(Police)
DrawText(X, Y, "QteProportionnelle(NbRef, QteRef, NbChoisi)", $FFFF)
Y + TextHeight(" ")
DrawingFont(Police2)
DrawText(X, Y, "Si pour faire 2 tartes j'ai besoin de 250 g de fraises, alors pour faire 3 tartes de combien de grammes de fraises aurai-je besoin ? ")
Y + TextHeight(" ")
DrawText(X, Y, "- J'aurai besoin de " + QteProportionnelle(2, 250, 3) + " grammes de fraises.", $FF9797)
Y + TextHeight(" ")
DrawText(X, Y, "Si pour faire 3 tartes j'ai besoin de 375 g de fraises, alors pour faire 2 tartes de combien de grammes de fraises aurai-je besoin ? ")
Y + TextHeight(" ")
DrawText(X, Y, "- J'aurai besoin de " + QteProportionnelle(3, 375, 2) + " grammes de fraises.", $FF9797)
Y + TextHeight(" ")
DrawText(X, Y, "J'ai une recette calculée pour 8 personnes, où il me faut 12 oeufs, combien m'en faut-il pour 3 personnes ?")
Y + TextHeight(" ")
DrawText(X, Y, "- Il me faut donc, " + QteProportionnelle(8, 12, 3) + " oeufs.", $FF9797)
Y + TextHeight(" ")
;-Fin du programme
;{ partie commune 2
;- fin d'affichage
StopDrawing()
;
; montrons les choses sur l'écran
;
FlipBuffers()
;- gestion des événements en boucle sans fin
Global action.i = #Aucune
Repeat
Global Evenement = WindowEvent()
Select Evenement
Case #PB_Event_CloseWindow
action = #Sortie
Case 0
;
; il n'y a pas d'événement, donc faisons nos trucs graphiques
ExamineKeyboard()
If KeyboardPushed(#PB_Key_All)
action = #Sortie
EndIf
ExamineMouse()
If MouseButton(#PB_MouseButton_Left) <> 0 Or
MouseButton(#PB_MouseButton_Middle) <> 0 Or
MouseButton(#PB_MouseButton_Right) <> 0
action = #Sortie
EndIf
EndSelect
Until action = #Sortie
;- fermeture de l'écran & de la fenêtre en douceur
CloseScreen()
CloseWindow(#Fenetre_principale)
;}
CompilerEndIf