diff --git a/resources/transbeam-common.asy b/resources/transbeam-common.asy new file mode 100644 index 0000000..5e218a6 --- /dev/null +++ b/resources/transbeam-common.asy @@ -0,0 +1,48 @@ +struct transbeamPrefs { + real triangleRadius; + real borderInset; + real circleRadius; + real bigBeamRadius; + real smallBeamRadius; + real beamCount; + real beamAngle; + real starterBeamAngle; +} + +void drawTransbeam(transbeamPrefs prefs) { + unravel prefs; + + pen transBlue = rgb("55cdfc"); + pen transPink = rgb("f7a8b8"); + + pen bigBeamColor = transPink; + pen smallBeamColor = transBlue; + + path borderTriangle = dir(90)--dir(210)--dir(330)--cycle; + path outerBorder = scale(triangleRadius)*borderTriangle; + fill(outerBorder, white); + + path beam(real angle, real innerRadius, real outerRadius) { + return arc((0,0), outerRadius, angle/2, -angle/2)--arc((0,0), innerRadius, -angle/2, angle/2)--cycle; + } + + path bigBeam = beam(beamAngle, circleRadius, bigBeamRadius); + path smallBeam = beam(beamAngle, circleRadius, smallBeamRadius); + + for (int i = 0; i < beamCount; ++i) { + if (i > 0) { + fill(rotate(360*i/beamCount)*bigBeam, bigBeamColor); + } + fill(rotate(360*(i+0.5)/beamCount)*smallBeam, smallBeamColor); + } + + pair starterBeamTrianglePoint(real angle) { + pair circlePoint = circleRadius*dir(angle); + return intersectionpoint(circlePoint--(circlePoint+(triangleRadius,0)), outerBorder); + } + + fill(starterBeamTrianglePoint(-starterBeamAngle/2)--arc((0,0), circleRadius, -starterBeamAngle/2, starterBeamAngle/2)--starterBeamTrianglePoint(starterBeamAngle/2)--cycle, bigBeamColor); + + draw(outerBorder, transPink+(2*borderInset)); + draw(scale(triangleRadius-borderInset)*borderTriangle, transBlue+borderInset); +} diff --git a/resources/transbeam-favicon.asy b/resources/transbeam-favicon.asy new file mode 100644 index 0000000..526b182 --- /dev/null +++ b/resources/transbeam-favicon.asy @@ -0,0 +1,13 @@ +import "transbeam-common.asy" as transbeam; + +transbeamPrefs prefs; +prefs.triangleRadius = 100; +prefs.borderInset = 14; +prefs.circleRadius = 12; +prefs.bigBeamRadius = 36; +prefs.smallBeamRadius = 36; +prefs.beamCount = 3; +prefs.beamAngle = 40; +prefs.starterBeamAngle = 80; + +drawTransbeam(prefs); diff --git a/resources/transbeam.asy b/resources/transbeam.asy index 8e0b935..d49c8ef 100644 --- a/resources/transbeam.asy +++ b/resources/transbeam.asy @@ -1,43 +1,13 @@ -real triangleRadius = 100; -real borderInset = 6; +import "transbeam-common.asy" as transbeam; -real circleRadius = 12; -real bigBeamRadius = 36; -real smallBeamRadius = 25; -real beamCount = 12; -real beamAngle = 7; -real starterBeamAngle = 16; +transbeamPrefs prefs; +prefs.triangleRadius = 100; +prefs.borderInset = 6; +prefs.circleRadius = 12; +prefs.bigBeamRadius = 36; +prefs.smallBeamRadius = 25; +prefs.beamCount = 12; +prefs.beamAngle = 7; +prefs.starterBeamAngle = 16; -pen transBlue = rgb("55cdfc"); -pen transPink = rgb("f7a8b8"); - -pen bigBeamColor = transPink; -pen smallBeamColor = transBlue; - -path borderTriangle = dir(90)--dir(210)--dir(330)--cycle; -path outerBorder = scale(triangleRadius)*borderTriangle; -fill(outerBorder, white); - -path beam(real angle, real innerRadius, real outerRadius) { - return arc((0,0), outerRadius, angle/2, -angle/2)--arc((0,0), innerRadius, -angle/2, angle/2)--cycle; -} - -path bigBeam = beam(beamAngle, circleRadius, bigBeamRadius); -path smallBeam = beam(beamAngle, circleRadius, smallBeamRadius); - -for (int i = 0; i < beamCount; ++i) { - if (i > 0) { - fill(rotate(360*i/beamCount)*bigBeam, bigBeamColor); - } - fill(rotate(360*(i+0.5)/beamCount)*smallBeam, smallBeamColor); -} - -pair starterBeamTrianglePoint(real angle) { - pair circlePoint = circleRadius*dir(angle); - return intersectionpoint(circlePoint--(circlePoint+(triangleRadius,0)), outerBorder); -} - -fill(starterBeamTrianglePoint(-starterBeamAngle/2)--arc((0,0), circleRadius, -starterBeamAngle/2, starterBeamAngle/2)--starterBeamTrianglePoint(starterBeamAngle/2)--cycle, bigBeamColor); - -draw(outerBorder, transPink+(2*borderInset)); -draw(scale(triangleRadius-borderInset)*borderTriangle, transBlue+borderInset); +drawTransbeam(prefs); diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..4cd2d19 Binary files /dev/null and b/static/favicon.ico differ