initial commit
This commit is contained in:
67
misc/blobs/blobs.typ
Normal file
67
misc/blobs/blobs.typ
Normal file
@ -0,0 +1,67 @@
|
||||
#import "@preview/cetz:0.3.1": draw
|
||||
|
||||
#let rand-consts = (
|
||||
a: 1103515245,
|
||||
c: 12345,
|
||||
m: (1).bit-lshift(31)
|
||||
)
|
||||
#let random(seed) = {
|
||||
let seed = calc.rem(rand-consts.a * seed + rand-consts.c, rand-consts.m)
|
||||
let value = seed / rand-consts.m
|
||||
return (seed, value)
|
||||
}
|
||||
|
||||
#let draw-blob(
|
||||
seed,
|
||||
center,
|
||||
radius,
|
||||
n-pts: 8,
|
||||
curviness: 0.4,
|
||||
debug: false,
|
||||
..args
|
||||
) = {
|
||||
let pts = ()
|
||||
let angle-step = 360deg / n-pts
|
||||
let seed = seed
|
||||
let v
|
||||
|
||||
if debug {
|
||||
draw.circle(center, radius: radius, stroke: (dash: "dashed"))
|
||||
}
|
||||
for i in range(n-pts) {
|
||||
(seed, v) = random(seed)
|
||||
let angle = angle-step * (i + v - 0.5)
|
||||
|
||||
(seed, v) = random(seed)
|
||||
let f = calc.rem(i, 2) * 2 - 1
|
||||
let r = radius * (1 + f * v * curviness)
|
||||
|
||||
let dx = r * calc.cos(angle)
|
||||
let dy = r * calc.sin(angle)
|
||||
let pt = (center.first() + dx, center.last() + dy)
|
||||
pts.push(pt)
|
||||
|
||||
if debug {
|
||||
draw.circle(
|
||||
pt,
|
||||
radius: .1,
|
||||
stroke: none,
|
||||
fill: black
|
||||
)
|
||||
draw.line(
|
||||
center,
|
||||
(rel: center, to: (angle-step * i, radius)),
|
||||
stroke: (dash: "dashed")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
let name = args.named().at("name", default: none)
|
||||
draw.group(name: name, {
|
||||
draw.hobby(..pts, close: true, ..args)
|
||||
if name != none {
|
||||
draw.copy-anchors(name)
|
||||
draw.anchor("center", center)
|
||||
}
|
||||
})
|
||||
}
|
BIN
misc/blobs/main.png
Normal file
BIN
misc/blobs/main.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
79
misc/blobs/main.typ
Normal file
79
misc/blobs/main.typ
Normal file
@ -0,0 +1,79 @@
|
||||
#import "@preview/cetz:0.3.1": canvas, draw
|
||||
#import "blobs.typ": draw-blob
|
||||
|
||||
#set page(width: auto, height: auto, margin: 1cm)
|
||||
|
||||
#canvas({
|
||||
draw-blob(
|
||||
2, (0, 0), 1.5,
|
||||
stroke: green,
|
||||
name: "blob1"
|
||||
)
|
||||
|
||||
draw-blob(
|
||||
8, (5, 0), 1.5,
|
||||
n-pts: 10,
|
||||
stroke: orange,
|
||||
name: "blob2"
|
||||
)
|
||||
|
||||
draw.circle(
|
||||
"blob1.center",
|
||||
radius: .05,
|
||||
fill: black,
|
||||
stroke: none,
|
||||
name: "x"
|
||||
)
|
||||
|
||||
draw.circle(
|
||||
"blob2.center",
|
||||
radius: .05,
|
||||
fill: black,
|
||||
stroke: none,
|
||||
name: "y"
|
||||
)
|
||||
|
||||
draw.content(
|
||||
"x",
|
||||
[$arrow(x)$],
|
||||
anchor: "east",
|
||||
padding: 3pt
|
||||
)
|
||||
|
||||
draw.content(
|
||||
"y",
|
||||
[$arrow(y)$],
|
||||
anchor: "west",
|
||||
padding: 3pt
|
||||
)
|
||||
|
||||
draw.content(
|
||||
(-1.2, .8),
|
||||
text(fill: green)[$RR^n$]
|
||||
)
|
||||
|
||||
draw.content(
|
||||
(4.6, 1.4),
|
||||
text(fill: orange)[$RR^m$]
|
||||
)
|
||||
|
||||
let mid = (2.5, .5)
|
||||
|
||||
draw.bezier-through(
|
||||
"x.north-east", mid, "y.north-west",
|
||||
stroke: blue + .5pt,
|
||||
mark: (end: ">", fill: blue),
|
||||
name: "arrow"
|
||||
)
|
||||
draw.content(
|
||||
mid,
|
||||
[$f$],
|
||||
anchor: "south",
|
||||
padding: 3pt
|
||||
)
|
||||
|
||||
draw.content(
|
||||
(2.5, -1),
|
||||
text(fill: blue)[$f: RR^n -> RR^m$]
|
||||
)
|
||||
})
|
Reference in New Issue
Block a user