JuliaPhysics / JuliaPhysics/DynamicQuantities.jl

Logo

Open
#59 7 comments 0 reactions 0 assignees View on GitHub
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
```

image

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.