Page 1 of 1

gaussian curve on canvas gadget

Posted: Sun Jan 10, 2016 12:31 am
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

Re: gaussian curve on canvas gadget

Posted: Sun Jan 10, 2016 8:47 am
by davido
@Psychophanta,

Nice, concise, example.
Thank you for sharing.

Re: gaussian curve on canvas gadget

Posted: Sun Jan 10, 2016 11:56 am
by RSBasic
Thank you for sharing.

Re: gaussian curve on canvas gadget

Posted: Sun Jan 10, 2016 5:54 pm
by VB6_to_PBx
many thanks for your Gaussian curve example !!!

such a small amount of Code does so much !

Re: gaussian curve on canvas gadget

Posted: Wed Jan 13, 2016 4:11 pm
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 :)