Microsoft Small Basic

Program Listing: RPZ071
' Shutter Effect
' Copyright © 2017 Nonki Takahashi. The MIT License.

title = "Shutter Effect"
GraphicsWindow.Title = title
Init()
For i = 1 To 8
tri[i] = Shapes.AddTriangle(0, 0, size, 0, 0, size)
Shapes.Rotate(tri[i], i * 45)
θ = Math.GetRadians((i - 1) * 45)
x1[i] = xo + size / 2 * root2 * Math.Cos(θ)
y1[i] = yo + size / 2 * root2 * Math.Sin(θ)
Shapes.Move(tri[i], x1[i] - size / 2, y1[i] - size / 2)
θ = Math.GetRadians((i - 2) * 45)
x2[i] = xo + size / 2 * root2 * Math.Cos(θ)
y2[i] = yo + size / 2 * root2 * Math.Sin(θ)
EndFor
While "True"
url = Flickr.GetRandomPicture("toy")
img = ImageList.LoadImage(url)
iw = ImageList.GetWidthOfImage(img)
ih = ImageList.GetHeightOfImage(img)
If (ih / iw) < (gh / gw) Then
width = gh / ih * iw
GraphicsWindow.DrawResizedImage(img, (gw - width) / 2, 0, width, gh)
Else
height = gw / iw * ih
GraphicsWindow.DrawResizedImage(img, 0, (gh - height) / 2, gw, height)
EndIf
GraphicsWindow.Title = title + " - " + url
For k = 0 To 1 Step 1 / n
For i = 1 To 8
x = x1[i] * (1 - k) + x2[i] * k
y = y1[i] * (1 - k) + y2[i] * k
Shapes.Move(tri[i], x - size / 2, y - size / 2)
EndFor
Program.Delay(delay / n)
EndFor
Program.Delay(1000)
For k = 1 To 0 Step -1 / n
For i = 1 To 8
x = x1[i] * (1 - k) + x2[i] * k
y = y1[i] * (1 - k) + y2[i] * k
Shapes.Move(tri[i], x - size / 2, y - size / 2)
EndFor
Program.Delay(delay / n)
EndFor
EndWhile

Sub Init
gw = 598
gh = 428
size = 800
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
xo = gw / 2
yo = gh / 2
root2 = Math.SquareRoot(2)
delay = 500
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = "DimGray"
GraphicsWindow.BrushColor = "Black"
n = 40
EndSub