Microsoft Small Basic

Program Listing: CJD102-0
' Paralympic Flag
' Version 0.2
' Copyright © 2018 Nonki Takahashi. The MIT License.
' Program ID CJD102-0
' Last update 2018-05-23

GraphicsWindow.Title = "Paralympic Flag"
scale = 0.6
ox = 80
oy = 40
Init()
For j = 1 To 3
GraphicsWindow.BrushColor = color[j]
GetPoints()
For i = 1 To (Array.GetItemCount(cubic[j]) - 1) / 3
For k = 0 To 1 Step 1 / 16
i1 = (i - 1) * 3 + 1
i2 = (i - 1) * 3 + 2
i3 = (i - 1) * 3 + 3
i4 = (i - 1) * 3 + 4
param = "1=" + i1 + ";2=" + i2 + ";3=1-2;"
CalcMidPoint()
param = "1=" + i2 + ";2=" + i3 + ";3=2-3;"
CalcMidPoint()
param = "1=" + i3 + ";2=" + i4 + ";3=3-4;"
CalcMidPoint()
param = "1=1-2;2=2-3;3=1-3;"
CalcMidPoint()
param = "1=2-3;2=3-4;3=2-4;"
CalcMidPoint()
param = "1=1-3;2=2-4;3=1-4;"
CalcMidPoint()
n = n + 1
points[n][1] = x["1-4"]
points[n][2] = y["1-4"]
EndFor
EndFor
GraphicsWindow.PenWidth = 0
Program.Delay(200)
LDShapes.AddPolygon(points)
n = 0
EndFor

Sub CalcMidPoint
' param k - 0..1
x[param[3]] = x[param[1]] + k * (x[param[2]] - x[param[1]])
y[param[3]] = y[param[1]] + k * (y[param[2]] - y[param[1]])
EndSub

Sub GetPoints
GraphicsWindow.PenWidth = 2
For i = 1 To Array.GetItemCount(cubic[j])
p = cubic[j][i]
c = Text.GetIndexOf(p, ",")
x[i] = Text.GetSubText(p, 1, c - 1)
y[i] = Text.GetSubTextToEnd(p, c + 1)
If Text.StartsWith(x[i], "r") Then
x[i] = Text.GetSubTextToEnd(x[i], 2)
x[i] = xLast + x[i]
y[i] = yLast + y[i]
EndIf
If Math.Remainder(i, 3) = 1 Then
xLast = x[i]
yLast = y[i]
EndIf
x[i] = x[i] * scale + ox
y[i] = y[i] * scale + oy
EndFor
EndSub

Sub Init
gw = 864 * scale + 2 * ox
gh = 650 * scale + 2 * oy
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
Not = "False=True;True=False;"
color = "1=#AA272F;2=#00549F;3=#008542;"
cubic[1] = "1=210.134,447.59;2=196.926,453.403;3=-10.03,468.122;4=11.45,291.223;5=32.953,114.378;"
cubic[1] = cubic[1] + "6=347.595,-9.82;7=406.157,11.982;8=327.769,52.1;9=165.435,84.083;10=104.464,264.128;"
cubic[1] = cubic[1] + "11=44.363,441.763;12=208.664,445.142;13=210.134,447.59;"
cubic[2] = "1=530.521,540.879;2=r-3.939,13.918;3=r-125.69,182.398;4=r-247.112,52.159;5=r-121.44,-130.145;"
cubic[2] = cubic[2] + "6=r-14.026,-451.576;7=r40.431,-482.614;8=r-19.893,86.01;9=r-99.744,231.226;10=r-1.349,393.744;"
cubic[2] = cubic[2] + "11=419.517,664.543;12=527.785,540.61;13=530.521,540.879;"
cubic[3] = "1=794.25,272.876;2=r12.281,7.49;3=r143.059,168.887;4=r-13.811,252.746;5=r-156.787,83.881;"
cubic[3] = cubic[3] + "6=r-438.813,-103.251;7=r-454.597,-163.974;8=r77.776,41.397;9=r196.933,156.35;10=r379.146,103.12;"
cubic[3] = cubic[3] + "11=884.521,412.343;12=793.129,275.432;13=794.25,272.876;"
EndSub