1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import { formatDisplay, number, type Parameters, type TestId } from '../experiments';
import { assemblyState, centralState, conservationState, motionState, rotationState } from '../test4';
const n = (value: number) => formatDisplay(value);
export function narrate(id: TestId, p: Parameters): string {
if (id === 'test-work') {
const work = n(motionState(p).work * 1e9);
const route = p.path === 'curved'
? 'Den krumme rute tilføjer bevægelse på tværs, men det endelige arbejde forbliver det samme.'
: 'Den rette rute gør skalarproduktet mellem kraft og forskydning let at se.';
return `${route} Ved b udfører feltet ${work} nJ arbejde; $U$ falder med det beløb.`;
}
if (id === 'test-conservation') {
const s = conservationState(p);
return String.raw`Ved $r$ = ${n(s.r)} m er $U$ = ${n(s.u * 1e9)} nJ og $K$ = ${n(s.kinetic * 1e9)} nJ. Summen forbliver ${n(s.total * 1e9)} nJ. Det hidtidige arbejde er stigningen i $K$.`;
}
if (id === 'test-central') {
const s = centralState(p);
return s.rb === Infinity
? String.raw`I det uendelige er $U_b=0$ eksakt. $W_{a\infty}=U_a$ = ${n(s.work * 1e9)} nJ. Diagrammets kant er kun en visuel fortsættelse mod uendelighed.`
: String.raw`Feltet udfører ${n(s.work * 1e9)} nJ arbejde fra $r_a$ = ${s.ra} m til $r_b$ = ${s.rb} m. Skift af fortegn på en af ladningerne vender $U$ og $W$.`;
}
if (id === 'test-assembly') {
const s = assemblyState(p);
return String.raw`Trin ${s.stage}: ${s.stage * (s.stage - 1) / 2} forskellige par er til stede. $U_{123}$ = ${n(s.base * 1e9)} nJ; tilføjelse af $q_0$ ændrer den med ${n(s.extra * 1e9)} nJ. Negativ parenergi betyder modsatte fortegn.`;
}
if (id === 'test-uniform') {
const m = motionState(p);
return String.raw`$\alpha = ${number(p, 'angle')}^\circ$ projicerer $s$ = ${m.s} m over på $\Delta x$ = ${n(m.dx)} m. $W$ = ${n(m.work * 1e9)} nJ og $U_b$ = ${n(-m.work * 1e9)} nJ med $U_a=0$.`;
}
const s = rotationState(p);
const degrees = s.theta * 180 / Math.PI;
if (s.field === 0) return String.raw`$E=0$: begge kræfter, kraftmomentet, rotationsarbejdet og dipolens vekselvirkningsenergi forsvinder. Der er ingen foretrukken orientering.`;
if (degrees < 0.01) return String.raw`Indrettet ved $0^\circ$: $U$ er minimum, og kraftmomentet er nul. Det er stabil ligevægt; en lille drejning giver et tilbageførende kraftmoment.`;
if (degrees > 179.99) return String.raw`Modsat ved $180^\circ$: $U$ er maksimum, og kraftmomentet er nul. Det er ustabil ligevægt; en lille drejning fører den væk fra denne position.`;
const follow = Math.abs(degrees - 90) < 0.01
? String.raw`Ved $90^\circ$ er $U=0$ per valg, men kraftmomentet er størst: det er ikke ligevægt.`
: 'Følg punktet på energikurven, mens du drejer.';
return String.raw`Ved $\theta = ${n(degrees)}^\circ$ er $\tau_z$ = ${n(s.torqueZ * 1e9)} nN·m. Den negative z-retning mindsker $\theta$ mod indretning. ${follow}`;
}
|