gaussian curve on canvas gadget

Share your advanced PureBasic knowledge/code with the community.
User avatar
Psychophanta
Always Here
Always Here
Posts: 5153
Joined: Wed Jun 11, 2003 9:33 pm
Location: Anare
Contact:

gaussian curve on canvas gadget

Post by Psychophanta »

Code: Select all

Define .f
canvasx.u=0
canvasy.u=0
canvasw.u=600
canvash.u=400
sliderax.u=canvasx+canvasw
slideray.u=canvasy
slideraw.u=25
sliderah.u=canvash
sliderbx.u=canvasx
sliderby.u=canvasy+canvash
sliderbw.u=canvasw
sliderbh.u=25
slidercx.u=canvasx
slidercy.u=sliderby+25
slidercw.u=canvasw
sliderch.u=25
sliderex.u=canvasx
sliderey.u=slidercy+25
sliderew.u=canvasw
slidereh.u=25
If OpenWindow(0,0,0,canvasw+60,canvash+80,"Función de Gauss",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  CanvasGadget(10,canvasx,canvasy,canvasw,canvash)
  StartDrawing(CanvasOutput(10)):Box(canvasx,canvasy,canvasw,canvash,0):StopDrawing()
  TrackBarGadget(0,sliderax,slideray,slideraw,sliderah,0,5E3,#PB_TrackBar_Vertical); <- a
  TrackBarGadget(1,sliderbx,sliderby,sliderbw,sliderbh,0,5E3); <- b
  TrackBarGadget(2,slidercx,slidercy,slidercw,sliderch,0,5E3); <- c
  TrackBarGadget(3,sliderex,sliderey,sliderew,slidereh,0,5E3); <- e
  SetGadgetState(0,2500)
  SetGadgetState(1,2500)
  SetGadgetState(2,500)
  SetGadgetState(3,500)
  a=GetGadgetState(0)*canvash/5E3
  b=GetGadgetState(1)*canvasw/5E3
  c=GetGadgetState(2)*canvasw/5E3
  e=GetGadgetState(3)*canvasw/1E5
  TextGadget(20,sliderax+slideraw,slideray,slideraw*2,slideraw,StrF(a,3))
  TextGadget(21,sliderbx+sliderbw,sliderby,sliderbh*2,sliderbh,StrF(b,3))
  TextGadget(22,slidercx+slidercw,slidercy,sliderch*2,sliderch,StrF(c,3))
  TextGadget(23,sliderex+sliderew,sliderey,slidereh*2,slidereh,StrF(e,3))
  Repeat
    Event.i=WaitWindowEvent()
    Select EventGadget()
    Case 0;:EventType()
      a=GetGadgetState(0)*canvash/5E3
      SetGadgetText(20,StrF(a,3))
    Case 1;:EventType()
      b=GetGadgetState(1)*canvasw/5E3
      SetGadgetText(21,StrF(b,3))
    Case 2;:EventType()
      c=GetGadgetState(2)*canvasw/5E3
      SetGadgetText(22,StrF(c,3))
    Case 3;:EventType()
      e=GetGadgetState(3)*canvasw/1E5
      SetGadgetText(23,StrF(e,3))
    EndSelect
    StartDrawing(CanvasOutput(10))
    Box(canvasx,canvasy,canvasw,canvash,0)
    For x.u=canvasx To canvasw-1
      xp.u=x.u:yp.u=y.u
      y.u=canvash-a*Pow(e,-Pow(x-b,2)/2/c/c)
      LineXY(xp,yp,x,y,$AAEE90)
    Next
    StopDrawing()
  Until Event=#PB_Event_CloseWindow
EndIf
http://www.zeitgeistmovie.com

while (world==business) world+=mafia;
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: gaussian curve on canvas gadget

Post by davido »

@Psychophanta,

Nice, concise, example.
Thank you for sharing.
DE AA EB
User avatar
RSBasic
Moderator
Moderator
Posts: 1228
Joined: Thu Dec 31, 2009 11:05 pm
Location: Gernsbach (Germany)
Contact:

Re: gaussian curve on canvas gadget

Post by RSBasic »

Thank you for sharing.
Image
Image
User avatar
VB6_to_PBx
Enthusiast
Enthusiast
Posts: 627
Joined: Mon May 09, 2011 9:36 am

Re: gaussian curve on canvas gadget

Post by VB6_to_PBx »

many thanks for your Gaussian curve example !!!

such a small amount of Code does so much !
 
PureBasic .... making tiny electrons do what you want !

"With every mistake we must surely be learning" - George Harrison
User avatar
Psychophanta
Always Here
Always Here
Posts: 5153
Joined: Wed Jun 11, 2003 9:33 pm
Location: Anare
Contact:

Re: gaussian curve on canvas gadget

Post by Psychophanta »

No thanks to me, but the PB creator and PB team.
The tip is mine, which can be improved in performance and size.
But the PB creator Fred, and PB team are the real guilties behind of these pieces of small codes which do so much :)
http://www.zeitgeistmovie.com

while (world==business) world+=mafia;
Post Reply