Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Création congé entre 2 droites
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 500, 500, "Congé", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
; Données
S_X1.d = 200 ; Droite du sommet : position X1
S_X2.d = 500 ; Droite du sommet : position X2
S_Y.d = 300 ; Droite du sommet : position Y
P_X1.d = 0 ; Droite en pente qui joint le sommet :position X1
P_Y1.d = 0 ; Droite en pente qui joint le sommet :position Y1
P_X2.d = S_X1 ; Droite en pente qui joint le sommet :position X2
P_Y2.d = S_Y ; Droite en pente qui joint le sommet :position Y2
R.d = 100 ; Rayon du congé entre les 2 droites
; Calcul du centre du rayon
R_CY.d = S_Y - R
P_A.d = (P_Y2 - P_Y1) / (P_X2 - P_X1)
P_B.d = P_Y1 - P_A * P_X1
Angle.d = ATan(P_A) + #PI / 2
R_X.d = P_X2 + R * Cos(Angle)
R_Y.d = R_CY + R * Sin(Angle)
R_CX.d = P_X2 + (R_Y - P_B) / P_A - R_X
; On coupe les 2 droites
S_X1 = R_CX
P_Y2 = R_Y
P_X2 = R_CX + R_X - P_X2
CreateImage(0, 500, 500, 32 | #PB_Image_Transparent)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Outlined)
Circle(R_CX, R_CY, R, $FF0000FF)
LineXY(P_X1, P_Y1, P_X2, P_Y2, $FF000000)
LineXY(S_X1, S_Y, S_X2, S_Y, $FF000000)
StopDrawing()
ImageGadget(0, 0, 0, 500, 500, ImageID(0))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow