JuliaPhysics / JuliaPhysics/DynamicQuantities.jl
Logo
- Dominant language
- Julia
- Stars
- 155
- Forks
- 32
- PR merge metrics
- No merged PRs in 30d
Description
Played around with Luxor yesterday, thought this package is still missing some kind of logo.
Here's one idea, something like a "decoder ring". I thought about one being able to change between different units dynamically, "dialing them in", sort of.
Here's the Luxor code
```julia
using Luxor
using Luxor.Colors
image_width = 500
@drawsvg begin
circle_radius = 0.85 * image_width / 2
scale(circle_radius, circle_radius)
offsets_deg = [20, 160, -2.5]
colors = Base.splat(RGB).([Luxor.julia_green, Luxor.julia_red, Luxor.julia_purple])
inner_radius = 0.25
ring_thicknesses = [0.25, 0.25, 0.25]
ringgap = 0.02
sectorgap_deg = 5
sector_whiten = 0.25
casing_opacity = 0.8
casing_overhang = 0.05
prefixes = ["p", "n", "μ", "m", "", "k"]
units = ["g", "s", "m"]
whiten(c, fraction) = Colors.weighted_color_mean(fraction, c, colorant"white")
sector_width = 360 / length(prefixes)
for i in 1:3
color = colors[i]
r1 = inner_radius + (i-1) * ringgap + sum(ring_thicknesses[1:i-1], init = 0.0)
r2 = r1 + ring_thicknesses[i]
for (j, pref) in enumerate(prefixes)
ang = offsets_deg[i] + ((j - 1) / length(prefixes) * 360)
angstart = ang - 0.5 * sector_width
angstop = ang + 0.5 * sector_width
sethue(iseven(j) ? colors[i] : whiten(colors[i], 1 - sector_whiten))
sector(O, r1, r2, deg2rad(angstart), deg2rad(angstop), action = :fill)
radius = 0.5 * (r1 + r2)
center = Point(reverse(sincosd(ang))) * radius
sethue("white")
s = pref * units[i]
@show s
# textcurvecentered is buggy when scaling is active
@layer begin
scale(1/circle_radius, 1/circle_radius)
fs = 25
fontsize(fs)
fontface("Helvetica Bold")
textcurvecentered(s, deg2rad(ang), radius * circle_radius, O, letter_spacing = 0, baselineshift = -0.3 * fs)
end
end
end
r1 = inner_radius - casing_overhang
r2 = r1 + sum(ring_thicknesses) + ((length(ring_thicknesses) - 1) * ringgap) + (2 * casing_overhang)
sethue(Luxor.julia_blue)
setopacity(casing_opacity)
sector(O, r1, r2, deg2rad(270 + 0.5 * sector_width), deg2rad(270 - 0.5 * sector_width), action = :fill)
end image_width image_width
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.