Microsoft Small Basic

Program Listing:
Embed this in your website
' Challenge of the month October 2012 Crescent area by NaochanON


gui()

While "true"
  For k=0 to 9
    plot()
    GraphicsWindow.Title=" Lap % = "+math.Floor(XLap*100*10)/10 +" %" + " Crescent area = "+math.Round(Yarea*100*10)/10+" % "
    Shapes.Animate(DMoon,260+45*(1-math.cos(rad))*2  ,5,2000)
    Program.Delay(2000)
  endfor
  scatter()
  Program.Delay(3000)
  Shapes.Animate(DMoon,250,5,3000)
endwhile

Sub plot
  rad= Math.GetRadians(10*k)
  XLap=(1-Math.Cos(rad))
  X= 130+45*2*XLap*6
  Yarea=(1-2*(rad-math.Cos(rad)*math.Sin(rad))/math.Pi)
  Y=100+100*(1-Yarea)*4
  GraphicsWindow.BrushColor="Yellow"
  GraphicsWindow.PenColor="Yellow"
  Shapes.Remove(mark[k])
  mark[k]= Shapes.AddEllipse(10,10)
  Shapes.Animate(mark[k],X,Y,1500)
EndSub

sub scatter
  For k=0 To 9
    Shapes.Animate( mark[k],600-Math.GetRandomNumber(1200),500+Math.GetRandomNumber(1200),1500)
  EndFor
EndSub

sub gui
  GraphicsWindow.Top=50
  GraphicsWindow.Width=800
  GraphicsWindow.Height=600
  GraphicsWindow.BackgroundColor="darkgreen"
  GraphicsWindow.BrushColor="Black"
  GraphicsWindow.PenColor="Black"
  GraphicsWindow.FillRectangle(100,100,600,400)
  GraphicsWindow.BrushColor="Yellow"
  GraphicsWindow.PenColor="Yellow"
  ' ---------------- show message ------------------------------------
  LF= Text.GetCharacter(10)
  msg=" s=( Πr^2/2*θ/Π - rcos(θ)*rsin(θ)/2 )"+LF
  msg=msg+" CS=Πr^2 - 4*s"+LF+LF
  msg=msg+" =r^2*( Π - 2*(θ-cos(θ)*sin(θ)) )"+LF
  msg=msg+" Crescent %= CS/Πr^2 *100"+LF
  msg=msg+" = ( Π-2*(θ-cos(θ)*sin(θ)) ) /Π*100"+LF
  msg=msg+" = ( 1- 2*(θ-cos(θ)*sin(θ)) /Π )*100"+LF+LF
  msg=msg+" X Lap = r*(1-cos(θ))*2/2r*100"+LF
  msg=msg+" = (1-cos(θ))*100"
  smsg= Shapes.AddText(msg)
  Shapes.Move(smsg,450,120)
  ' ---------------- graph ------------------------------------
  GraphicsWindow.FontSize=20
  For i=0 To 5
    GraphicsWindow.DrawText(50,90+i*80,100-i*20)
    GraphicsWindow.fillRectangle(100,100+i*80,10,4)
  EndFor
  GraphicsWindow.DrawText(50,60," (%)")
  For J=0 To 10
    GraphicsWindow.DrawText(120+j*60*90/100,500,j*10)
    GraphicsWindow.fillRectangle(130+j*60*90/100,490,4,10)
  EndFor
  GraphicsWindow.DrawText(250,530," Lap (%) ")
  ' ---------------- Light Moon and Dark Moon --------------------------
  Lmoon= Shapes.AddEllipse(90,90)
  Shapes.Move(Lmoon,350,5)
  GraphicsWindow.BrushColor="Black"
  GraphicsWindow.PenColor="Black"
  Dmoon= Shapes.AddEllipse(90,90)
  Shapes.SetOpacity(Dmoon,70)
  Shapes.Move(Dmoon,250,5)
EndSub


Copyright (c) Microsoft Corporation. All rights reserved.