Calculateur d'angle et de profondeur de champs
Publié : mer. 14/juin/2023 11:05
Bonjour,
J'ai voulu tester les compétences de ChatGPT pour la génération de code Purebasic, et j'avoue avoir ri ! J'avais l'impression de revoir Rain Man ou ChatGPT jouait très bien le rôle de Dustin Hoffman.
Donc, voici le petit exercice presque fait (euh non, pas tout à fait fait) par ChatGPT
Avec la petite correction suggérée par Mesa
Voilà, modification de la distance de mise au point et correction de l'affichage d'angle
N'hésitez-pas à y apporter vos modifications.
PS : Il se trompait même dans les formules, donc pas de crainte que ChatGPT vole la place des développeurs
J'ai voulu tester les compétences de ChatGPT pour la génération de code Purebasic, et j'avoue avoir ri ! J'avais l'impression de revoir Rain Man ou ChatGPT jouait très bien le rôle de Dustin Hoffman.
Donc, voici le petit exercice presque fait (euh non, pas tout à fait fait) par ChatGPT
Avec la petite correction suggérée par Mesa
Voilà, modification de la distance de mise au point et correction de l'affichage d'angle
Code : Tout sélectionner
EnableExplicit
Global distanceFocaleID, formatCapteurID, ouvertureID, distanceMiseAuPointID, boutonCalculID, afficheAngleID, afficheProfondeurID, afficheMAPID, afficheCanvasAngleID
Procedure.f GetDistanceMAP()
Define x.i = GetGadgetState(distanceMiseAuPointID)/10
Define a.d = Exp(-1.8326) ; Valeur de ln(a) obtenue à partir de la formule
Define b.d = Exp(0.3065) ; Valeur de ln(b) obtenue à partir de la formule
ProcedureReturn a * Pow(b, x) ; Calcul de y en utilisant la formule y = a * b^x
EndProcedure
Procedure ChangeDistanceMAP()
SetGadgetText(afficheMAPID,"Mise au point à "+StrF(GetDistanceMAP(),2)+" m")
EndProcedure
Procedure CalculerAngleChampProfondeur()
; Récupérer les valeurs sélectionnées dans les listes déroulantes et le TrackBarGadget
Define distanceFocale.s = GetGadgetText(distanceFocaleID)
Define formatCapteur.s = GetGadgetText(formatCapteurID)
Define ouverture.s = GetGadgetText(ouvertureID)
Define distanceMiseAuPoint.f = GetDistanceMAP()
Define SansErreur=#True
If distanceFocale = "" Or formatCapteur = "" Or ouverture = ""; Or distanceMiseAuPoint = ""
MessageRequester("Erreur", "Veuillez sélectionner tous les paramètres.")
SansErreur=#False
EndIf
If SansErreur
; Facteurs de taille du capteur
Define fullFrameFactor.f = 1.0
Define apsCFactor.f = 1.5
Define mftFactor.f = 2.0
; Conversion des valeurs sélectionnées en nombres
Define distanceFocaleNum.f = Val(distanceFocale)
Define formatCapteurNum.f
Define cercleDeConfusion.f
Select formatCapteur
Case "Plein format"
formatCapteurNum = fullFrameFactor
cercleDeConfusion = 0.03
Case "APS-C"
formatCapteurNum = apsCFactor
cercleDeConfusion = 0.02
Case "Micro 4/3"
formatCapteurNum = mftFactor
cercleDeConfusion = 0.015
Default
MessageRequester("Erreur", "Format de capteur non pris en charge.")
SansErreur=#False
EndSelect
If SansErreur
Define angleChamp.f = 2 * Degree(ATan((43 / formatCapteurNum) / (2 * distanceFocaleNum)))
Define HyperFocale.f = Pow( Val(distanceFocale), 2) / Val(ouverture) * cercleDeConfusion
Define PremierPlanNet.f = HyperFocale * distanceMiseAuPoint / (HyperFocale + distanceMiseAuPoint)
Define DernierPlanNet.f = HyperFocale * distanceMiseAuPoint / (HyperFocale - distanceMiseAuPoint)
SetGadgetText(afficheAngleID, "Angle de champ : " + Str(angleChamp) + " degrés")
If distanceMiseAuPoint < HyperFocale
SetGadgetText(afficheProfondeurID, "Premier plan net : " + StrF(PremierPlanNet,2) + " m | Dernier plan net : "+StrF(DernierPlanNet,2)+" m")
Else
SetGadgetText(afficheProfondeurID, "Premier plan net : " + StrF(PremierPlanNet,2) + " m | Dernier plan net : ∞")
EndIf
If StartDrawing(CanvasOutput(afficheCanvasAngleID))
Box(0,0,OutputWidth(),OutputHeight(),#White)
Define MidX=Round(OutputWidth()/2,#PB_Round_Nearest)
Define MidY=Round(OutputHeight()/2,#PB_Round_Nearest)
Define Diff.i =Int(OutputHeight()*((21.5/formatCapteurNum)/distanceFocaleNum))
LineXY(MidX-Diff,1,MidX,OutputHeight()-1,#Black)
LineXY(MidX,OutputHeight()-1,MidX+Diff,1,#Black)
LineXY(MidX-Diff,1,MidX+Diff,1,#Black)
FillArea(MidX,MidY, #Black, #Black)
StopDrawing()
EndIf
EndIf
EndIf
EndProcedure
; Création de la fenêtre principale
OpenWindow(0, 0, 0, 400, 350, "Calculateur d'angle et de profondeur de champ", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; Liste déroulante pour la distance focale
distanceFocaleID = ComboBoxGadget(#PB_Any, 10, 10, 200, 20)
AddGadgetItem(distanceFocaleID, -1, "8")
AddGadgetItem(distanceFocaleID, -1, "16")
AddGadgetItem(distanceFocaleID, -1, "17")
AddGadgetItem(distanceFocaleID, -1, "20")
AddGadgetItem(distanceFocaleID, -1, "24")
AddGadgetItem(distanceFocaleID, -1, "28")
AddGadgetItem(distanceFocaleID, -1, "35")
AddGadgetItem(distanceFocaleID, -1, "40")
AddGadgetItem(distanceFocaleID, -1, "50")
AddGadgetItem(distanceFocaleID, -1, "60")
AddGadgetItem(distanceFocaleID, -1, "75")
AddGadgetItem(distanceFocaleID, -1, "85")
AddGadgetItem(distanceFocaleID, -1, "90")
AddGadgetItem(distanceFocaleID, -1, "105")
AddGadgetItem(distanceFocaleID, -1, "135")
AddGadgetItem(distanceFocaleID, -1, "150")
AddGadgetItem(distanceFocaleID, -1, "180")
AddGadgetItem(distanceFocaleID, -1, "200")
TextGadget(#PB_Any,210,10,180,20,"Longueur focale en mm")
; Liste déroulante pour le format de capteur
formatCapteurID = ComboBoxGadget(#PB_Any, 10, 40, 200, 20)
AddGadgetItem(formatCapteurID, -1, "Plein format")
AddGadgetItem(formatCapteurID, -1, "APS-C")
AddGadgetItem(formatCapteurID, -1, "Micro 4/3")
TextGadget(#PB_Any,210,40,180,20,"Format de capteur")
; Liste déroulante pour l'ouverture
ouvertureID = ComboBoxGadget(#PB_Any, 10, 70, 200, 20)
AddGadgetItem(ouvertureID, -1, "1")
AddGadgetItem(ouvertureID, -1, "1.4")
AddGadgetItem(ouvertureID, -1, "2")
AddGadgetItem(ouvertureID, -1, "2.8")
AddGadgetItem(ouvertureID, -1, "4")
AddGadgetItem(ouvertureID, -1, "5.6")
AddGadgetItem(ouvertureID, -1, "8")
AddGadgetItem(ouvertureID, -1, "11")
AddGadgetItem(ouvertureID, -1, "16")
AddGadgetItem(ouvertureID, -1, "22")
AddGadgetItem(ouvertureID, -1, "32")
TextGadget(#PB_Any,210,70,180,20,"Ouverture f 1:")
; TrackBarGadget pour la distance de mise au point
distanceMiseAuPointID = TrackBarGadget(#PB_Any, 10, 100, 200, 20, 1, 211, 50)
afficheMAPID = TextGadget(#PB_Any,210, 100, 200, 16, "Mise au point à 0 m")
; Bouton de calcul
boutonCalculID = ButtonGadget(#PB_Any, 10, 130, 80, 30, "Calculer")
; TextGadget pour afficher l'angle de champ
afficheAngleID = TextGadget(#PB_Any, 10, 170, 380, 16, "")
; TextGadget pour afficher la profondeur de champ
afficheProfondeurID = TextGadget(#PB_Any, 10, 190, 380, 16, "")
afficheCanvasAngleID = CanvasGadget(#PB_Any, 10,226,380,110,#PB_Canvas_Border)
SetGadgetState(ouvertureID,0)
SetGadgetState(formatCapteurID,0)
SetGadgetState(distanceFocaleID,0)
BindGadgetEvent(boutonCalculID, @CalculerAngleChampProfondeur(), #PB_EventType_LeftClick)
BindGadgetEvent(distanceMiseAuPointID,@ChangeDistanceMAP());, #PB_EventType_Change)
; Boucle principale
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
PS : Il se trompait même dans les formules, donc pas de crainte que ChatGPT vole la place des développeurs
