Camembert simple façon excel

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Camembert simple façon excel

Message par Ekim »

Bonsoir et bonne année à tous

Savez vous comment puis je construire un camembert très simplement,

mon bout de code est laborieux

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 200, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
		Box(0, 0, 200, 200, RGB(255, 255, 255))
		
		Angled.f = 90.0
		Anglef.f = -90.0
		
		;debut
		LineXY(100, 100, 100+Cos(Angled)*90, 100+Sin(Angled)*90, #Red)
		
		;fin
		LineXY(100, 100, 100+Cos(Anglef)*90, 100+Sin(Anglef)*90, #Red)
		
		For Angle2 = 0 To 360
			Plot(100+Cos(Angle2)*90, 100+Sin(Angle2)*90,#Red)
		Next Angle2
		
		FillArea(100, 100, -1, $0000FF)
		
		StopDrawing() 
		ImageGadget(0, 0, 0, 200, 200, ImageID(0))
	EndIf
	
	Repeat
		Event = WaitWindowEvent()
	Until Event = #PB_Event_CloseWindow
EndIf
:wink:
Dernière modification par Ekim le dim. 10/janv./2021 20:01, modifié 1 fois.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Camembert simple façon excel

Message par kernadec »

bjr Ekim
merci, pour le partage
pour les fonctions de trigos, il faut convertir en radians

pour la fonction plot() en mode cercle et avec une boucle de 360 degrés, il y aura des fuites
en utilisant la fonction et FillArea() qui remplira toute la surface.
il faut utiliser la fonction Circle() et mettre un DrawingMode(#PB_2DDrawing_Outlined)
pour les contours des figures géométriques

avec plot() pour éviter les fuites il faut tracer plus serrer exemple:

Code : Tout sélectionner

 d.d = 0
    For Angle2 = 0 To 1080  ; 3 fois le tour
      d = d + 0.333333333
             Plot(100+Cos(d)*90, 100+Sin(d)*90,#Red)
    Next Angle2
Cordialement

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 200, 200, "LineXY", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255),#black)

    DrawingMode(#PB_2DDrawing_Outlined) 
 
    Angled.f = Radian(45.0)
    Anglef.f = Radian(-45.0)
    
    ;debut
    LineXY(100, 100, 100+Cos(Angled)*90, 100+Sin(Angled)*90, #Red)
    
    ;fin
    LineXY(100, 100, 100+Cos(Anglef)*90, 100+Sin(Anglef)*90, #Red)
    
    ;       For Angle2 = 0 To 360
    ;          Plot(100+Cos(Angle2)*90, 100+Sin(Angle2)*90,#Red)
    ;       Next Angle2
    
    Circle(100,100,90,#Red)
    
    FillArea(100, 100, #Red, #Green)
    
    StopDrawing()
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

[RESOLU] Camembert simple façon excel

Message par Ekim »

Oh c'est cool @kernadec :D

Merci pour cette correction, grâce à toi, je vais pouvoir avancer dans mon projet :P

et effectivement, la méthode cercle était la plus correct

encore merci :wink:
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Camembert simple façon excel

Message par kernadec »

Ekim
Je te conseillerais plutot d utiliser les fonctions
du mode: VectorDrawing() en particulier AddPathCircle()
Qui permet ce genre de chart
Cordialement
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Camembert simple façon excel

Message par microdevweb »

Bonjour,

Voici un exemple en utilisant Vector.

Image

Code : Tout sélectionner


#MAIN_FORM = 0
#CANVAS = 0
#TRACK = 1
#FONT = 0

Procedure evCloseWindow()
  End
EndProcedure

Procedure draw()
  StartVectorDrawing(CanvasVectorOutput(#CANVAS))
  ; clear canvas
  VectorSourceColor($FFC7C7C7)
  FillVectorOutput()
  VectorFont(FontID(#FONT))
  Protected v.d = GetGadgetState(#TRACK),
            p.d = (360 / 100) * v,
            x = GadgetWidth(#CANVAS) / 2,
            y = GadgetHeight(#CANVAS) / 2,
            xt = x - (VectorTextWidth(StrD(v)+" %")/2)
  MovePathCursor(x,y)
  If v > 0
    AddPathCircle(x,y,200,0,p,#PB_Path_Connected)
    ClosePath()
    VectorSourceColor($FF008B00)
    StrokePath(10,#PB_Path_Preserve)
    VectorSourceColor($FF00EE00)
    FillPath()
  EndIf
  MovePathCursor(xt,y)
  VectorSourceColor($FF8B0000)
  DrawVectorText(StrD(v)+" %")
  StopVectorDrawing()
EndProcedure

Procedure evTrack()
  draw()
EndProcedure

Procedure openMainForm()
  LoadFont(#FONT,"arial",12,#PB_Font_HighQuality|#PB_Font_Bold)
  OpenWindow(#MAIN_FORM,0,0,800,600,"Camember",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CanvasGadget(#CANVAS,0,0,WindowWidth(#MAIN_FORM),WindowHeight(#MAIN_FORM) - 60)
  TextGadget(#PB_Any,10,WindowHeight(#MAIN_FORM) - 60,WindowWidth(#MAIN_FORM) - 20,20,"Percentage")
  TrackBarGadget(#TRACK,10,WindowHeight(#MAIN_FORM) - 30,WindowWidth(#MAIN_FORM) - 20,25,0,100)
  SetGadgetState(#TRACK,100)
  draw()
  BindEvent(#PB_Event_CloseWindow,@evCloseWindow(),#MAIN_FORM)
  BindGadgetEvent(#TRACK,@evTrack())
EndProcedure

openMainForm()

Repeat
  WaitWindowEvent()
ForEver 
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Camembert simple façon excel

Message par kernadec »

bjr microdevweb
Merci pour le partage, vraiment cool à adapter :D
Cordialement
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Camembert simple façon excel

Message par Kwai chang caine »

Waouuuh !!! superbe 8O
Je ne sais pas en Belgique, mais en France on mange le camemberT comme en angleterre ...... avec le "Thé" :lol: :wink:
En tout cas merci beaucoup de se super code 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: Camembert simple façon excel

Message par Ekim »

Mais c'est excellent))
Merci beaucoup @microdevweb

La qualité y est au rendez vous en plus

Encore merci)
Répondre