From 9545ceb4f4cc3c17837cc133b30036f44b550f89 Mon Sep 17 00:00:00 2001 From: xenofem Date: Wed, 27 Apr 2022 21:27:03 -0400 Subject: [PATCH] make favicon version of logo --- resources/transbeam-common.asy | 48 +++++++++++++++++++++++++++++ resources/transbeam-favicon.asy | 13 ++++++++ resources/transbeam.asy | 52 +++++++------------------------- static/favicon.ico | Bin 0 -> 32038 bytes 4 files changed, 72 insertions(+), 41 deletions(-) create mode 100644 resources/transbeam-common.asy create mode 100644 resources/transbeam-favicon.asy create mode 100644 static/favicon.ico 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 0000000000000000000000000000000000000000..4cd2d193b39a3a4ba653dd9ac87dcec3df786305 GIT binary patch literal 32038 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 F`G2~;=9T~e literal 0 HcmV?d00001