continue feedback
All checks were successful
/ test_checkout (push) Successful in 1m50s

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2025-10-21 15:58:12 +02:00
parent de6359db3f
commit 7a80f1fea6
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
5 changed files with 511 additions and 23 deletions

187
slides/icons.typ Normal file
View file

@ -0,0 +1,187 @@
#let phone(
width: 200pt,
height: 400pt,
stroke: 3pt+black,
body: [],
) = {
let h_screen = height*12/15
let w_screen = width*8/10
let r = (height/15)
let h_button = (height - h_screen) / 6
let w_button = w_screen / 3
let dy_button = -((height - h_screen) / 2 - h_button) / 2
let h-top-line = ((height - h_screen) / 2) / 6
let w-top-line-bar = w_screen / 2
let dy-top-line = (((height - h_screen) / 2) - h-top-line) / 3
let r-cam = ((height - h_screen) / 2) / 5
let dx-cam = -r-cam*2
let dy-cam = ((height - h_screen) / 2 / 2) - r-cam
let top-line = stack(
dir: ltr,
circle(radius: h-top-line/2, stroke: stroke),
h(h-top-line),
rect(
width: w-top-line-bar,
height: h-top-line,
radius: h-top-line/2,
stroke: stroke,
),
h(h-top-line),
circle(radius: h-top-line/2, stroke: stroke),
h(h-top-line),
circle(radius: h-top-line/2, stroke: stroke)
)
rect(
width: width,
height: height,
inset: 0pt,
stroke: stroke,
radius: r,
{
place(center+horizon,
rect(
width: w_screen,
height: h_screen,
stroke: stroke,
body,
)
)
place(center+bottom,
dy: dy_button,
rect(
width: w_button,
height: h_button,
stroke: stroke,
radius: h_screen / 2,
)
)
place(center+top,
dy: dy-top-line,
top-line
)
place(right+top,
dx: dx-cam,
dy: dy-cam,
circle(radius: r-cam, stroke: stroke)
)
}
)
}
#let polar(
x0: 0pt, y0: 0pt,
r: 0pt,
th: 0deg,
) = {
(
x0 + r * calc.cos(th),
y0 + r * calc.sin(th),
)
}
#let gear(
//x0: 0pt, y0: 0pt,
out-rad: 100pt,
in-rad: none,
nb-teeth: 6,
teeth-angle: none,
stroke: black + 3pt,
fill: luma(70%),
fill-center: white,
) = {
let x0 = out-rad
let y0 = out-rad
let teeth-angle = if teeth-angle == none { 360deg / nb-teeth / 2 } else { teeth-angle }
let in-rad = if in-rad == none { out-rad * 0.75 } else { in-rad }
box(width: 2*out-rad, height: 2*out-rad, {
//place(left+bottom, line(start: (0%, -50%), end: (100%, -50%)))
//place(left+bottom, line(start: (50%, 0%), end: (50%, -100%)))
polygon(
stroke: stroke,
fill: fill,
..for i in range(nb-teeth) {
let angle = i * 360deg / nb-teeth
let center_off = calc.sin(teeth-angle/2) * in-rad
let (x0_1, y0_1) = polar(x0: x0, y0: y0, r: center_off, th: angle - 90deg)
let (x0_2, y0_2) = polar(x0: x0, y0: y0, r: center_off, th: angle + 90deg)
(
(polar(x0: x0, y0: y0, r: in-rad, th: angle - teeth-angle/2)),
//(polar(x0: x0, y0: y0, r: out-rad, th: angle - teeth-angle/2)),
(polar(x0: x0_1, y0: y0_1, r: out-rad, th: angle)),
(polar(x0: x0_2, y0: y0_2, r: out-rad, th: angle)),
//(polar(x0: x0, y0: y0, r: out-rad, th: angle + teeth-angle/2)),
(polar(x0: x0, y0: y0, r: in-rad, th: angle + teeth-angle/2)),
)
}
)
let center-rad = in-rad * 2/3
place(left+bottom,
// wtf?
dx: out-rad - center-rad,
dy: -out-rad + center-rad,
circle(
radius: center-rad,
stroke: stroke,
fill: fill-center,
)
)
})
}
#let wrench(height: 200pt) = rotate(45deg, image("imgs/ico/wrench.svg", height: height))
#let apk(height: 100pt) = image("imgs/ico/apk.svg", height: height)
#let apks(height: 100pt) = {
place(apk(height: height))
place(dx: height * 4 / 10, dy: -height * 3 / 10, apk(height: height))
place(dx: height * 6 / 10, dy: height / 10, apk(height: height))
}
#let transfo(height: 200pt) = {
box(width: height, height: height, {
place(
left+bottom,
dx: height / 12,
dy: - height * 3 / 12,
gear(out-rad: height/3)
)
place(
left+bottom,
dx: height * 2 / 5,
dy: 0pt,
wrench(height: height*7/8)
)
})
}
#let loop(height: 100pt) = image("imgs/ico/loop.svg", height: height)
#let analyse(height: 200pt) = {
box(width: height, stroke: black, {
apk(height: height)
place(
left+top,
dx: - height * 3/10,
dy: - height * 1 / 10,
loop(height: height/2)
)
})
}
#phone(body: [Hello World!])
#move(dx: 100pt, dy: 100pt, gear())
#wrench()
#apk()
#v(4em)
#apks()
#v(12em)
#transfo()
#analyse()