Skip to content

Commit ffcdcfd

Browse files
authored
Switch to 2D viz of dartboard
1 parent c9a97c0 commit ffcdcfd

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

docs/src/examples/darts.md

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Steps
1010
using CairoMakie
1111
using Colors
1212
using Distributions
13+
using GeometryBasics
1314
using Meshes
1415
using MeshIntegrals
1516
using Unitful
@@ -37,7 +38,7 @@ end
3738
Sector(rs, phis) = Sector(rs..., phis...)
3839
3940
# Sector -> Ngon
40-
function Ngon(sector::Sector; N=8)
41+
function _Ngon(sector::Sector; N=8)
4142
ϕs = range(sector.phi_a, sector.phi_b, length=N)
4243
arc_o = [point(sector.r_outer, ϕ) for ϕ in ϕs]
4344
arc_i = [point(sector.r_inner, ϕ) for ϕ in reverse(ϕs)]
@@ -51,6 +52,9 @@ end
5152
5253
_poly(circle::Meshes.Circle; N=32) = [(_Point3f(circle(t)) for t in range(0, 1, length=N))...]
5354
_poly(ngon::Meshes.Ngon) = [(_Point3f(pt) for pt in ngon.vertices)...]
55+
56+
_poly2d(circle::Meshes.Circle; N=32) = [(_Point2f(circle(t)) for t in range(0, 1, length=N))...]
57+
_poly2d(ngon::Meshes.Ngon) = [(_Point2f(pt) for pt in ngon.vertices)...]
5458
```
5559

5660
## Modeling the Dartboard
@@ -81,36 +85,39 @@ board_colors = hcat(ring1, ring2, ring3, ring4)
8185
8286
# Sector geometries
8387
sector_width = 2π/20
84-
phis_a = range(0, 2π, 20) .- sector_width/2
85-
phis_b = range(0, 2π, 20) .+ sector_width/2
88+
sector_centers = [n * sector_width for n in 0:19]
89+
phis_a = sector_centers .- sector_width/2
90+
phis_b = sector_centers .+ sector_width/2
8691
phis = Iterators.zip(phis_a, phis_b)
8792
rs = [ (16mm, 99mm), (99mm, 107mm), (107mm, 162mm), (162mm, 170mm) ]
8893
board_coords = Iterators.product(phis, rs)
8994
board_sectors = map(((phis, rs),) -> Sector(rs, phis), board_coords)
90-
board_ngons = Ngon.(board_sectors)
95+
board_ngons = _Ngon.(board_sectors)
9196
9297
# Consolidate the Sectors
9398
sector_data = Iterators.zip(board_ngons, board_points, board_colors)
9499
board_regions = map(args -> ScoredRegion(args...), sector_data)
95100
96101
# Center region
97102
bullseye_inner = ScoredRegion(Meshes.Circle(dartboard_plane, 6.35mm), 50, red)
98-
bullseye_outer = ScoredRegion(Ngon(Sector((6.35mm, 16.0mm), (0.0, 2π)); N=32), 25, green)
103+
bullseye_outer = ScoredRegion(_Ngon(Sector((6.35mm, 16.0mm), (0.0, 2π)); N=32), 25, green)
99104
100105
# Get set of all regions
101106
all_regions = vcat(vec(board_regions), bullseye_inner, bullseye_outer)
102107
103-
# Initialize a 3D figure
104108
fig = Figure()
105-
#ax = LScene(fig[1, 1], scenekw=(show_axis=true,))
106-
ax = Axis3(fig[1, 1]; xlabel="X", ylabel="Y", zlabel="Z")
107-
limits!(ax, -0.1..0.1, -1.5..1.5, 0..3; fixed=true)
108-
109-
# Populate the dart board scored regions
110-
for region in all_regions
111-
poly!(ax, _poly(region.geometry), color=region.color)
109+
ax = Axis(fig[1, 1], xlabel="y [m]", ylabel="z [m]")
110+
ax.aspect = DataAspect()
111+
112+
for region in board_regions
113+
pts = _poly2d(region.geometry)
114+
poly!(ax, pts, color=region.color)
115+
116+
centerPt = centroid(region.geometry)
117+
center = ustrip.(u"m", [centerPt.coords.y, centerPt.coords.z])
118+
text!(ax, string(region.points), position=Point2f(center...), align=(:center,:center), color=:blue, fontsize=10)
112119
end
113-
120+
114121
fig
115122
```
116123

0 commit comments

Comments
 (0)