A Bloch sphere of radius |a| = 1 contains all possible states of a two-state quantum system (qubit). Each Bloch vector fully determines a spin-1/2 density matrix. Used in Exercise Sheet 10 of Statistical Physics by Manfred Salmhofer (2016), available at https://janosh.dev/physics/statistical-physics.
#import "@preview/cetz:0.5.2": angle, canvas, draw
#import draw: circle, content, line
#set page(width: auto, height: auto, margin: 8pt, fill: none)
#set text(size: 12pt)
#canvas({
// Helper coordinates
let rad = 2.5
let vec-a = (rad / 3, rad / 2)
let phi-point = (rad / 3, -rad / 5)
let mark = (end: "stealth", fill: black)
// Bloch vector
line((0, 0), vec-a, mark: (
start: "circle",
end: "circle",
fill: black,
scale: .5,
anchor: "center",
))
content((rel: (0.08, 0.08), to: vec-a), $arrow(a)$, anchor: "south-west")
// Dashed line forming angle
line((0, 0), phi-point, style: "dashed")
line(phi-point, vec-a, style: "dashed")
let arrow-extend = 1.15
line((0, 0), (-rad / 5 * 1.2, -rad / 3 * 1.2), mark: mark, name: "x1")
content("x1.end", [$x_1$], anchor: "north")
line((0, 0), (arrow-extend * rad, 0), mark: mark, name: "x2")
content("x2.end", [$x_2$], anchor: "west")
line((0, 0), (0, arrow-extend * rad), mark: mark, name: "x3")
content("x3.end", [$x_3$], anchor: "south")
// Angles
angle.angle(
(0, 0),
(-1, -calc.tan(60deg)),
(1, -calc.tan(30deg)),
label: [$phi$],
stroke: (paint: gray, thickness: .5pt),
mark: (end: "stealth", fill: gray, scale: .7),
)
angle.angle(
(0, 0),
(1, calc.tan(60deg)),
(1, calc.tan(90deg)),
label: [$theta$],
stroke: (paint: gray, thickness: .5pt),
mark: (start: "stealth", fill: gray, scale: .7),
label-radius: 0.75,
)
// Sphere
circle((0, 0), radius: rad)
circle(
(0, 0),
radius: (rad, rad / 3),
stroke: (dash: "dashed"),
fill: gray.transparentize(70%),
)
})