-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpendulum.html
More file actions
1275 lines (1202 loc) · 132 KB
/
Copy pathpendulum.html
File metadata and controls
1275 lines (1202 loc) · 132 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Маятник — фазовые портреты</title>
<style>
:root {
color-scheme: dark;
--bg: #191613;
--panel: #242220;
--panel-2: #2b2b2b;
--canvas: #0f0e0d;
--line: #3b3733;
--ink: #ececec;
--ink-2: #b8b0a6;
--ink-3: #948c82;
--accent: #ff5a1f;
--accent-h: #ff7a45;
--accent-ink: #21120a;
--teal: #17a8a8;
--c-yellow: #ffff00;
--c-blue: #58c4dd;
--c-red: #fc6255;
--serif: Georgia, 'Times New Roman', serif;
--mono: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
--sans: -apple-system, 'Segoe UI', system-ui, sans-serif;
}
* { box-sizing: border-box; }
html, body { margin: 0; }
[hidden] { display: none !important; }
body {
background: var(--bg);
color: var(--ink);
font: 15px/1.55 var(--sans);
-webkit-font-smoothing: antialiased;
}
.app { max-width: 1160px; margin: 0 auto; padding: 28px 20px 40px; }
/* ---------- header ---------- */
header { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: 18px; }
.eyebrow { font: 600 11px/1 var(--sans); letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3); margin-bottom: 8px; }
h1 { font: 400 40px/1.05 var(--serif); margin: 0 0 6px; letter-spacing: .01em; }
h1 em { font-style: italic; color: var(--accent); }
.sub { margin: 0; color: var(--ink-2); font-size: 13.5px; }
.sub code { font: 12.5px var(--mono); color: var(--ink-2); }
.tabs { display: flex; background: var(--panel); border: 1px solid var(--line); border-radius: 10px; padding: 4px; gap: 4px; }
.tabs button {
font: 600 13.5px var(--sans); color: var(--ink-2);
background: none; border: 0; border-radius: 7px; padding: 8px 16px; cursor: pointer;
}
.tabs button:hover { color: var(--ink); }
.tabs button[aria-pressed="true"] { background: var(--accent); color: var(--accent-ink); }
.tabs button:focus-visible, .btn:focus-visible, .toggle input:focus-visible, .theory summary:focus-visible {
outline: 2px solid var(--accent-h); outline-offset: 2px;
}
/* ---------- stage ---------- */
.stage { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.panel { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
.panel-head {
display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap;
padding: 9px 14px; border-bottom: 1px solid var(--line); min-height: 38px;
}
.panel-title { font: 600 11px/1 var(--sans); letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3); }
.panel-head .spacer { flex: 1; }
.hint { font-size: 12px; color: var(--ink-3); }
.legend { display: flex; gap: 12px; }
.chip { display: inline-flex; align-items: center; gap: 6px; font: italic 14px var(--serif); color: var(--ink-2); }
.chip i { width: 14px; height: 3px; border-radius: 2px; display: inline-block; }
.toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-2); cursor: pointer; user-select: none; }
.toggle input { accent-color: var(--accent); margin: 0; }
.seg { display: inline-flex; background: var(--panel-2); border: 1px solid var(--line); border-radius: 7px; padding: 2px; gap: 2px; }
.seg button { font: 600 11px var(--sans); color: var(--ink-2); background: none; border: 0; border-radius: 5px; padding: 3px 8px; cursor: pointer; }
.seg button:hover { color: var(--ink); }
.seg button[aria-pressed="true"] { background: var(--accent); color: var(--accent-ink); }
.seg button:focus-visible { outline: 2px solid var(--accent-h); outline-offset: 1px; }
canvas { display: block; width: 100%; aspect-ratio: 1.08 / 1; background: var(--canvas); }
#cv-pend { touch-action: none; }
.energy-panel { grid-column: 1 / -1; }
#cv-energy { aspect-ratio: auto; height: 96px; }
/* ---------- controls ---------- */
.deck { display: grid; grid-template-columns: 1fr 264px; gap: 14px; margin-top: 14px; }
.card { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px; }
.sliders { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 26px; align-content: start; }
.srow label { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: 13px; color: var(--ink-2); cursor: pointer; }
.srow output { font: 13px var(--mono); font-variant-numeric: tabular-nums; color: var(--ink); white-space: nowrap; }
.srow input[type="range"] { width: 100%; margin: 7px 0 0; accent-color: var(--accent); cursor: pointer; }
.preset {
font: 600 10.5px var(--mono); color: var(--ink-2); background: var(--panel-2);
border: 1px solid var(--line); border-radius: 5px; padding: 1px 6px; cursor: pointer;
}
.preset:hover { color: var(--accent-h); border-color: var(--accent); }
.presets { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.presets button { font: 600 12.5px var(--sans); color: var(--ink); background: var(--panel-2); border: 1px solid var(--line); border-radius: 999px; padding: 5px 14px; cursor: pointer; }
.presets button:hover { border-color: var(--accent); color: var(--accent-h); }
.presets button:focus-visible { outline: 2px solid var(--accent-h); outline-offset: 2px; }
.side { display: flex; flex-direction: column; gap: 14px; }
.playback { display: flex; gap: 10px; }
.btn {
flex: 1; font: 600 14px var(--sans); border: 0; border-radius: 9px; padding: 10px 12px; cursor: pointer;
}
.btn-accent { background: var(--accent); color: var(--accent-ink); }
.btn-accent:hover { background: var(--accent-h); }
.btn-ghost { background: var(--panel-2); color: var(--ink); border: 1px solid var(--line); }
.btn-ghost:hover { border-color: var(--ink-3); }
.kbd-hint { font-size: 11.5px; color: var(--ink-3); margin-top: 8px; }
.kbd-hint kbd { font: 11px var(--mono); background: var(--panel-2); border: 1px solid var(--line); border-radius: 4px; padding: 0 5px; }
.readouts { display: grid; grid-template-columns: auto 1fr; gap: 4px 14px; margin: 0; }
.readouts dt { font: italic 15px var(--serif); color: var(--ink-2); }
.readouts dd { margin: 0; font: 13.5px var(--mono); font-variant-numeric: tabular-nums; text-align: right; align-self: center; }
/* ---------- theory ---------- */
.theory { margin-top: 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); overflow: hidden; }
.theory summary {
list-style: none; cursor: pointer; padding: 12px 18px;
font: 600 14px var(--sans); color: #7fd6d6;
display: flex; align-items: center; gap: 10px;
}
.theory summary::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--teal); }
.theory summary::-webkit-details-marker { display: none; }
.theory summary:hover { color: #a9e6e6; }
.theory-body { padding: 4px 20px 18px; border-top: 1px solid var(--line); max-width: 72ch; }
.theory-body h3 { font: italic 400 19px var(--serif); margin: 18px 0 6px; }
.theory-body p { margin: 6px 0; color: var(--ink-2); font-size: 14px; }
.eq {
background: var(--canvas); border-radius: 8px; padding: 14px 16px; margin: 10px 0;
overflow-x: auto; text-align: center;
}
.eq svg { max-width: 100%; height: auto; vertical-align: middle; }
#btnRec.rec { color: #ff6b6b; border-color: #ff6b6b; }
.toast { position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%); background: var(--panel-2); border: 1px solid var(--line); color: var(--ink); font: 13px var(--sans); padding: 8px 16px; border-radius: 8px; opacity: 0; transition: opacity .25s; pointer-events: none; z-index: 9; }
.toast.show { opacity: 1; }
footer { margin-top: 18px; color: var(--ink-3); font-size: 12.5px; display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
footer .ms { font-family: var(--mono); font-variant-numeric: tabular-nums; }
footer a { color: var(--ink-2); }
@media (max-width: 860px) {
.stage, .deck, .sliders { grid-template-columns: 1fr; }
h1 { font-size: 32px; }
}
@media (max-width: 520px) {
.panel-head .hint { display: none; }
}
@media (prefers-reduced-motion: reduce) {
* { scroll-behavior: auto; }
}
</style>
<div class="app">
<header>
<div class="brand">
<div class="eyebrow">danySSG · 2023 → 2026</div>
<h1>Ма<em>я</em>тник</h1>
<p class="sub">наследник <code>pendulum</code> · <code>double-pendulum</code> · <code>my-first-binder</code> — теперь в реальном времени</p>
</div>
<nav class="tabs" aria-label="Режим">
<button data-mode="single" aria-pressed="true">Автономный</button>
<button data-mode="forced" aria-pressed="false">Вынужденный</button>
<button data-mode="double" aria-pressed="false">Двойной</button>
</nav>
</header>
<main>
<section class="stage">
<div class="panel">
<div class="panel-head">
<span class="panel-title">Маятник</span>
<label class="toggle" id="ghostsWrap" hidden title="8 клонов с отличием в θ₁ на 10⁻⁶ рад — чувствительность к начальным условиям"><input type="checkbox" id="ghosts"> призраки</label>
<span class="spacer"></span>
<span class="hint">грузик можно перетаскивать и бросать</span>
</div>
<canvas id="cv-pend" aria-label="Анимация маятника"></canvas>
</div>
<div class="panel">
<div class="panel-head">
<span class="panel-title">Фазовый портрет</span>
<span class="legend" id="legend"></span>
<span class="spacer"></span>
<label class="toggle" id="fieldWrap" title="Векторное поле направлений и сепаратриса"><input type="checkbox" id="field" checked> поле</label>
<div class="seg" id="viewSeg" role="group" aria-label="Вид фазового пространства">
<button type="button" data-v="flat" aria-pressed="true">плоскость</button>
<button type="button" data-v="wrap" aria-pressed="false" title="Обещание из ноутбука 2023 года: θ mod 2π">цилиндр</button>
<button type="button" data-v="cyl3d" aria-pressed="false" title="Траектория наматывается на настоящий цилиндр">3D</button>
</div>
</div>
<canvas id="cv-phase" aria-label="Фазовый портрет"></canvas>
</div>
<div class="panel energy-panel">
<div class="panel-head">
<span class="panel-title">Энергия E(t)</span>
</div>
<canvas id="cv-energy" aria-label="График полной энергии"></canvas>
</div>
</section>
<section class="deck">
<div class="card">
<div class="presets" id="presets"></div>
<div class="sliders" id="sliders"></div>
</div>
<div class="side">
<div class="card">
<div class="playback">
<button class="btn btn-accent" id="btnPlay">Пауза</button>
<button class="btn btn-ghost" id="btnReset">Сброс</button>
</div>
<div class="srow" style="margin-top:12px">
<label for="speed">Скорость времени <output id="speedOut">×1.00</output></label>
<input type="range" id="speed" min="0.1" max="3" step="0.05" value="1">
</div>
<div class="playback" style="margin-top:12px">
<button class="btn btn-ghost" id="btnRec">⏺ Записать видео</button>
<button class="btn btn-ghost" id="btnShare">Ссылка</button>
</div>
<p class="kbd-hint"><kbd>Пробел</kbd> — пауза · <kbd>R</kbd> — сброс</p>
</div>
<div class="card">
<dl class="readouts" id="readouts"></dl>
</div>
</div>
</section>
<details class="theory">
<summary>Читать теорию</summary>
<div class="theory-body">
<h3>Автономный маятник</h3>
<p>Груз массы <i>m</i> на невесомом стержне длины <i>l</i> в среде с вязкостью <i>b</i>:</p>
<div class="eq"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="50" role="img" aria-label="уравнение затухающего маятника" viewBox="0 0 189.7 36.8" xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> </defs> <g id="figure_1"> <g id="patch_1"> <path d="M 0 36.8 L 189.7 36.8 L 189.7 -0 L 0 -0 L 0 36.8 z " style="fill: none"/> </g> <g id="text_1"> <g style="fill: #ececec" transform="translate(4.32 25) scale(0.22 -0.22)"> <defs> <path id="Cmr10-5b" d="M 647 3950 Q 647 4084 742 4182 Q 838 4281 978 4281 Q 1119 4281 1216 4184 Q 1313 4088 1313 3950 Q 1313 3809 1216 3712 Q 1119 3616 978 3616 Q 838 3616 742 3714 Q 647 3813 647 3950 z M 1881 3950 Q 1881 4084 1976 4182 Q 2072 4281 2216 4281 Q 2353 4281 2450 4184 Q 2547 4088 2547 3950 Q 2547 3809 2450 3712 Q 2353 3616 2216 3616 Q 2072 3616 1976 3714 Q 1881 3813 1881 3950 z " transform="scale(0.015625)"/> <path id="Cmmi10-12" d="M 1031 -72 Q 741 -72 566 140 Q 391 353 323 653 Q 256 953 256 1247 L 256 1253 Q 256 1572 317 1915 Q 378 2259 493 2601 Q 609 2944 744 3213 Q 838 3400 986 3631 Q 1134 3863 1317 4064 Q 1500 4266 1711 4389 Q 1922 4513 2138 4513 L 2144 4513 Q 2375 4513 2529 4384 Q 2684 4256 2770 4056 Q 2856 3856 2890 3628 Q 2925 3400 2925 3194 Q 2925 2709 2794 2204 Q 2663 1700 2431 1228 Q 2344 1050 2189 809 Q 2034 569 1861 378 Q 1688 188 1472 58 Q 1256 -72 1038 -72 L 1031 -72 z M 1044 97 Q 1256 97 1451 323 Q 1647 550 1794 873 Q 1941 1197 2052 1536 Q 2163 1875 2216 2113 L 909 2113 Q 809 1709 753 1417 Q 697 1125 697 844 Q 697 97 1044 97 z M 959 2338 L 2272 2338 Q 2341 2619 2381 2808 Q 2422 2997 2450 3206 Q 2478 3416 2478 3597 Q 2478 4347 2138 4347 Q 1731 4347 1436 3692 Q 1141 3038 959 2338 z " transform="scale(0.015625)"/> <path id="Cmr10-29" d="M 481 850 Q 428 850 393 890 Q 359 931 359 978 Q 359 1031 393 1068 Q 428 1106 481 1106 L 4500 1106 Q 4547 1106 4581 1068 Q 4616 1031 4616 978 Q 4616 931 4581 890 Q 4547 850 4500 850 L 481 850 z M 481 2094 Q 428 2094 393 2131 Q 359 2169 359 2222 Q 359 2269 393 2309 Q 428 2350 481 2350 L 4500 2350 Q 4547 2350 4581 2309 Q 4616 2269 4616 2222 Q 4616 2169 4581 2131 Q 4547 2094 4500 2094 L 481 2094 z " transform="scale(0.015625)"/> <path id="Cmsy10-11" d="M 653 1472 Q 600 1472 565 1512 Q 531 1553 531 1600 Q 531 1647 565 1687 Q 600 1728 653 1728 L 4325 1728 Q 4375 1728 4408 1687 Q 4441 1647 4441 1600 Q 4441 1553 4408 1512 Q 4375 1472 4325 1472 L 653 1472 z " transform="scale(0.015625)"/> <path id="Cmmi10-2f" d="M 91 -916 Q 91 -759 198 -642 Q 306 -525 459 -525 Q 563 -525 633 -589 Q 703 -653 703 -756 Q 703 -872 637 -964 Q 572 -1056 469 -1094 Q 641 -1147 1006 -1147 Q 1300 -1147 1544 -920 Q 1788 -694 1863 -397 L 2047 353 Q 1700 0 1325 0 Q 1050 0 854 140 Q 659 281 556 515 Q 453 750 453 1013 Q 453 1306 573 1628 Q 694 1950 911 2225 Q 1128 2500 1409 2664 Q 1691 2828 2003 2828 Q 2191 2828 2341 2725 Q 2491 2622 2578 2450 Q 2641 2700 2853 2700 Q 2934 2700 2990 2651 Q 3047 2603 3047 2522 Q 3047 2503 3045 2493 Q 3044 2484 3041 2472 L 2309 -434 Q 2259 -634 2125 -800 Q 1991 -966 1809 -1077 Q 1628 -1188 1412 -1250 Q 1197 -1313 997 -1313 Q 631 -1313 361 -1242 Q 91 -1172 91 -916 z M 1338 166 Q 1747 166 2144 728 L 2497 2125 Q 2453 2347 2322 2505 Q 2191 2663 1991 2663 Q 1778 2663 1589 2489 Q 1400 2316 1275 2075 Q 1156 1844 1045 1411 Q 934 978 934 728 Q 934 509 1034 337 Q 1134 166 1338 166 z " transform="scale(0.015625)"/> <path id="Cmmi10-71" d="M 281 519 Q 281 538 286 575 Q 291 613 295 648 Q 300 684 300 703 L 1094 3872 Q 1119 3981 1125 4044 Q 1125 4147 709 4147 Q 647 4147 647 4231 Q 650 4247 661 4287 Q 672 4328 689 4350 Q 706 4372 738 4372 L 1600 4441 Q 1678 4441 1678 4359 L 756 678 Q 709 575 709 372 Q 709 97 897 97 Q 1094 97 1192 342 Q 1291 588 1369 941 Q 1381 978 1422 978 L 1497 978 Q 1522 978 1539 958 Q 1556 938 1556 916 Q 1481 606 1420 426 Q 1359 247 1225 87 Q 1091 -72 884 -72 Q 628 -72 454 93 Q 281 259 281 519 z " transform="scale(0.015625)"/> <path id="Cmr10-52" d="M 213 -19 L 213 1025 Q 213 1075 269 1075 L 347 1075 Q 384 1075 397 1025 Q 575 97 1259 97 Q 1563 97 1767 234 Q 1972 372 1972 659 Q 1972 866 1812 1011 Q 1653 1156 1434 1209 L 1006 1294 Q 791 1341 614 1437 Q 438 1534 325 1695 Q 213 1856 213 2069 Q 213 2350 361 2529 Q 509 2709 746 2789 Q 984 2869 1259 2869 Q 1588 2869 1831 2694 L 2016 2853 Q 2016 2869 2047 2869 L 2094 2869 Q 2113 2869 2128 2851 Q 2144 2834 2144 2816 L 2144 1978 Q 2144 1919 2094 1919 L 2016 1919 Q 1959 1919 1959 1978 Q 1959 2313 1773 2516 Q 1588 2719 1253 2719 Q 966 2719 755 2612 Q 544 2506 544 2247 Q 544 2069 695 1955 Q 847 1841 1050 1791 L 1484 1709 Q 1703 1659 1892 1540 Q 2081 1422 2192 1240 Q 2303 1059 2303 831 Q 2303 600 2223 429 Q 2144 259 2001 146 Q 1859 34 1665 -19 Q 1472 -72 1259 -72 Q 859 -72 575 197 L 341 -56 Q 341 -72 306 -72 L 269 -72 Q 213 -72 213 -19 z " transform="scale(0.015625)"/> <path id="Cmr10-24" d="M 197 0 L 197 225 Q 416 225 556 259 Q 697 294 697 428 L 697 2175 Q 697 2422 601 2478 Q 506 2534 225 2534 L 225 2759 L 1147 2828 L 1147 428 Q 1147 294 1269 259 Q 1391 225 1594 225 L 1594 0 L 197 0 z M 469 3928 Q 469 4069 575 4175 Q 681 4281 819 4281 Q 909 4281 993 4234 Q 1078 4188 1125 4103 Q 1172 4019 1172 3928 Q 1172 3791 1065 3684 Q 959 3578 819 3578 Q 681 3578 575 3684 Q 469 3791 469 3928 z " transform="scale(0.015625)"/> <path id="Cmr10-74" d="M 191 0 L 191 225 Q 409 225 550 259 Q 691 294 691 428 L 691 2175 Q 691 2347 639 2423 Q 588 2500 491 2517 Q 394 2534 191 2534 L 191 2759 L 1119 2828 L 1119 2203 Q 1247 2478 1498 2653 Q 1750 2828 2047 2828 Q 2491 2828 2714 2615 Q 2938 2403 2938 1966 L 2938 428 Q 2938 294 3078 259 Q 3219 225 3438 225 L 3438 0 L 1972 0 L 1972 225 Q 2191 225 2331 259 Q 2472 294 2472 428 L 2472 1947 Q 2472 2259 2381 2461 Q 2291 2663 2009 2663 Q 1638 2663 1398 2366 Q 1159 2069 1159 1691 L 1159 428 Q 1159 294 1300 259 Q 1441 225 1656 225 L 1656 0 L 191 0 z " transform="scale(0.015625)"/> <path id="Cmmi10-4b" d="M 1106 -72 Q 719 -72 503 231 Q 288 534 288 941 Q 288 1000 317 1173 Q 347 1347 347 1388 L 966 3872 Q 991 3981 997 4044 Q 997 4147 581 4147 Q 519 4147 519 4231 Q 522 4247 533 4287 Q 544 4328 561 4350 Q 578 4372 609 4372 L 1472 4441 Q 1550 4441 1550 4359 L 1075 2472 Q 1438 2828 1806 2828 Q 2078 2828 2273 2684 Q 2469 2541 2566 2306 Q 2663 2072 2663 1806 Q 2663 1497 2542 1167 Q 2422 838 2209 555 Q 1997 272 1712 100 Q 1428 -72 1106 -72 z M 1119 97 Q 1338 97 1528 280 Q 1719 463 1838 691 Q 1966 947 2077 1386 Q 2188 1825 2188 2088 Q 2188 2316 2092 2489 Q 1997 2663 1791 2663 Q 1559 2663 1348 2492 Q 1138 2322 978 2088 L 800 1363 Q 697 959 691 716 Q 691 475 795 286 Q 900 97 1119 97 z " transform="scale(0.015625)"/> <path id="Cmmi10-45" d="M 494 109 Q 494 147 500 166 L 978 2075 Q 1025 2253 1025 2388 Q 1025 2663 838 2663 Q 638 2663 541 2423 Q 444 2184 353 1819 Q 353 1800 334 1789 Q 316 1778 300 1778 L 225 1778 Q 203 1778 187 1801 Q 172 1825 172 1844 Q 241 2122 305 2315 Q 369 2509 505 2668 Q 641 2828 844 2828 Q 1084 2828 1268 2676 Q 1453 2525 1453 2291 Q 1644 2541 1900 2684 Q 2156 2828 2444 2828 Q 2747 2828 2967 2673 Q 3188 2519 3188 2234 Q 3384 2513 3648 2670 Q 3913 2828 4225 2828 Q 4556 2828 4757 2648 Q 4959 2469 4959 2138 Q 4959 1875 4842 1503 Q 4725 1131 4550 672 Q 4459 450 4459 288 Q 4459 97 4609 97 Q 4859 97 5025 365 Q 5191 634 5259 941 Q 5278 978 5313 978 L 5388 978 Q 5413 978 5430 961 Q 5447 944 5447 922 Q 5447 916 5441 903 Q 5353 541 5136 234 Q 4919 -72 4594 -72 Q 4369 -72 4209 83 Q 4050 238 4050 459 Q 4050 572 4103 709 Q 4284 1191 4404 1569 Q 4525 1947 4525 2234 Q 4525 2413 4453 2538 Q 4381 2663 4213 2663 Q 3863 2663 3606 2448 Q 3350 2234 3163 1881 Q 3150 1819 3144 1784 L 2731 141 Q 2709 53 2632 -9 Q 2556 -72 2463 -72 Q 2388 -72 2330 -22 Q 2272 28 2272 109 Q 2272 147 2278 166 L 2688 1797 Q 2753 2059 2753 2234 Q 2753 2413 2679 2538 Q 2606 2663 2431 2663 Q 2197 2663 2000 2559 Q 1803 2456 1656 2286 Q 1509 2116 1388 1881 L 953 141 Q 931 53 854 -9 Q 778 -72 684 -72 Q 606 -72 550 -22 Q 494 28 494 109 z " transform="scale(0.015625)"/> <path id="Cmr10-1a" d="M 538 3928 Q 538 4069 644 4175 Q 750 4281 891 4281 Q 978 4281 1062 4234 Q 1147 4188 1194 4103 Q 1241 4019 1241 3928 Q 1241 3791 1137 3684 Q 1034 3578 891 3578 Q 750 3578 644 3684 Q 538 3791 538 3928 z " transform="scale(0.015625)"/> </defs> <use xlink:href="#Cmr10-5b" transform="translate(4.621582 26.515625)"/> <use xlink:href="#Cmmi10-12"/> <use xlink:href="#Cmr10-29" transform="translate(66.923885 0)"/> <use xlink:href="#Cmsy10-11" transform="translate(164.609489 0)"/> <use xlink:href="#Cmmi10-2f" transform="translate(248.545036 48.735937) scale(0.7)"/> <use xlink:href="#Cmmi10-71" transform="translate(254.545036 -32.948437) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(304.855639 0)"/> <use xlink:href="#Cmr10-24" transform="translate(344.259936 0)"/> <use xlink:href="#Cmr10-74" transform="translate(371.945482 0)"/> <use xlink:href="#Cmmi10-12" transform="translate(444.130108 0)"/> <use xlink:href="#Cmsy10-11" transform="translate(538.832073 0)"/> <use xlink:href="#Cmmi10-4b" transform="translate(696.545757 35.1625) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(670.545757 -32.948438) scale(0.7)"/> <use xlink:href="#Cmmi10-71" transform="translate(732.000835 -32.948438) scale(0.7)"/> <use xlink:href="#Cmr10-1a" transform="translate(791.092199 27.109375)"/> <use xlink:href="#Cmmi10-12" transform="translate(775.767492 0)"/> <path d="M 248.545036 21.875 L 248.545036 28.125 L 281.938591 28.125 L 281.938591 21.875 L 248.545036 21.875 z "/> <path d="M 670.545757 21.875 L 670.545757 28.125 L 752.850444 28.125 L 752.850444 21.875 L 670.545757 21.875 z "/> </g> </g> </g> </svg></div>
<h3>Маятник с периодическим возмущением</h3>
<p>К автономному уравнению добавляется вынуждающий момент с экспоненциально меняющейся амплитудой:</p>
<div class="eq"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="463" height="50" role="img" aria-label="уравнение маятника с периодическим возмущением" viewBox="0 0 342.82 36.8" xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> </defs> <g id="figure_1"> <g id="patch_1"> <path d="M 0 36.8 L 342.82 36.8 L 342.82 -0 L 0 -0 L 0 36.8 z " style="fill: none"/> </g> <g id="text_1"> <g style="fill: #ececec" transform="translate(4.32 25) scale(0.22 -0.22)"> <defs> <path id="Cmr10-5b" d="M 647 3950 Q 647 4084 742 4182 Q 838 4281 978 4281 Q 1119 4281 1216 4184 Q 1313 4088 1313 3950 Q 1313 3809 1216 3712 Q 1119 3616 978 3616 Q 838 3616 742 3714 Q 647 3813 647 3950 z M 1881 3950 Q 1881 4084 1976 4182 Q 2072 4281 2216 4281 Q 2353 4281 2450 4184 Q 2547 4088 2547 3950 Q 2547 3809 2450 3712 Q 2353 3616 2216 3616 Q 2072 3616 1976 3714 Q 1881 3813 1881 3950 z " transform="scale(0.015625)"/> <path id="Cmmi10-12" d="M 1031 -72 Q 741 -72 566 140 Q 391 353 323 653 Q 256 953 256 1247 L 256 1253 Q 256 1572 317 1915 Q 378 2259 493 2601 Q 609 2944 744 3213 Q 838 3400 986 3631 Q 1134 3863 1317 4064 Q 1500 4266 1711 4389 Q 1922 4513 2138 4513 L 2144 4513 Q 2375 4513 2529 4384 Q 2684 4256 2770 4056 Q 2856 3856 2890 3628 Q 2925 3400 2925 3194 Q 2925 2709 2794 2204 Q 2663 1700 2431 1228 Q 2344 1050 2189 809 Q 2034 569 1861 378 Q 1688 188 1472 58 Q 1256 -72 1038 -72 L 1031 -72 z M 1044 97 Q 1256 97 1451 323 Q 1647 550 1794 873 Q 1941 1197 2052 1536 Q 2163 1875 2216 2113 L 909 2113 Q 809 1709 753 1417 Q 697 1125 697 844 Q 697 97 1044 97 z M 959 2338 L 2272 2338 Q 2341 2619 2381 2808 Q 2422 2997 2450 3206 Q 2478 3416 2478 3597 Q 2478 4347 2138 4347 Q 1731 4347 1436 3692 Q 1141 3038 959 2338 z " transform="scale(0.015625)"/> <path id="Cmr10-29" d="M 481 850 Q 428 850 393 890 Q 359 931 359 978 Q 359 1031 393 1068 Q 428 1106 481 1106 L 4500 1106 Q 4547 1106 4581 1068 Q 4616 1031 4616 978 Q 4616 931 4581 890 Q 4547 850 4500 850 L 481 850 z M 481 2094 Q 428 2094 393 2131 Q 359 2169 359 2222 Q 359 2269 393 2309 Q 428 2350 481 2350 L 4500 2350 Q 4547 2350 4581 2309 Q 4616 2269 4616 2222 Q 4616 2169 4581 2131 Q 4547 2094 4500 2094 L 481 2094 z " transform="scale(0.015625)"/> <path id="Cmmi10-3" d="M 1288 -72 Q 981 -72 751 87 Q 522 247 401 517 Q 281 788 281 1088 Q 281 1544 511 1945 Q 741 2347 1134 2587 Q 1528 2828 1978 2828 Q 2253 2828 2458 2686 Q 2663 2544 2663 2278 Q 2663 1909 2369 1729 Q 2075 1550 1706 1508 Q 1338 1466 891 1466 L 872 1466 Q 769 1084 769 813 Q 769 528 900 312 Q 1031 97 1300 97 Q 1681 97 2032 272 Q 2384 447 2606 756 Q 2625 775 2656 775 Q 2688 775 2720 739 Q 2753 703 2753 672 Q 2753 647 2741 634 Q 2506 306 2109 117 Q 1713 -72 1288 -72 z M 909 1631 Q 1281 1631 1597 1665 Q 1913 1700 2169 1839 Q 2425 1978 2425 2272 Q 2425 2391 2359 2480 Q 2294 2569 2189 2616 Q 2084 2663 1972 2663 Q 1700 2663 1483 2516 Q 1266 2369 1125 2133 Q 984 1897 909 1631 z " transform="scale(0.015625)"/> <path id="Cmmi10-79" d="M 1113 -72 Q 709 -72 476 233 Q 244 538 244 953 Q 244 1363 456 1803 Q 669 2244 1030 2536 Q 1391 2828 1806 2828 Q 1997 2828 2147 2725 Q 2297 2622 2381 2444 Q 2453 2700 2663 2700 Q 2744 2700 2798 2651 Q 2853 2603 2853 2522 Q 2853 2503 2851 2493 Q 2850 2484 2847 2472 L 2400 684 Q 2356 494 2356 372 Q 2356 97 2541 97 Q 2741 97 2845 351 Q 2950 606 3022 941 Q 3034 978 3072 978 L 3150 978 Q 3175 978 3190 956 Q 3206 934 3206 916 Q 3094 469 2961 198 Q 2828 -72 2528 -72 Q 2313 -72 2147 54 Q 1981 181 1941 391 Q 1528 -72 1113 -72 z M 1119 97 Q 1350 97 1567 270 Q 1784 444 1941 678 Q 1947 684 1947 697 L 2291 2088 L 2297 2106 Q 2259 2334 2132 2498 Q 2006 2663 1791 2663 Q 1575 2663 1389 2486 Q 1203 2309 1075 2069 Q 950 1813 836 1366 Q 722 919 722 672 Q 722 450 817 273 Q 913 97 1119 97 z " transform="scale(0.015625)"/> <path id="Cmr10-64" d="M 594 0 L 594 225 Q 1394 225 1394 428 L 1394 3788 Q 1063 3628 556 3628 L 556 3853 Q 1341 3853 1741 4263 L 1831 4263 Q 1853 4263 1873 4245 Q 1894 4228 1894 4206 L 1894 428 Q 1894 225 2694 225 L 2694 0 L 594 0 z " transform="scale(0.015625)"/> <path id="Cmmi10-30" d="M 397 519 Q 397 613 416 697 L 878 2534 L 206 2534 Q 141 2534 141 2619 Q 166 2759 225 2759 L 934 2759 L 1191 3803 Q 1216 3888 1291 3947 Q 1366 4006 1459 4006 Q 1541 4006 1595 3957 Q 1650 3909 1650 3828 Q 1650 3809 1648 3798 Q 1647 3788 1644 3775 L 1388 2759 L 2047 2759 Q 2113 2759 2113 2675 Q 2109 2659 2100 2621 Q 2091 2584 2075 2559 Q 2059 2534 2028 2534 L 1331 2534 L 872 684 Q 825 503 825 372 Q 825 97 1013 97 Q 1294 97 1511 361 Q 1728 625 1844 941 Q 1869 978 1894 978 L 1972 978 Q 1997 978 2012 961 Q 2028 944 2028 922 Q 2028 909 2022 903 Q 1881 516 1612 222 Q 1344 -72 997 -72 Q 744 -72 570 93 Q 397 259 397 519 z " transform="scale(0.015625)"/> <path id="Cmmi10-62" d="M 359 -1472 Q 359 -1453 366 -1447 L 2591 4722 Q 2603 4759 2634 4779 Q 2666 4800 2706 4800 Q 2763 4800 2798 4765 Q 2834 4731 2834 4672 L 2834 4647 L 609 -1522 Q 572 -1600 488 -1600 Q 434 -1600 396 -1562 Q 359 -1525 359 -1472 z " transform="scale(0.015625)"/> <path id="Cmr10-6e" d="M 609 494 Q 759 275 1012 169 Q 1266 63 1556 63 Q 1928 63 2084 380 Q 2241 697 2241 1100 Q 2241 1281 2208 1462 Q 2175 1644 2097 1800 Q 2019 1956 1883 2050 Q 1747 2144 1550 2144 L 1125 2144 Q 1069 2144 1069 2203 L 1069 2259 Q 1069 2309 1125 2309 L 1478 2338 Q 1703 2338 1851 2506 Q 2000 2675 2069 2917 Q 2138 3159 2138 3378 Q 2138 3684 1994 3881 Q 1850 4078 1556 4078 Q 1313 4078 1091 3986 Q 869 3894 738 3706 Q 750 3709 759 3711 Q 769 3713 781 3713 Q 925 3713 1022 3613 Q 1119 3513 1119 3372 Q 1119 3234 1022 3134 Q 925 3034 781 3034 Q 641 3034 541 3134 Q 441 3234 441 3372 Q 441 3647 606 3850 Q 772 4053 1033 4158 Q 1294 4263 1556 4263 Q 1750 4263 1965 4205 Q 2181 4147 2356 4039 Q 2531 3931 2642 3762 Q 2753 3594 2753 3378 Q 2753 3109 2633 2881 Q 2513 2653 2303 2487 Q 2094 2322 1844 2241 Q 2122 2188 2372 2031 Q 2622 1875 2773 1631 Q 2925 1388 2925 1106 Q 2925 753 2731 467 Q 2538 181 2222 20 Q 1906 -141 1556 -141 Q 1256 -141 954 -26 Q 653 88 461 316 Q 269 544 269 863 Q 269 1022 375 1128 Q 481 1234 641 1234 Q 744 1234 830 1186 Q 916 1138 964 1050 Q 1013 963 1013 863 Q 1013 706 903 600 Q 794 494 641 494 L 609 494 z " transform="scale(0.015625)"/> <path id="Cmr10-28" d="M 1600 -141 Q 816 -141 533 504 Q 250 1150 250 2041 Q 250 2597 351 3087 Q 453 3578 754 3920 Q 1056 4263 1600 4263 Q 2022 4263 2290 4056 Q 2559 3850 2700 3523 Q 2841 3197 2892 2823 Q 2944 2450 2944 2041 Q 2944 1491 2842 1011 Q 2741 531 2444 195 Q 2147 -141 1600 -141 z M 1600 25 Q 1956 25 2131 390 Q 2306 756 2347 1200 Q 2388 1644 2388 2144 Q 2388 2625 2347 3031 Q 2306 3438 2132 3767 Q 1959 4097 1600 4097 Q 1238 4097 1063 3765 Q 888 3434 847 3029 Q 806 2625 806 2144 Q 806 1788 823 1472 Q 841 1156 916 820 Q 991 484 1158 254 Q 1325 25 1600 25 z " transform="scale(0.015625)"/> <path id="Cmr10-7b" d="M 1594 -72 Q 1206 -72 890 129 Q 575 331 394 667 Q 213 1003 213 1381 Q 213 1759 392 2106 Q 572 2453 889 2661 Q 1206 2869 1594 2869 Q 1969 2869 2276 2722 Q 2584 2575 2584 2241 Q 2584 2116 2495 2023 Q 2406 1931 2278 1931 Q 2150 1931 2061 2023 Q 1972 2116 1972 2241 Q 1972 2353 2044 2436 Q 2116 2519 2222 2541 Q 2000 2681 1600 2681 Q 1294 2681 1106 2478 Q 919 2275 844 1975 Q 769 1675 769 1381 Q 769 1072 861 783 Q 953 494 1158 305 Q 1363 116 1672 116 Q 1975 116 2187 302 Q 2400 488 2478 788 Q 2478 825 2528 825 L 2606 825 Q 2625 825 2640 808 Q 2656 791 2656 769 L 2656 750 Q 2559 372 2271 150 Q 1984 -72 1594 -72 z " transform="scale(0.015625)"/> <path id="Cmr10-42" d="M 1600 -72 Q 1216 -72 887 123 Q 559 319 368 647 Q 178 975 178 1363 Q 178 1656 283 1928 Q 388 2200 583 2414 Q 778 2628 1037 2748 Q 1297 2869 1600 2869 Q 1994 2869 2317 2661 Q 2641 2453 2828 2104 Q 3016 1756 3016 1363 Q 3016 978 2825 648 Q 2634 319 2307 123 Q 1981 -72 1600 -72 z M 1600 116 Q 2113 116 2284 487 Q 2456 859 2456 1434 Q 2456 1756 2422 1967 Q 2388 2178 2272 2350 Q 2200 2456 2089 2536 Q 1978 2616 1854 2658 Q 1731 2700 1600 2700 Q 1400 2700 1220 2609 Q 1041 2519 922 2350 Q 803 2169 770 1951 Q 738 1734 738 1434 Q 738 1075 800 789 Q 863 503 1052 309 Q 1241 116 1600 116 z " transform="scale(0.015625)"/> <path id="Cmr10-52" d="M 213 -19 L 213 1025 Q 213 1075 269 1075 L 347 1075 Q 384 1075 397 1025 Q 575 97 1259 97 Q 1563 97 1767 234 Q 1972 372 1972 659 Q 1972 866 1812 1011 Q 1653 1156 1434 1209 L 1006 1294 Q 791 1341 614 1437 Q 438 1534 325 1695 Q 213 1856 213 2069 Q 213 2350 361 2529 Q 509 2709 746 2789 Q 984 2869 1259 2869 Q 1588 2869 1831 2694 L 2016 2853 Q 2016 2869 2047 2869 L 2094 2869 Q 2113 2869 2128 2851 Q 2144 2834 2144 2816 L 2144 1978 Q 2144 1919 2094 1919 L 2016 1919 Q 1959 1919 1959 1978 Q 1959 2313 1773 2516 Q 1588 2719 1253 2719 Q 966 2719 755 2612 Q 544 2506 544 2247 Q 544 2069 695 1955 Q 847 1841 1050 1791 L 1484 1709 Q 1703 1659 1892 1540 Q 2081 1422 2192 1240 Q 2303 1059 2303 831 Q 2303 600 2223 429 Q 2144 259 2001 146 Q 1859 34 1665 -19 Q 1472 -72 1259 -72 Q 859 -72 575 197 L 341 -56 Q 341 -72 306 -72 L 269 -72 Q 213 -72 213 -19 z " transform="scale(0.015625)"/> <path id="Cmr10-77" d="M 1984 -1588 Q 1628 -1306 1370 -942 Q 1113 -578 948 -165 Q 784 247 703 697 Q 622 1147 622 1600 Q 622 2059 703 2509 Q 784 2959 951 3375 Q 1119 3791 1378 4153 Q 1638 4516 1984 4788 Q 1984 4800 2016 4800 L 2075 4800 Q 2094 4800 2109 4783 Q 2125 4766 2125 4744 Q 2125 4716 2113 4703 Q 1800 4397 1592 4047 Q 1384 3697 1257 3301 Q 1131 2906 1075 2482 Q 1019 2059 1019 1600 Q 1019 -434 2106 -1491 Q 2125 -1509 2125 -1544 Q 2125 -1559 2108 -1579 Q 2091 -1600 2075 -1600 L 2016 -1600 Q 1984 -1600 1984 -1588 z " transform="scale(0.015625)"/> <path id="Cmr10-31" d="M 319 0 L 319 172 Q 319 188 331 206 L 1325 1306 Q 1550 1550 1690 1715 Q 1831 1881 1968 2097 Q 2106 2313 2186 2536 Q 2266 2759 2266 3009 Q 2266 3272 2169 3511 Q 2072 3750 1880 3894 Q 1688 4038 1416 4038 Q 1138 4038 916 3870 Q 694 3703 603 3438 Q 628 3444 672 3444 Q 816 3444 917 3347 Q 1019 3250 1019 3097 Q 1019 2950 917 2848 Q 816 2747 672 2747 Q 522 2747 420 2851 Q 319 2956 319 3097 Q 319 3338 409 3548 Q 500 3759 670 3923 Q 841 4088 1055 4175 Q 1269 4263 1509 4263 Q 1875 4263 2190 4108 Q 2506 3953 2690 3670 Q 2875 3388 2875 3009 Q 2875 2731 2753 2481 Q 2631 2231 2440 2026 Q 2250 1822 1953 1562 Q 1656 1303 1563 1216 L 838 519 L 1453 519 Q 1906 519 2211 526 Q 2516 534 2534 550 Q 2609 631 2688 1141 L 2875 1141 L 2694 0 L 319 0 z " transform="scale(0.015625)"/> <path id="Cmr10-44" d="M 416 -1600 Q 359 -1600 359 -1544 Q 359 -1516 372 -1503 Q 1466 -434 1466 1600 Q 1466 3634 384 4691 Q 359 4706 359 4744 Q 359 4766 376 4783 Q 394 4800 416 4800 L 475 4800 Q 494 4800 506 4788 Q 966 4425 1272 3906 Q 1578 3388 1720 2800 Q 1863 2213 1863 1600 Q 1863 1147 1786 708 Q 1709 269 1542 -157 Q 1375 -584 1119 -945 Q 863 -1306 506 -1588 Q 494 -1600 475 -1600 L 416 -1600 z " transform="scale(0.015625)"/> <path id="Cmsy10-11" d="M 653 1472 Q 600 1472 565 1512 Q 531 1553 531 1600 Q 531 1647 565 1687 Q 600 1728 653 1728 L 4325 1728 Q 4375 1728 4408 1687 Q 4441 1647 4441 1600 Q 4441 1553 4408 1512 Q 4375 1472 4325 1472 L 653 1472 z " transform="scale(0.015625)"/> <path id="Cmmi10-2f" d="M 91 -916 Q 91 -759 198 -642 Q 306 -525 459 -525 Q 563 -525 633 -589 Q 703 -653 703 -756 Q 703 -872 637 -964 Q 572 -1056 469 -1094 Q 641 -1147 1006 -1147 Q 1300 -1147 1544 -920 Q 1788 -694 1863 -397 L 2047 353 Q 1700 0 1325 0 Q 1050 0 854 140 Q 659 281 556 515 Q 453 750 453 1013 Q 453 1306 573 1628 Q 694 1950 911 2225 Q 1128 2500 1409 2664 Q 1691 2828 2003 2828 Q 2191 2828 2341 2725 Q 2491 2622 2578 2450 Q 2641 2700 2853 2700 Q 2934 2700 2990 2651 Q 3047 2603 3047 2522 Q 3047 2503 3045 2493 Q 3044 2484 3041 2472 L 2309 -434 Q 2259 -634 2125 -800 Q 1991 -966 1809 -1077 Q 1628 -1188 1412 -1250 Q 1197 -1313 997 -1313 Q 631 -1313 361 -1242 Q 91 -1172 91 -916 z M 1338 166 Q 1747 166 2144 728 L 2497 2125 Q 2453 2347 2322 2505 Q 2191 2663 1991 2663 Q 1778 2663 1589 2489 Q 1400 2316 1275 2075 Q 1156 1844 1045 1411 Q 934 978 934 728 Q 934 509 1034 337 Q 1134 166 1338 166 z " transform="scale(0.015625)"/> <path id="Cmmi10-71" d="M 281 519 Q 281 538 286 575 Q 291 613 295 648 Q 300 684 300 703 L 1094 3872 Q 1119 3981 1125 4044 Q 1125 4147 709 4147 Q 647 4147 647 4231 Q 650 4247 661 4287 Q 672 4328 689 4350 Q 706 4372 738 4372 L 1600 4441 Q 1678 4441 1678 4359 L 756 678 Q 709 575 709 372 Q 709 97 897 97 Q 1094 97 1192 342 Q 1291 588 1369 941 Q 1381 978 1422 978 L 1497 978 Q 1522 978 1539 958 Q 1556 938 1556 916 Q 1481 606 1420 426 Q 1359 247 1225 87 Q 1091 -72 884 -72 Q 628 -72 454 93 Q 281 259 281 519 z " transform="scale(0.015625)"/> <path id="Cmr10-24" d="M 197 0 L 197 225 Q 416 225 556 259 Q 697 294 697 428 L 697 2175 Q 697 2422 601 2478 Q 506 2534 225 2534 L 225 2759 L 1147 2828 L 1147 428 Q 1147 294 1269 259 Q 1391 225 1594 225 L 1594 0 L 197 0 z M 469 3928 Q 469 4069 575 4175 Q 681 4281 819 4281 Q 909 4281 993 4234 Q 1078 4188 1125 4103 Q 1172 4019 1172 3928 Q 1172 3791 1065 3684 Q 959 3578 819 3578 Q 681 3578 575 3684 Q 469 3791 469 3928 z " transform="scale(0.015625)"/> <path id="Cmr10-74" d="M 191 0 L 191 225 Q 409 225 550 259 Q 691 294 691 428 L 691 2175 Q 691 2347 639 2423 Q 588 2500 491 2517 Q 394 2534 191 2534 L 191 2759 L 1119 2828 L 1119 2203 Q 1247 2478 1498 2653 Q 1750 2828 2047 2828 Q 2491 2828 2714 2615 Q 2938 2403 2938 1966 L 2938 428 Q 2938 294 3078 259 Q 3219 225 3438 225 L 3438 0 L 1972 0 L 1972 225 Q 2191 225 2331 259 Q 2472 294 2472 428 L 2472 1947 Q 2472 2259 2381 2461 Q 2291 2663 2009 2663 Q 1638 2663 1398 2366 Q 1159 2069 1159 1691 L 1159 428 Q 1159 294 1300 259 Q 1441 225 1656 225 L 1656 0 L 191 0 z " transform="scale(0.015625)"/> <path id="Cmmi10-4b" d="M 1106 -72 Q 719 -72 503 231 Q 288 534 288 941 Q 288 1000 317 1173 Q 347 1347 347 1388 L 966 3872 Q 991 3981 997 4044 Q 997 4147 581 4147 Q 519 4147 519 4231 Q 522 4247 533 4287 Q 544 4328 561 4350 Q 578 4372 609 4372 L 1472 4441 Q 1550 4441 1550 4359 L 1075 2472 Q 1438 2828 1806 2828 Q 2078 2828 2273 2684 Q 2469 2541 2566 2306 Q 2663 2072 2663 1806 Q 2663 1497 2542 1167 Q 2422 838 2209 555 Q 1997 272 1712 100 Q 1428 -72 1106 -72 z M 1119 97 Q 1338 97 1528 280 Q 1719 463 1838 691 Q 1966 947 2077 1386 Q 2188 1825 2188 2088 Q 2188 2316 2092 2489 Q 1997 2663 1791 2663 Q 1559 2663 1348 2492 Q 1138 2322 978 2088 L 800 1363 Q 697 959 691 716 Q 691 475 795 286 Q 900 97 1119 97 z " transform="scale(0.015625)"/> <path id="Cmmi10-45" d="M 494 109 Q 494 147 500 166 L 978 2075 Q 1025 2253 1025 2388 Q 1025 2663 838 2663 Q 638 2663 541 2423 Q 444 2184 353 1819 Q 353 1800 334 1789 Q 316 1778 300 1778 L 225 1778 Q 203 1778 187 1801 Q 172 1825 172 1844 Q 241 2122 305 2315 Q 369 2509 505 2668 Q 641 2828 844 2828 Q 1084 2828 1268 2676 Q 1453 2525 1453 2291 Q 1644 2541 1900 2684 Q 2156 2828 2444 2828 Q 2747 2828 2967 2673 Q 3188 2519 3188 2234 Q 3384 2513 3648 2670 Q 3913 2828 4225 2828 Q 4556 2828 4757 2648 Q 4959 2469 4959 2138 Q 4959 1875 4842 1503 Q 4725 1131 4550 672 Q 4459 450 4459 288 Q 4459 97 4609 97 Q 4859 97 5025 365 Q 5191 634 5259 941 Q 5278 978 5313 978 L 5388 978 Q 5413 978 5430 961 Q 5447 944 5447 922 Q 5447 916 5441 903 Q 5353 541 5136 234 Q 4919 -72 4594 -72 Q 4369 -72 4209 83 Q 4050 238 4050 459 Q 4050 572 4103 709 Q 4284 1191 4404 1569 Q 4525 1947 4525 2234 Q 4525 2413 4453 2538 Q 4381 2663 4213 2663 Q 3863 2663 3606 2448 Q 3350 2234 3163 1881 Q 3150 1819 3144 1784 L 2731 141 Q 2709 53 2632 -9 Q 2556 -72 2463 -72 Q 2388 -72 2330 -22 Q 2272 28 2272 109 Q 2272 147 2278 166 L 2688 1797 Q 2753 2059 2753 2234 Q 2753 2413 2679 2538 Q 2606 2663 2431 2663 Q 2197 2663 2000 2559 Q 1803 2456 1656 2286 Q 1509 2116 1388 1881 L 953 141 Q 931 53 854 -9 Q 778 -72 684 -72 Q 606 -72 550 -22 Q 494 28 494 109 z " transform="scale(0.015625)"/> <path id="Cmr10-1a" d="M 538 3928 Q 538 4069 644 4175 Q 750 4281 891 4281 Q 978 4281 1062 4234 Q 1147 4188 1194 4103 Q 1241 4019 1241 3928 Q 1241 3791 1137 3684 Q 1034 3578 891 3578 Q 750 3578 644 3684 Q 538 3791 538 3928 z " transform="scale(0.015625)"/> </defs> <use xlink:href="#Cmr10-5b" transform="translate(4.621582 26.515625)"/> <use xlink:href="#Cmmi10-12"/> <use xlink:href="#Cmr10-29" transform="translate(66.923885 0)"/> <use xlink:href="#Cmmi10-3" transform="translate(164.609489 0)"/> <use xlink:href="#Cmmi10-79" transform="translate(222.354046 41.289234) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(259.302288 30.789261) scale(0.49)"/> <use xlink:href="#Cmmi10-30" transform="translate(287.806579 41.289234) scale(0.7)"/> <use xlink:href="#Cmmi10-62" transform="translate(313.065368 41.289234) scale(0.7)"/> <use xlink:href="#Cmr10-6e" transform="translate(348.065368 41.289234) scale(0.7)"/> <use xlink:href="#Cmr10-28" transform="translate(383.065368 41.289234) scale(0.7)"/> <use xlink:href="#Cmr10-7b" transform="translate(423.785784 0)"/> <use xlink:href="#Cmr10-42" transform="translate(468.170549 0)"/> <use xlink:href="#Cmr10-52" transform="translate(518.170549 0)"/> <use xlink:href="#Cmr10-77" transform="translate(557.574846 0)"/> <use xlink:href="#Cmmi10-79" transform="translate(596.393206 0)"/> <use xlink:href="#Cmr10-31" transform="translate(649.176409 -14.999962) scale(0.7)"/> <use xlink:href="#Cmmi10-30" transform="translate(689.896824 0)"/> <use xlink:href="#Cmr10-44" transform="translate(725.980809 0)"/> <use xlink:href="#Cmsy10-11" transform="translate(812.577305 0)"/> <use xlink:href="#Cmmi10-2f" transform="translate(944.290988 48.735937) scale(0.7)"/> <use xlink:href="#Cmmi10-71" transform="translate(950.290988 -32.948437) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1000.601591 0)"/> <use xlink:href="#Cmr10-24" transform="translate(1040.005888 0)"/> <use xlink:href="#Cmr10-74" transform="translate(1067.691434 0)"/> <use xlink:href="#Cmmi10-12" transform="translate(1139.87606 0)"/> <use xlink:href="#Cmsy10-11" transform="translate(1234.578025 0)"/> <use xlink:href="#Cmmi10-4b" transform="translate(1392.291709 35.1625) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1366.291709 -32.948438) scale(0.7)"/> <use xlink:href="#Cmmi10-71" transform="translate(1427.746787 -32.948438) scale(0.7)"/> <use xlink:href="#Cmr10-1a" transform="translate(1486.838151 27.109375)"/> <use xlink:href="#Cmmi10-12" transform="translate(1471.513444 0)"/> <path d="M 944.290988 21.875 L 944.290988 28.125 L 977.684543 28.125 L 977.684543 21.875 L 944.290988 21.875 z "/> <path d="M 1366.291709 21.875 L 1366.291709 28.125 L 1448.596396 28.125 L 1448.596396 21.875 L 1366.291709 21.875 z "/> </g> </g> </g> </svg></div>
<h3>Двойной маятник</h3>
<p>Углы θ₁, θ₂ отсчитываются от вертикали; уравнения получаются из лагранжиана (вывод — в theory.pdf оригинального репозитория):</p>
<div class="eq"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="694" height="60" role="img" aria-label="угловое ускорение первого груза двойного маятника" viewBox="0 0 514.04 44.17" xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> </defs> <g id="figure_1"> <g id="patch_1"> <path d="M 0 44.17 L 514.04 44.17 L 514.04 -0 L 0 -0 L 0 44.17 z " style="fill: none"/> </g> <g id="text_1"> <g style="fill: #ececec" transform="translate(4.32 29.4) scale(0.19 -0.19)"> <defs> <path id="Cmr10-5b" d="M 647 3950 Q 647 4084 742 4182 Q 838 4281 978 4281 Q 1119 4281 1216 4184 Q 1313 4088 1313 3950 Q 1313 3809 1216 3712 Q 1119 3616 978 3616 Q 838 3616 742 3714 Q 647 3813 647 3950 z M 1881 3950 Q 1881 4084 1976 4182 Q 2072 4281 2216 4281 Q 2353 4281 2450 4184 Q 2547 4088 2547 3950 Q 2547 3809 2450 3712 Q 2353 3616 2216 3616 Q 2072 3616 1976 3714 Q 1881 3813 1881 3950 z " transform="scale(0.015625)"/> <path id="Cmmi10-12" d="M 1031 -72 Q 741 -72 566 140 Q 391 353 323 653 Q 256 953 256 1247 L 256 1253 Q 256 1572 317 1915 Q 378 2259 493 2601 Q 609 2944 744 3213 Q 838 3400 986 3631 Q 1134 3863 1317 4064 Q 1500 4266 1711 4389 Q 1922 4513 2138 4513 L 2144 4513 Q 2375 4513 2529 4384 Q 2684 4256 2770 4056 Q 2856 3856 2890 3628 Q 2925 3400 2925 3194 Q 2925 2709 2794 2204 Q 2663 1700 2431 1228 Q 2344 1050 2189 809 Q 2034 569 1861 378 Q 1688 188 1472 58 Q 1256 -72 1038 -72 L 1031 -72 z M 1044 97 Q 1256 97 1451 323 Q 1647 550 1794 873 Q 1941 1197 2052 1536 Q 2163 1875 2216 2113 L 909 2113 Q 809 1709 753 1417 Q 697 1125 697 844 Q 697 97 1044 97 z M 959 2338 L 2272 2338 Q 2341 2619 2381 2808 Q 2422 2997 2450 3206 Q 2478 3416 2478 3597 Q 2478 4347 2138 4347 Q 1731 4347 1436 3692 Q 1141 3038 959 2338 z " transform="scale(0.015625)"/> <path id="Cmr10-64" d="M 594 0 L 594 225 Q 1394 225 1394 428 L 1394 3788 Q 1063 3628 556 3628 L 556 3853 Q 1341 3853 1741 4263 L 1831 4263 Q 1853 4263 1873 4245 Q 1894 4228 1894 4206 L 1894 428 Q 1894 225 2694 225 L 2694 0 L 594 0 z " transform="scale(0.015625)"/> <path id="Cmr10-29" d="M 481 850 Q 428 850 393 890 Q 359 931 359 978 Q 359 1031 393 1068 Q 428 1106 481 1106 L 4500 1106 Q 4547 1106 4581 1068 Q 4616 1031 4616 978 Q 4616 931 4581 890 Q 4547 850 4500 850 L 481 850 z M 481 2094 Q 428 2094 393 2131 Q 359 2169 359 2222 Q 359 2269 393 2309 Q 428 2350 481 2350 L 4500 2350 Q 4547 2350 4581 2309 Q 4616 2269 4616 2222 Q 4616 2169 4581 2131 Q 4547 2094 4500 2094 L 481 2094 z " transform="scale(0.015625)"/> <path id="Cmsy10-11" d="M 653 1472 Q 600 1472 565 1512 Q 531 1553 531 1600 Q 531 1647 565 1687 Q 600 1728 653 1728 L 4325 1728 Q 4375 1728 4408 1687 Q 4441 1647 4441 1600 Q 4441 1553 4408 1512 Q 4375 1472 4325 1472 L 653 1472 z " transform="scale(0.015625)"/> <path id="Cmmi10-2f" d="M 91 -916 Q 91 -759 198 -642 Q 306 -525 459 -525 Q 563 -525 633 -589 Q 703 -653 703 -756 Q 703 -872 637 -964 Q 572 -1056 469 -1094 Q 641 -1147 1006 -1147 Q 1300 -1147 1544 -920 Q 1788 -694 1863 -397 L 2047 353 Q 1700 0 1325 0 Q 1050 0 854 140 Q 659 281 556 515 Q 453 750 453 1013 Q 453 1306 573 1628 Q 694 1950 911 2225 Q 1128 2500 1409 2664 Q 1691 2828 2003 2828 Q 2191 2828 2341 2725 Q 2491 2622 2578 2450 Q 2641 2700 2853 2700 Q 2934 2700 2990 2651 Q 3047 2603 3047 2522 Q 3047 2503 3045 2493 Q 3044 2484 3041 2472 L 2309 -434 Q 2259 -634 2125 -800 Q 1991 -966 1809 -1077 Q 1628 -1188 1412 -1250 Q 1197 -1313 997 -1313 Q 631 -1313 361 -1242 Q 91 -1172 91 -916 z M 1338 166 Q 1747 166 2144 728 L 2497 2125 Q 2453 2347 2322 2505 Q 2191 2663 1991 2663 Q 1778 2663 1589 2489 Q 1400 2316 1275 2075 Q 1156 1844 1045 1411 Q 934 978 934 728 Q 934 509 1034 337 Q 1134 166 1338 166 z " transform="scale(0.015625)"/> <path id="Cmr10-77" d="M 1984 -1588 Q 1628 -1306 1370 -942 Q 1113 -578 948 -165 Q 784 247 703 697 Q 622 1147 622 1600 Q 622 2059 703 2509 Q 784 2959 951 3375 Q 1119 3791 1378 4153 Q 1638 4516 1984 4788 Q 1984 4800 2016 4800 L 2075 4800 Q 2094 4800 2109 4783 Q 2125 4766 2125 4744 Q 2125 4716 2113 4703 Q 1800 4397 1592 4047 Q 1384 3697 1257 3301 Q 1131 2906 1075 2482 Q 1019 2059 1019 1600 Q 1019 -434 2106 -1491 Q 2125 -1509 2125 -1544 Q 2125 -1559 2108 -1579 Q 2091 -1600 2075 -1600 L 2016 -1600 Q 1984 -1600 1984 -1588 z " transform="scale(0.015625)"/> <path id="Cmr10-31" d="M 319 0 L 319 172 Q 319 188 331 206 L 1325 1306 Q 1550 1550 1690 1715 Q 1831 1881 1968 2097 Q 2106 2313 2186 2536 Q 2266 2759 2266 3009 Q 2266 3272 2169 3511 Q 2072 3750 1880 3894 Q 1688 4038 1416 4038 Q 1138 4038 916 3870 Q 694 3703 603 3438 Q 628 3444 672 3444 Q 816 3444 917 3347 Q 1019 3250 1019 3097 Q 1019 2950 917 2848 Q 816 2747 672 2747 Q 522 2747 420 2851 Q 319 2956 319 3097 Q 319 3338 409 3548 Q 500 3759 670 3923 Q 841 4088 1055 4175 Q 1269 4263 1509 4263 Q 1875 4263 2190 4108 Q 2506 3953 2690 3670 Q 2875 3388 2875 3009 Q 2875 2731 2753 2481 Q 2631 2231 2440 2026 Q 2250 1822 1953 1562 Q 1656 1303 1563 1216 L 838 519 L 1453 519 Q 1906 519 2211 526 Q 2516 534 2534 550 Q 2609 631 2688 1141 L 2875 1141 L 2694 0 L 319 0 z " transform="scale(0.015625)"/> <path id="Cmmi10-45" d="M 494 109 Q 494 147 500 166 L 978 2075 Q 1025 2253 1025 2388 Q 1025 2663 838 2663 Q 638 2663 541 2423 Q 444 2184 353 1819 Q 353 1800 334 1789 Q 316 1778 300 1778 L 225 1778 Q 203 1778 187 1801 Q 172 1825 172 1844 Q 241 2122 305 2315 Q 369 2509 505 2668 Q 641 2828 844 2828 Q 1084 2828 1268 2676 Q 1453 2525 1453 2291 Q 1644 2541 1900 2684 Q 2156 2828 2444 2828 Q 2747 2828 2967 2673 Q 3188 2519 3188 2234 Q 3384 2513 3648 2670 Q 3913 2828 4225 2828 Q 4556 2828 4757 2648 Q 4959 2469 4959 2138 Q 4959 1875 4842 1503 Q 4725 1131 4550 672 Q 4459 450 4459 288 Q 4459 97 4609 97 Q 4859 97 5025 365 Q 5191 634 5259 941 Q 5278 978 5313 978 L 5388 978 Q 5413 978 5430 961 Q 5447 944 5447 922 Q 5447 916 5441 903 Q 5353 541 5136 234 Q 4919 -72 4594 -72 Q 4369 -72 4209 83 Q 4050 238 4050 459 Q 4050 572 4103 709 Q 4284 1191 4404 1569 Q 4525 1947 4525 2234 Q 4525 2413 4453 2538 Q 4381 2663 4213 2663 Q 3863 2663 3606 2448 Q 3350 2234 3163 1881 Q 3150 1819 3144 1784 L 2731 141 Q 2709 53 2632 -9 Q 2556 -72 2463 -72 Q 2388 -72 2330 -22 Q 2272 28 2272 109 Q 2272 147 2278 166 L 2688 1797 Q 2753 2059 2753 2234 Q 2753 2413 2679 2538 Q 2606 2663 2431 2663 Q 2197 2663 2000 2559 Q 1803 2456 1656 2286 Q 1509 2116 1388 1881 L 953 141 Q 931 53 854 -9 Q 778 -72 684 -72 Q 606 -72 550 -22 Q 494 28 494 109 z " transform="scale(0.015625)"/> <path id="Cmr10-4c" d="M 481 1472 Q 428 1472 393 1512 Q 359 1553 359 1600 Q 359 1647 393 1687 Q 428 1728 481 1728 L 2363 1728 L 2363 3616 Q 2363 3666 2400 3698 Q 2438 3731 2491 3731 Q 2538 3731 2578 3698 Q 2619 3666 2619 3616 L 2619 1728 L 4500 1728 Q 4547 1728 4581 1687 Q 4616 1647 4616 1600 Q 4616 1553 4581 1512 Q 4547 1472 4500 1472 L 2619 1472 L 2619 -416 Q 2619 -466 2578 -498 Q 2538 -531 2491 -531 Q 2438 -531 2400 -498 Q 2363 -466 2363 -416 L 2363 1472 L 481 1472 z " transform="scale(0.015625)"/> <path id="Cmr10-44" d="M 416 -1600 Q 359 -1600 359 -1544 Q 359 -1516 372 -1503 Q 1466 -434 1466 1600 Q 1466 3634 384 4691 Q 359 4706 359 4744 Q 359 4766 376 4783 Q 394 4800 416 4800 L 475 4800 Q 494 4800 506 4788 Q 966 4425 1272 3906 Q 1578 3388 1720 2800 Q 1863 2213 1863 1600 Q 1863 1147 1786 708 Q 1709 269 1542 -157 Q 1375 -584 1119 -945 Q 863 -1306 506 -1588 Q 494 -1600 475 -1600 L 416 -1600 z " transform="scale(0.015625)"/> <path id="Cmr10-52" d="M 213 -19 L 213 1025 Q 213 1075 269 1075 L 347 1075 Q 384 1075 397 1025 Q 575 97 1259 97 Q 1563 97 1767 234 Q 1972 372 1972 659 Q 1972 866 1812 1011 Q 1653 1156 1434 1209 L 1006 1294 Q 791 1341 614 1437 Q 438 1534 325 1695 Q 213 1856 213 2069 Q 213 2350 361 2529 Q 509 2709 746 2789 Q 984 2869 1259 2869 Q 1588 2869 1831 2694 L 2016 2853 Q 2016 2869 2047 2869 L 2094 2869 Q 2113 2869 2128 2851 Q 2144 2834 2144 2816 L 2144 1978 Q 2144 1919 2094 1919 L 2016 1919 Q 1959 1919 1959 1978 Q 1959 2313 1773 2516 Q 1588 2719 1253 2719 Q 966 2719 755 2612 Q 544 2506 544 2247 Q 544 2069 695 1955 Q 847 1841 1050 1791 L 1484 1709 Q 1703 1659 1892 1540 Q 2081 1422 2192 1240 Q 2303 1059 2303 831 Q 2303 600 2223 429 Q 2144 259 2001 146 Q 1859 34 1665 -19 Q 1472 -72 1259 -72 Q 859 -72 575 197 L 341 -56 Q 341 -72 306 -72 L 269 -72 Q 213 -72 213 -19 z " transform="scale(0.015625)"/> <path id="Cmr10-24" d="M 197 0 L 197 225 Q 416 225 556 259 Q 697 294 697 428 L 697 2175 Q 697 2422 601 2478 Q 506 2534 225 2534 L 225 2759 L 1147 2828 L 1147 428 Q 1147 294 1269 259 Q 1391 225 1594 225 L 1594 0 L 197 0 z M 469 3928 Q 469 4069 575 4175 Q 681 4281 819 4281 Q 909 4281 993 4234 Q 1078 4188 1125 4103 Q 1172 4019 1172 3928 Q 1172 3791 1065 3684 Q 959 3578 819 3578 Q 681 3578 575 3684 Q 469 3791 469 3928 z " transform="scale(0.015625)"/> <path id="Cmr10-74" d="M 191 0 L 191 225 Q 409 225 550 259 Q 691 294 691 428 L 691 2175 Q 691 2347 639 2423 Q 588 2500 491 2517 Q 394 2534 191 2534 L 191 2759 L 1119 2828 L 1119 2203 Q 1247 2478 1498 2653 Q 1750 2828 2047 2828 Q 2491 2828 2714 2615 Q 2938 2403 2938 1966 L 2938 428 Q 2938 294 3078 259 Q 3219 225 3438 225 L 3438 0 L 1972 0 L 1972 225 Q 2191 225 2331 259 Q 2472 294 2472 428 L 2472 1947 Q 2472 2259 2381 2461 Q 2291 2663 2009 2663 Q 1638 2663 1398 2366 Q 1159 2069 1159 1691 L 1159 428 Q 1159 294 1300 259 Q 1441 225 1656 225 L 1656 0 L 191 0 z " transform="scale(0.015625)"/> <path id="Cmex10-70" d="M 3359 -11244 Q 2763 -10725 2339 -10065 Q 1916 -9406 1655 -8656 Q 1394 -7906 1273 -7115 Q 1153 -6325 1153 -5503 Q 1153 -4678 1273 -3886 Q 1394 -3094 1655 -2344 Q 1916 -1594 2339 -934 Q 2763 -275 3359 244 Q 3359 256 3391 256 L 3541 256 Q 3559 256 3575 236 Q 3591 216 3591 197 Q 3591 172 3578 159 Q 3031 -388 2662 -1041 Q 2294 -1694 2072 -2439 Q 1850 -3184 1756 -3948 Q 1663 -4713 1663 -5509 Q 1663 -6303 1756 -7070 Q 1850 -7838 2072 -8575 Q 2294 -9313 2667 -9969 Q 3041 -10625 3578 -11163 Q 3591 -11175 3591 -11200 Q 3591 -11216 3573 -11236 Q 3556 -11256 3541 -11256 L 3391 -11256 Q 3359 -11256 3359 -11244 z " transform="scale(0.015625)"/> <path id="Cmr10-1a" d="M 538 3928 Q 538 4069 644 4175 Q 750 4281 891 4281 Q 978 4281 1062 4234 Q 1147 4188 1194 4103 Q 1241 4019 1241 3928 Q 1241 3791 1137 3684 Q 1034 3578 891 3578 Q 750 3578 644 3684 Q 538 3791 538 3928 z " transform="scale(0.015625)"/> <path id="Cmmi10-71" d="M 281 519 Q 281 538 286 575 Q 291 613 295 648 Q 300 684 300 703 L 1094 3872 Q 1119 3981 1125 4044 Q 1125 4147 709 4147 Q 647 4147 647 4231 Q 650 4247 661 4287 Q 672 4328 689 4350 Q 706 4372 738 4372 L 1600 4441 Q 1678 4441 1678 4359 L 756 678 Q 709 575 709 372 Q 709 97 897 97 Q 1094 97 1192 342 Q 1291 588 1369 941 Q 1381 978 1422 978 L 1497 978 Q 1522 978 1539 958 Q 1556 938 1556 916 Q 1481 606 1420 426 Q 1359 247 1225 87 Q 1091 -72 884 -72 Q 628 -72 454 93 Q 281 259 281 519 z " transform="scale(0.015625)"/> <path id="Cmr10-7b" d="M 1594 -72 Q 1206 -72 890 129 Q 575 331 394 667 Q 213 1003 213 1381 Q 213 1759 392 2106 Q 572 2453 889 2661 Q 1206 2869 1594 2869 Q 1969 2869 2276 2722 Q 2584 2575 2584 2241 Q 2584 2116 2495 2023 Q 2406 1931 2278 1931 Q 2150 1931 2061 2023 Q 1972 2116 1972 2241 Q 1972 2353 2044 2436 Q 2116 2519 2222 2541 Q 2000 2681 1600 2681 Q 1294 2681 1106 2478 Q 919 2275 844 1975 Q 769 1675 769 1381 Q 769 1072 861 783 Q 953 494 1158 305 Q 1363 116 1672 116 Q 1975 116 2187 302 Q 2400 488 2478 788 Q 2478 825 2528 825 L 2606 825 Q 2625 825 2640 808 Q 2656 791 2656 769 L 2656 750 Q 2559 372 2271 150 Q 1984 -72 1594 -72 z " transform="scale(0.015625)"/> <path id="Cmr10-42" d="M 1600 -72 Q 1216 -72 887 123 Q 559 319 368 647 Q 178 975 178 1363 Q 178 1656 283 1928 Q 388 2200 583 2414 Q 778 2628 1037 2748 Q 1297 2869 1600 2869 Q 1994 2869 2317 2661 Q 2641 2453 2828 2104 Q 3016 1756 3016 1363 Q 3016 978 2825 648 Q 2634 319 2307 123 Q 1981 -72 1600 -72 z M 1600 116 Q 2113 116 2284 487 Q 2456 859 2456 1434 Q 2456 1756 2422 1967 Q 2388 2178 2272 2350 Q 2200 2456 2089 2536 Q 1978 2616 1854 2658 Q 1731 2700 1600 2700 Q 1400 2700 1220 2609 Q 1041 2519 922 2350 Q 803 2169 770 1951 Q 738 1734 738 1434 Q 738 1075 800 789 Q 863 503 1052 309 Q 1241 116 1600 116 z " transform="scale(0.015625)"/> <path id="Cmex10-51" d="M 281 -11256 Q 225 -11256 225 -11200 Q 225 -11175 238 -11163 Q 781 -10619 1156 -9955 Q 1531 -9291 1747 -8566 Q 1963 -7841 2056 -7075 Q 2150 -6309 2150 -5497 Q 2150 -4666 2054 -3906 Q 1959 -3147 1743 -2425 Q 1528 -1703 1154 -1039 Q 781 -375 238 159 Q 225 172 225 197 Q 225 256 281 256 L 428 256 Q 447 256 459 244 Q 1050 -266 1478 -933 Q 1906 -1600 2167 -2348 Q 2428 -3097 2545 -3887 Q 2663 -4678 2663 -5503 Q 2663 -6325 2545 -7114 Q 2428 -7903 2167 -8653 Q 1906 -9403 1478 -10068 Q 1050 -10734 459 -11244 Q 447 -11256 428 -11256 L 281 -11256 z " transform="scale(0.015625)"/> </defs> <use xlink:href="#Cmr10-5b" transform="translate(4.621582 27.121343)"/> <use xlink:href="#Cmmi10-12" transform="translate(0 0.605718)"/> <use xlink:href="#Cmr10-64" transform="translate(50.928119 -14.394244) scale(0.7)"/> <use xlink:href="#Cmr10-29" transform="translate(111.648592 0.605718)"/> <use xlink:href="#Cmsy10-11" transform="translate(215.584196 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-2f" transform="translate(269.964079 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(303.357633 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(330.530485 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(365.530485 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(426.985563 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(455.489854 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(509.869737 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(571.324815 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(599.829106 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(627.001957 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-24" transform="translate(654.584965 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-74" transform="translate(673.964848 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(724.494086 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(757.340765 41.980744) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(811.51203 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(891.558886 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(953.013964 41.980744) scale(0.49)"/> <use xlink:href="#Cmmi10-2f" transform="translate(981.518255 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1026.578743 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-24" transform="translate(1054.161751 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-74" transform="translate(1073.541634 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(1112.403938 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1139.57679 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1172.42347 41.980744) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(1200.92776 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1255.307643 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1290.307643 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1323.154323 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(1351.658614 52.480718) scale(0.7)"/> <use xlink:href="#Cmsy10-11" transform="translate(1404.498439 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1484.545295 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1519.545295 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-24" transform="translate(1547.128303 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-74" transform="translate(1566.508186 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(1605.37049 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1632.543342 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1665.390022 41.980744) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(1693.894312 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1748.274195 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1781.120875 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(1809.625166 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1848.464951 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1909.920029 41.980744) scale(0.49)"/> <use xlink:href="#Cmex10-70" transform="translate(1938.42432 129.833843) scale(0.539371)"/> <use xlink:href="#Cmr10-1a" transform="translate(1980.967943 71.45103) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1970.631273 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(2014.44781 99.361406) scale(0.49)"/> <use xlink:href="#Cmr10-31" transform="translate(2006.280956 35.175515) scale(0.49)"/> <use xlink:href="#Cmmi10-71" transform="translate(2042.952101 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(2063.80171 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(2106.306041 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-1a" transform="translate(2185.022634 71.45103) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(2174.685964 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(2218.5025 99.361406) scale(0.49)"/> <use xlink:href="#Cmr10-64" transform="translate(2210.335647 35.175515) scale(0.49)"/> <use xlink:href="#Cmmi10-71" transform="translate(2247.006791 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(2267.856401 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-7b" transform="translate(2296.360691 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-42" transform="translate(2327.430027 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(2362.430027 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(2390.013035 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(2417.185887 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(2450.032566 41.980744) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(2478.536857 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(2532.91674 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(2565.76342 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(2594.267711 52.480718) scale(0.7)"/> <use xlink:href="#Cmex10-51" transform="translate(2621.440562 129.833843) scale(0.539371)"/> <use xlink:href="#Cmmi10-71" transform="translate(950.584196 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(971.433805 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-77" transform="translate(999.938096 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1027.110948 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1062.110948 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1123.566026 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(1166.070357 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1234.450279 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1295.905358 -46.769256) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(1338.409688 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1406.789611 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1468.244689 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-7b" transform="translate(1496.74898 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-42" transform="translate(1527.818316 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1562.818316 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(1590.401324 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1617.574176 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1652.574176 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1685.420855 -46.769256) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(1713.925146 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1768.305029 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1803.305029 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1836.151709 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(1864.655999 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-44" transform="translate(1891.828851 -36.269282) scale(0.7)"/> <path d="M 215.584196 22.480718 L 215.584196 28.730718 L 2653.647516 28.730718 L 2653.647516 22.480718 L 215.584196 22.480718 z "/> </g> </g> </g> </svg></div>
<div class="eq"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="598" height="60" role="img" aria-label="угловое ускорение второго груза двойного маятника" viewBox="0 0 442.98 44.17" xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> </defs> <g id="figure_1"> <g id="patch_1"> <path d="M 0 44.17 L 442.98 44.17 L 442.98 -0 L 0 -0 L 0 44.17 z " style="fill: none"/> </g> <g id="text_1"> <g style="fill: #ececec" transform="translate(4.32 29.4) scale(0.19 -0.19)"> <defs> <path id="Cmr10-5b" d="M 647 3950 Q 647 4084 742 4182 Q 838 4281 978 4281 Q 1119 4281 1216 4184 Q 1313 4088 1313 3950 Q 1313 3809 1216 3712 Q 1119 3616 978 3616 Q 838 3616 742 3714 Q 647 3813 647 3950 z M 1881 3950 Q 1881 4084 1976 4182 Q 2072 4281 2216 4281 Q 2353 4281 2450 4184 Q 2547 4088 2547 3950 Q 2547 3809 2450 3712 Q 2353 3616 2216 3616 Q 2072 3616 1976 3714 Q 1881 3813 1881 3950 z " transform="scale(0.015625)"/> <path id="Cmmi10-12" d="M 1031 -72 Q 741 -72 566 140 Q 391 353 323 653 Q 256 953 256 1247 L 256 1253 Q 256 1572 317 1915 Q 378 2259 493 2601 Q 609 2944 744 3213 Q 838 3400 986 3631 Q 1134 3863 1317 4064 Q 1500 4266 1711 4389 Q 1922 4513 2138 4513 L 2144 4513 Q 2375 4513 2529 4384 Q 2684 4256 2770 4056 Q 2856 3856 2890 3628 Q 2925 3400 2925 3194 Q 2925 2709 2794 2204 Q 2663 1700 2431 1228 Q 2344 1050 2189 809 Q 2034 569 1861 378 Q 1688 188 1472 58 Q 1256 -72 1038 -72 L 1031 -72 z M 1044 97 Q 1256 97 1451 323 Q 1647 550 1794 873 Q 1941 1197 2052 1536 Q 2163 1875 2216 2113 L 909 2113 Q 809 1709 753 1417 Q 697 1125 697 844 Q 697 97 1044 97 z M 959 2338 L 2272 2338 Q 2341 2619 2381 2808 Q 2422 2997 2450 3206 Q 2478 3416 2478 3597 Q 2478 4347 2138 4347 Q 1731 4347 1436 3692 Q 1141 3038 959 2338 z " transform="scale(0.015625)"/> <path id="Cmr10-31" d="M 319 0 L 319 172 Q 319 188 331 206 L 1325 1306 Q 1550 1550 1690 1715 Q 1831 1881 1968 2097 Q 2106 2313 2186 2536 Q 2266 2759 2266 3009 Q 2266 3272 2169 3511 Q 2072 3750 1880 3894 Q 1688 4038 1416 4038 Q 1138 4038 916 3870 Q 694 3703 603 3438 Q 628 3444 672 3444 Q 816 3444 917 3347 Q 1019 3250 1019 3097 Q 1019 2950 917 2848 Q 816 2747 672 2747 Q 522 2747 420 2851 Q 319 2956 319 3097 Q 319 3338 409 3548 Q 500 3759 670 3923 Q 841 4088 1055 4175 Q 1269 4263 1509 4263 Q 1875 4263 2190 4108 Q 2506 3953 2690 3670 Q 2875 3388 2875 3009 Q 2875 2731 2753 2481 Q 2631 2231 2440 2026 Q 2250 1822 1953 1562 Q 1656 1303 1563 1216 L 838 519 L 1453 519 Q 1906 519 2211 526 Q 2516 534 2534 550 Q 2609 631 2688 1141 L 2875 1141 L 2694 0 L 319 0 z " transform="scale(0.015625)"/> <path id="Cmr10-29" d="M 481 850 Q 428 850 393 890 Q 359 931 359 978 Q 359 1031 393 1068 Q 428 1106 481 1106 L 4500 1106 Q 4547 1106 4581 1068 Q 4616 1031 4616 978 Q 4616 931 4581 890 Q 4547 850 4500 850 L 481 850 z M 481 2094 Q 428 2094 393 2131 Q 359 2169 359 2222 Q 359 2269 393 2309 Q 428 2350 481 2350 L 4500 2350 Q 4547 2350 4581 2309 Q 4616 2269 4616 2222 Q 4616 2169 4581 2131 Q 4547 2094 4500 2094 L 481 2094 z " transform="scale(0.015625)"/> <path id="Cmr10-52" d="M 213 -19 L 213 1025 Q 213 1075 269 1075 L 347 1075 Q 384 1075 397 1025 Q 575 97 1259 97 Q 1563 97 1767 234 Q 1972 372 1972 659 Q 1972 866 1812 1011 Q 1653 1156 1434 1209 L 1006 1294 Q 791 1341 614 1437 Q 438 1534 325 1695 Q 213 1856 213 2069 Q 213 2350 361 2529 Q 509 2709 746 2789 Q 984 2869 1259 2869 Q 1588 2869 1831 2694 L 2016 2853 Q 2016 2869 2047 2869 L 2094 2869 Q 2113 2869 2128 2851 Q 2144 2834 2144 2816 L 2144 1978 Q 2144 1919 2094 1919 L 2016 1919 Q 1959 1919 1959 1978 Q 1959 2313 1773 2516 Q 1588 2719 1253 2719 Q 966 2719 755 2612 Q 544 2506 544 2247 Q 544 2069 695 1955 Q 847 1841 1050 1791 L 1484 1709 Q 1703 1659 1892 1540 Q 2081 1422 2192 1240 Q 2303 1059 2303 831 Q 2303 600 2223 429 Q 2144 259 2001 146 Q 1859 34 1665 -19 Q 1472 -72 1259 -72 Q 859 -72 575 197 L 341 -56 Q 341 -72 306 -72 L 269 -72 Q 213 -72 213 -19 z " transform="scale(0.015625)"/> <path id="Cmr10-24" d="M 197 0 L 197 225 Q 416 225 556 259 Q 697 294 697 428 L 697 2175 Q 697 2422 601 2478 Q 506 2534 225 2534 L 225 2759 L 1147 2828 L 1147 428 Q 1147 294 1269 259 Q 1391 225 1594 225 L 1594 0 L 197 0 z M 469 3928 Q 469 4069 575 4175 Q 681 4281 819 4281 Q 909 4281 993 4234 Q 1078 4188 1125 4103 Q 1172 4019 1172 3928 Q 1172 3791 1065 3684 Q 959 3578 819 3578 Q 681 3578 575 3684 Q 469 3791 469 3928 z " transform="scale(0.015625)"/> <path id="Cmr10-74" d="M 191 0 L 191 225 Q 409 225 550 259 Q 691 294 691 428 L 691 2175 Q 691 2347 639 2423 Q 588 2500 491 2517 Q 394 2534 191 2534 L 191 2759 L 1119 2828 L 1119 2203 Q 1247 2478 1498 2653 Q 1750 2828 2047 2828 Q 2491 2828 2714 2615 Q 2938 2403 2938 1966 L 2938 428 Q 2938 294 3078 259 Q 3219 225 3438 225 L 3438 0 L 1972 0 L 1972 225 Q 2191 225 2331 259 Q 2472 294 2472 428 L 2472 1947 Q 2472 2259 2381 2461 Q 2291 2663 2009 2663 Q 1638 2663 1398 2366 Q 1159 2069 1159 1691 L 1159 428 Q 1159 294 1300 259 Q 1441 225 1656 225 L 1656 0 L 191 0 z " transform="scale(0.015625)"/> <path id="Cmr10-77" d="M 1984 -1588 Q 1628 -1306 1370 -942 Q 1113 -578 948 -165 Q 784 247 703 697 Q 622 1147 622 1600 Q 622 2059 703 2509 Q 784 2959 951 3375 Q 1119 3791 1378 4153 Q 1638 4516 1984 4788 Q 1984 4800 2016 4800 L 2075 4800 Q 2094 4800 2109 4783 Q 2125 4766 2125 4744 Q 2125 4716 2113 4703 Q 1800 4397 1592 4047 Q 1384 3697 1257 3301 Q 1131 2906 1075 2482 Q 1019 2059 1019 1600 Q 1019 -434 2106 -1491 Q 2125 -1509 2125 -1544 Q 2125 -1559 2108 -1579 Q 2091 -1600 2075 -1600 L 2016 -1600 Q 1984 -1600 1984 -1588 z " transform="scale(0.015625)"/> <path id="Cmr10-64" d="M 594 0 L 594 225 Q 1394 225 1394 428 L 1394 3788 Q 1063 3628 556 3628 L 556 3853 Q 1341 3853 1741 4263 L 1831 4263 Q 1853 4263 1873 4245 Q 1894 4228 1894 4206 L 1894 428 Q 1894 225 2694 225 L 2694 0 L 594 0 z " transform="scale(0.015625)"/> <path id="Cmsy10-11" d="M 653 1472 Q 600 1472 565 1512 Q 531 1553 531 1600 Q 531 1647 565 1687 Q 600 1728 653 1728 L 4325 1728 Q 4375 1728 4408 1687 Q 4441 1647 4441 1600 Q 4441 1553 4408 1512 Q 4375 1472 4325 1472 L 653 1472 z " transform="scale(0.015625)"/> <path id="Cmr10-44" d="M 416 -1600 Q 359 -1600 359 -1544 Q 359 -1516 372 -1503 Q 1466 -434 1466 1600 Q 1466 3634 384 4691 Q 359 4706 359 4744 Q 359 4766 376 4783 Q 394 4800 416 4800 L 475 4800 Q 494 4800 506 4788 Q 966 4425 1272 3906 Q 1578 3388 1720 2800 Q 1863 2213 1863 1600 Q 1863 1147 1786 708 Q 1709 269 1542 -157 Q 1375 -584 1119 -945 Q 863 -1306 506 -1588 Q 494 -1600 475 -1600 L 416 -1600 z " transform="scale(0.015625)"/> <path id="Cmex10-70" d="M 3359 -11244 Q 2763 -10725 2339 -10065 Q 1916 -9406 1655 -8656 Q 1394 -7906 1273 -7115 Q 1153 -6325 1153 -5503 Q 1153 -4678 1273 -3886 Q 1394 -3094 1655 -2344 Q 1916 -1594 2339 -934 Q 2763 -275 3359 244 Q 3359 256 3391 256 L 3541 256 Q 3559 256 3575 236 Q 3591 216 3591 197 Q 3591 172 3578 159 Q 3031 -388 2662 -1041 Q 2294 -1694 2072 -2439 Q 1850 -3184 1756 -3948 Q 1663 -4713 1663 -5509 Q 1663 -6303 1756 -7070 Q 1850 -7838 2072 -8575 Q 2294 -9313 2667 -9969 Q 3041 -10625 3578 -11163 Q 3591 -11175 3591 -11200 Q 3591 -11216 3573 -11236 Q 3556 -11256 3541 -11256 L 3391 -11256 Q 3359 -11256 3359 -11244 z " transform="scale(0.015625)"/> <path id="Cmr10-1a" d="M 538 3928 Q 538 4069 644 4175 Q 750 4281 891 4281 Q 978 4281 1062 4234 Q 1147 4188 1194 4103 Q 1241 4019 1241 3928 Q 1241 3791 1137 3684 Q 1034 3578 891 3578 Q 750 3578 644 3684 Q 538 3791 538 3928 z " transform="scale(0.015625)"/> <path id="Cmmi10-71" d="M 281 519 Q 281 538 286 575 Q 291 613 295 648 Q 300 684 300 703 L 1094 3872 Q 1119 3981 1125 4044 Q 1125 4147 709 4147 Q 647 4147 647 4231 Q 650 4247 661 4287 Q 672 4328 689 4350 Q 706 4372 738 4372 L 1600 4441 Q 1678 4441 1678 4359 L 756 678 Q 709 575 709 372 Q 709 97 897 97 Q 1094 97 1192 342 Q 1291 588 1369 941 Q 1381 978 1422 978 L 1497 978 Q 1522 978 1539 958 Q 1556 938 1556 916 Q 1481 606 1420 426 Q 1359 247 1225 87 Q 1091 -72 884 -72 Q 628 -72 454 93 Q 281 259 281 519 z " transform="scale(0.015625)"/> <path id="Cmmi10-45" d="M 494 109 Q 494 147 500 166 L 978 2075 Q 1025 2253 1025 2388 Q 1025 2663 838 2663 Q 638 2663 541 2423 Q 444 2184 353 1819 Q 353 1800 334 1789 Q 316 1778 300 1778 L 225 1778 Q 203 1778 187 1801 Q 172 1825 172 1844 Q 241 2122 305 2315 Q 369 2509 505 2668 Q 641 2828 844 2828 Q 1084 2828 1268 2676 Q 1453 2525 1453 2291 Q 1644 2541 1900 2684 Q 2156 2828 2444 2828 Q 2747 2828 2967 2673 Q 3188 2519 3188 2234 Q 3384 2513 3648 2670 Q 3913 2828 4225 2828 Q 4556 2828 4757 2648 Q 4959 2469 4959 2138 Q 4959 1875 4842 1503 Q 4725 1131 4550 672 Q 4459 450 4459 288 Q 4459 97 4609 97 Q 4859 97 5025 365 Q 5191 634 5259 941 Q 5278 978 5313 978 L 5388 978 Q 5413 978 5430 961 Q 5447 944 5447 922 Q 5447 916 5441 903 Q 5353 541 5136 234 Q 4919 -72 4594 -72 Q 4369 -72 4209 83 Q 4050 238 4050 459 Q 4050 572 4103 709 Q 4284 1191 4404 1569 Q 4525 1947 4525 2234 Q 4525 2413 4453 2538 Q 4381 2663 4213 2663 Q 3863 2663 3606 2448 Q 3350 2234 3163 1881 Q 3150 1819 3144 1784 L 2731 141 Q 2709 53 2632 -9 Q 2556 -72 2463 -72 Q 2388 -72 2330 -22 Q 2272 28 2272 109 Q 2272 147 2278 166 L 2688 1797 Q 2753 2059 2753 2234 Q 2753 2413 2679 2538 Q 2606 2663 2431 2663 Q 2197 2663 2000 2559 Q 1803 2456 1656 2286 Q 1509 2116 1388 1881 L 953 141 Q 931 53 854 -9 Q 778 -72 684 -72 Q 606 -72 550 -22 Q 494 28 494 109 z " transform="scale(0.015625)"/> <path id="Cmr10-4c" d="M 481 1472 Q 428 1472 393 1512 Q 359 1553 359 1600 Q 359 1647 393 1687 Q 428 1728 481 1728 L 2363 1728 L 2363 3616 Q 2363 3666 2400 3698 Q 2438 3731 2491 3731 Q 2538 3731 2578 3698 Q 2619 3666 2619 3616 L 2619 1728 L 4500 1728 Q 4547 1728 4581 1687 Q 4616 1647 4616 1600 Q 4616 1553 4581 1512 Q 4547 1472 4500 1472 L 2619 1472 L 2619 -416 Q 2619 -466 2578 -498 Q 2538 -531 2491 -531 Q 2438 -531 2400 -498 Q 2363 -466 2363 -416 L 2363 1472 L 481 1472 z " transform="scale(0.015625)"/> <path id="Cmmi10-2f" d="M 91 -916 Q 91 -759 198 -642 Q 306 -525 459 -525 Q 563 -525 633 -589 Q 703 -653 703 -756 Q 703 -872 637 -964 Q 572 -1056 469 -1094 Q 641 -1147 1006 -1147 Q 1300 -1147 1544 -920 Q 1788 -694 1863 -397 L 2047 353 Q 1700 0 1325 0 Q 1050 0 854 140 Q 659 281 556 515 Q 453 750 453 1013 Q 453 1306 573 1628 Q 694 1950 911 2225 Q 1128 2500 1409 2664 Q 1691 2828 2003 2828 Q 2191 2828 2341 2725 Q 2491 2622 2578 2450 Q 2641 2700 2853 2700 Q 2934 2700 2990 2651 Q 3047 2603 3047 2522 Q 3047 2503 3045 2493 Q 3044 2484 3041 2472 L 2309 -434 Q 2259 -634 2125 -800 Q 1991 -966 1809 -1077 Q 1628 -1188 1412 -1250 Q 1197 -1313 997 -1313 Q 631 -1313 361 -1242 Q 91 -1172 91 -916 z M 1338 166 Q 1747 166 2144 728 L 2497 2125 Q 2453 2347 2322 2505 Q 2191 2663 1991 2663 Q 1778 2663 1589 2489 Q 1400 2316 1275 2075 Q 1156 1844 1045 1411 Q 934 978 934 728 Q 934 509 1034 337 Q 1134 166 1338 166 z " transform="scale(0.015625)"/> <path id="Cmr10-7b" d="M 1594 -72 Q 1206 -72 890 129 Q 575 331 394 667 Q 213 1003 213 1381 Q 213 1759 392 2106 Q 572 2453 889 2661 Q 1206 2869 1594 2869 Q 1969 2869 2276 2722 Q 2584 2575 2584 2241 Q 2584 2116 2495 2023 Q 2406 1931 2278 1931 Q 2150 1931 2061 2023 Q 1972 2116 1972 2241 Q 1972 2353 2044 2436 Q 2116 2519 2222 2541 Q 2000 2681 1600 2681 Q 1294 2681 1106 2478 Q 919 2275 844 1975 Q 769 1675 769 1381 Q 769 1072 861 783 Q 953 494 1158 305 Q 1363 116 1672 116 Q 1975 116 2187 302 Q 2400 488 2478 788 Q 2478 825 2528 825 L 2606 825 Q 2625 825 2640 808 Q 2656 791 2656 769 L 2656 750 Q 2559 372 2271 150 Q 1984 -72 1594 -72 z " transform="scale(0.015625)"/> <path id="Cmr10-42" d="M 1600 -72 Q 1216 -72 887 123 Q 559 319 368 647 Q 178 975 178 1363 Q 178 1656 283 1928 Q 388 2200 583 2414 Q 778 2628 1037 2748 Q 1297 2869 1600 2869 Q 1994 2869 2317 2661 Q 2641 2453 2828 2104 Q 3016 1756 3016 1363 Q 3016 978 2825 648 Q 2634 319 2307 123 Q 1981 -72 1600 -72 z M 1600 116 Q 2113 116 2284 487 Q 2456 859 2456 1434 Q 2456 1756 2422 1967 Q 2388 2178 2272 2350 Q 2200 2456 2089 2536 Q 1978 2616 1854 2658 Q 1731 2700 1600 2700 Q 1400 2700 1220 2609 Q 1041 2519 922 2350 Q 803 2169 770 1951 Q 738 1734 738 1434 Q 738 1075 800 789 Q 863 503 1052 309 Q 1241 116 1600 116 z " transform="scale(0.015625)"/> <path id="Cmex10-51" d="M 281 -11256 Q 225 -11256 225 -11200 Q 225 -11175 238 -11163 Q 781 -10619 1156 -9955 Q 1531 -9291 1747 -8566 Q 1963 -7841 2056 -7075 Q 2150 -6309 2150 -5497 Q 2150 -4666 2054 -3906 Q 1959 -3147 1743 -2425 Q 1528 -1703 1154 -1039 Q 781 -375 238 159 Q 225 172 225 197 Q 225 256 281 256 L 428 256 Q 447 256 459 244 Q 1050 -266 1478 -933 Q 1906 -1600 2167 -2348 Q 2428 -3097 2545 -3887 Q 2663 -4678 2663 -5503 Q 2663 -6325 2545 -7114 Q 2428 -7903 2167 -8653 Q 1906 -9403 1478 -10068 Q 1050 -10734 459 -11244 Q 447 -11256 428 -11256 L 281 -11256 z " transform="scale(0.015625)"/> </defs> <use xlink:href="#Cmr10-5b" transform="translate(4.621582 27.121343)"/> <use xlink:href="#Cmmi10-12" transform="translate(0 0.605718)"/> <use xlink:href="#Cmr10-31" transform="translate(50.928119 -14.394244) scale(0.7)"/> <use xlink:href="#Cmr10-29" transform="translate(111.648592 0.605718)"/> <use xlink:href="#Cmr10-31" transform="translate(215.584196 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(250.584196 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-24" transform="translate(278.167204 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-74" transform="translate(297.547086 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(336.409391 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(363.582243 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(396.428922 41.980744) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(424.933213 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(479.313096 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(512.159776 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(540.664066 52.480718) scale(0.7)"/> <use xlink:href="#Cmex10-70" transform="translate(567.836918 129.833843) scale(0.539371)"/> <use xlink:href="#Cmr10-1a" transform="translate(610.380541 71.45103) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(600.043871 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(643.860408 99.361406) scale(0.49)"/> <use xlink:href="#Cmr10-64" transform="translate(635.693555 35.175515) scale(0.49)"/> <use xlink:href="#Cmmi10-71" transform="translate(672.364699 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(693.214308 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-77" transform="translate(721.718599 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(748.891451 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(810.346529 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(838.85082 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(893.230702 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(954.685781 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(983.190071 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-4c" transform="translate(1036.029896 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-2f" transform="translate(1116.076753 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(1149.470307 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1176.643159 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1238.098237 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(1266.602528 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1320.982411 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1382.437489 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(1410.94178 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-7b" transform="translate(1438.114631 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-42" transform="translate(1469.183967 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1504.183967 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1543.433908 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1576.280588 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(1630.451852 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-1a" transform="translate(1720.835378 71.45103) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1710.498709 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1754.315245 99.361406) scale(0.49)"/> <use xlink:href="#Cmr10-31" transform="translate(1746.148392 35.175515) scale(0.49)"/> <use xlink:href="#Cmmi10-71" transform="translate(1782.819536 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1803.669145 41.980744) scale(0.49)"/> <use xlink:href="#Cmmi10-45" transform="translate(1832.173436 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1893.628514 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-7b" transform="translate(1922.132805 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-42" transform="translate(1953.202141 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1988.202141 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(2015.785149 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(2042.958001 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(2075.80468 41.980744) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(2104.308971 52.480718) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(2158.688854 52.480718) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(2191.535534 41.980744) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(2220.039824 52.480718) scale(0.7)"/> <use xlink:href="#Cmex10-51" transform="translate(2247.212676 129.833843) scale(0.539371)"/> <use xlink:href="#Cmmi10-71" transform="translate(763.584196 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(784.433805 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-77" transform="translate(812.938096 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(840.110948 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(875.110948 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(936.566026 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-4c" transform="translate(979.070357 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1047.450279 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1108.905358 -46.769256) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(1151.409688 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-45" transform="translate(1219.789611 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1281.244689 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-7b" transform="translate(1309.74898 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-42" transform="translate(1340.818316 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-52" transform="translate(1375.818316 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-77" transform="translate(1403.401324 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1430.574176 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1465.574176 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-64" transform="translate(1498.420855 -46.769256) scale(0.49)"/> <use xlink:href="#Cmsy10-11" transform="translate(1526.925146 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1581.305029 -36.269282) scale(0.7)"/> <use xlink:href="#Cmmi10-12" transform="translate(1616.305029 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(1649.151709 -46.769256) scale(0.49)"/> <use xlink:href="#Cmr10-44" transform="translate(1677.655999 -36.269282) scale(0.7)"/> <use xlink:href="#Cmr10-44" transform="translate(1704.828851 -36.269282) scale(0.7)"/> <path d="M 215.584196 22.480718 L 215.584196 28.730718 L 2279.419629 28.730718 L 2279.419629 22.480718 L 215.584196 22.480718 z "/> </g> </g> </g> </svg></div>
<h3>Численное решение</h3>
<p>Система интегрируется методом Рунге–Кутты 4-го порядка с шагом 2 мс — прямо во время движения. В 2023-м это делал <code style="font-family:var(--mono);font-size:12.5px">scipy.solve_ivp</code> (DOP853), после чего Manim минутами рендерил видео. Теперь между «подвинул слайдер» и «увидел» — один кадр.</p>
<h3>Фазовый цилиндр</h3>
<p>Последняя ячейка ноутбука 2023 года обещала: «в следующей версии фазовое пространство будет представлено цилиндром». Виды «цилиндр» и «3D» выполняют это обещание: в первом угол берётся по модулю 2π и вращение («солнышко») перестаёт убегать за край портрета, а во втором траектория буквально наматывается на цилиндр. Пунктирная кривая на плоском портрете — сепаратриса, граница между колебаниями и вращением:</p>
<div class="eq"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="238" height="55" role="img" aria-label="сепаратриса" viewBox="0 0 176.06 40.54" xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> </defs> <g id="figure_1"> <g id="patch_1"> <path d="M 0 40.54 L 176.06 40.54 L 176.06 -0 L 0 -0 L 0 40.54 z " style="fill: none"/> </g> <g id="text_1"> <g style="fill: #ececec" transform="translate(4.32 29.18) scale(0.22 -0.22)"> <defs> <path id="Cmr10-1a" d="M 538 3928 Q 538 4069 644 4175 Q 750 4281 891 4281 Q 978 4281 1062 4234 Q 1147 4188 1194 4103 Q 1241 4019 1241 3928 Q 1241 3791 1137 3684 Q 1034 3578 891 3578 Q 750 3578 644 3684 Q 538 3791 538 3928 z " transform="scale(0.015625)"/> <path id="Cmmi10-12" d="M 1031 -72 Q 741 -72 566 140 Q 391 353 323 653 Q 256 953 256 1247 L 256 1253 Q 256 1572 317 1915 Q 378 2259 493 2601 Q 609 2944 744 3213 Q 838 3400 986 3631 Q 1134 3863 1317 4064 Q 1500 4266 1711 4389 Q 1922 4513 2138 4513 L 2144 4513 Q 2375 4513 2529 4384 Q 2684 4256 2770 4056 Q 2856 3856 2890 3628 Q 2925 3400 2925 3194 Q 2925 2709 2794 2204 Q 2663 1700 2431 1228 Q 2344 1050 2189 809 Q 2034 569 1861 378 Q 1688 188 1472 58 Q 1256 -72 1038 -72 L 1031 -72 z M 1044 97 Q 1256 97 1451 323 Q 1647 550 1794 873 Q 1941 1197 2052 1536 Q 2163 1875 2216 2113 L 909 2113 Q 809 1709 753 1417 Q 697 1125 697 844 Q 697 97 1044 97 z M 959 2338 L 2272 2338 Q 2341 2619 2381 2808 Q 2422 2997 2450 3206 Q 2478 3416 2478 3597 Q 2478 4347 2138 4347 Q 1731 4347 1436 3692 Q 1141 3038 959 2338 z " transform="scale(0.015625)"/> <path id="Cmr10-29" d="M 481 850 Q 428 850 393 890 Q 359 931 359 978 Q 359 1031 393 1068 Q 428 1106 481 1106 L 4500 1106 Q 4547 1106 4581 1068 Q 4616 1031 4616 978 Q 4616 931 4581 890 Q 4547 850 4500 850 L 481 850 z M 481 2094 Q 428 2094 393 2131 Q 359 2169 359 2222 Q 359 2269 393 2309 Q 428 2350 481 2350 L 4500 2350 Q 4547 2350 4581 2309 Q 4616 2269 4616 2222 Q 4616 2169 4581 2131 Q 4547 2094 4500 2094 L 481 2094 z " transform="scale(0.015625)"/> <path id="Cmsy10-8" d="M 481 0 Q 428 0 393 37 Q 359 75 359 128 Q 359 175 393 215 Q 428 256 481 256 L 2363 256 L 2363 2003 L 481 2003 Q 428 2003 393 2043 Q 359 2084 359 2131 Q 359 2178 393 2218 Q 428 2259 481 2259 L 2363 2259 L 2363 4147 Q 2363 4197 2400 4230 Q 2438 4263 2491 4263 Q 2534 4263 2576 4230 Q 2619 4197 2619 4147 L 2619 2259 L 4500 2259 Q 4547 2259 4581 2218 Q 4616 2178 4616 2131 Q 4616 2084 4581 2043 Q 4547 2003 4500 2003 L 2619 2003 L 2619 256 L 4500 256 Q 4547 256 4581 215 Q 4616 175 4616 128 Q 4616 75 4581 37 Q 4547 0 4500 0 L 481 0 z " transform="scale(0.015625)"/> <path id="Cmr10-31" d="M 319 0 L 319 172 Q 319 188 331 206 L 1325 1306 Q 1550 1550 1690 1715 Q 1831 1881 1968 2097 Q 2106 2313 2186 2536 Q 2266 2759 2266 3009 Q 2266 3272 2169 3511 Q 2072 3750 1880 3894 Q 1688 4038 1416 4038 Q 1138 4038 916 3870 Q 694 3703 603 3438 Q 628 3444 672 3444 Q 816 3444 917 3347 Q 1019 3250 1019 3097 Q 1019 2950 917 2848 Q 816 2747 672 2747 Q 522 2747 420 2851 Q 319 2956 319 3097 Q 319 3338 409 3548 Q 500 3759 670 3923 Q 841 4088 1055 4175 Q 1269 4263 1509 4263 Q 1875 4263 2190 4108 Q 2506 3953 2690 3670 Q 2875 3388 2875 3009 Q 2875 2731 2753 2481 Q 2631 2231 2440 2026 Q 2250 1822 1953 1562 Q 1656 1303 1563 1216 L 838 519 L 1453 519 Q 1906 519 2211 526 Q 2516 534 2534 550 Q 2609 631 2688 1141 L 2875 1141 L 2694 0 L 319 0 z " transform="scale(0.015625)"/> <path id="Cmex10-15" d="M 2713 -11263 L 1259 -6188 L 819 -6700 L 703 -6578 L 1619 -5503 L 2981 -10266 L 6284 178 Q 6306 256 6400 256 Q 6453 256 6490 218 Q 6528 181 6528 128 L 6528 103 L 2963 -11188 Q 2925 -11263 2853 -11263 L 2713 -11263 z " transform="scale(0.015625)"/> <path id="Cmmi10-2f" d="M 91 -916 Q 91 -759 198 -642 Q 306 -525 459 -525 Q 563 -525 633 -589 Q 703 -653 703 -756 Q 703 -872 637 -964 Q 572 -1056 469 -1094 Q 641 -1147 1006 -1147 Q 1300 -1147 1544 -920 Q 1788 -694 1863 -397 L 2047 353 Q 1700 0 1325 0 Q 1050 0 854 140 Q 659 281 556 515 Q 453 750 453 1013 Q 453 1306 573 1628 Q 694 1950 911 2225 Q 1128 2500 1409 2664 Q 1691 2828 2003 2828 Q 2191 2828 2341 2725 Q 2491 2622 2578 2450 Q 2641 2700 2853 2700 Q 2934 2700 2990 2651 Q 3047 2603 3047 2522 Q 3047 2503 3045 2493 Q 3044 2484 3041 2472 L 2309 -434 Q 2259 -634 2125 -800 Q 1991 -966 1809 -1077 Q 1628 -1188 1412 -1250 Q 1197 -1313 997 -1313 Q 631 -1313 361 -1242 Q 91 -1172 91 -916 z M 1338 166 Q 1747 166 2144 728 L 2497 2125 Q 2453 2347 2322 2505 Q 2191 2663 1991 2663 Q 1778 2663 1589 2489 Q 1400 2316 1275 2075 Q 1156 1844 1045 1411 Q 934 978 934 728 Q 934 509 1034 337 Q 1134 166 1338 166 z " transform="scale(0.015625)"/> <path id="Cmmi10-62" d="M 359 -1472 Q 359 -1453 366 -1447 L 2591 4722 Q 2603 4759 2634 4779 Q 2666 4800 2706 4800 Q 2763 4800 2798 4765 Q 2834 4731 2834 4672 L 2834 4647 L 609 -1522 Q 572 -1600 488 -1600 Q 434 -1600 396 -1562 Q 359 -1525 359 -1472 z " transform="scale(0.015625)"/> <path id="Cmmi10-71" d="M 281 519 Q 281 538 286 575 Q 291 613 295 648 Q 300 684 300 703 L 1094 3872 Q 1119 3981 1125 4044 Q 1125 4147 709 4147 Q 647 4147 647 4231 Q 650 4247 661 4287 Q 672 4328 689 4350 Q 706 4372 738 4372 L 1600 4441 Q 1678 4441 1678 4359 L 756 678 Q 709 575 709 372 Q 709 97 897 97 Q 1094 97 1192 342 Q 1291 588 1369 941 Q 1381 978 1422 978 L 1497 978 Q 1522 978 1539 958 Q 1556 938 1556 916 Q 1481 606 1420 426 Q 1359 247 1225 87 Q 1091 -72 884 -72 Q 628 -72 454 93 Q 281 259 281 519 z " transform="scale(0.015625)"/> <path id="Cmr10-7b" d="M 1594 -72 Q 1206 -72 890 129 Q 575 331 394 667 Q 213 1003 213 1381 Q 213 1759 392 2106 Q 572 2453 889 2661 Q 1206 2869 1594 2869 Q 1969 2869 2276 2722 Q 2584 2575 2584 2241 Q 2584 2116 2495 2023 Q 2406 1931 2278 1931 Q 2150 1931 2061 2023 Q 1972 2116 1972 2241 Q 1972 2353 2044 2436 Q 2116 2519 2222 2541 Q 2000 2681 1600 2681 Q 1294 2681 1106 2478 Q 919 2275 844 1975 Q 769 1675 769 1381 Q 769 1072 861 783 Q 953 494 1158 305 Q 1363 116 1672 116 Q 1975 116 2187 302 Q 2400 488 2478 788 Q 2478 825 2528 825 L 2606 825 Q 2625 825 2640 808 Q 2656 791 2656 769 L 2656 750 Q 2559 372 2271 150 Q 1984 -72 1594 -72 z " transform="scale(0.015625)"/> <path id="Cmr10-42" d="M 1600 -72 Q 1216 -72 887 123 Q 559 319 368 647 Q 178 975 178 1363 Q 178 1656 283 1928 Q 388 2200 583 2414 Q 778 2628 1037 2748 Q 1297 2869 1600 2869 Q 1994 2869 2317 2661 Q 2641 2453 2828 2104 Q 3016 1756 3016 1363 Q 3016 978 2825 648 Q 2634 319 2307 123 Q 1981 -72 1600 -72 z M 1600 116 Q 2113 116 2284 487 Q 2456 859 2456 1434 Q 2456 1756 2422 1967 Q 2388 2178 2272 2350 Q 2200 2456 2089 2536 Q 1978 2616 1854 2658 Q 1731 2700 1600 2700 Q 1400 2700 1220 2609 Q 1041 2519 922 2350 Q 803 2169 770 1951 Q 738 1734 738 1434 Q 738 1075 800 789 Q 863 503 1052 309 Q 1241 116 1600 116 z " transform="scale(0.015625)"/> <path id="Cmr10-52" d="M 213 -19 L 213 1025 Q 213 1075 269 1075 L 347 1075 Q 384 1075 397 1025 Q 575 97 1259 97 Q 1563 97 1767 234 Q 1972 372 1972 659 Q 1972 866 1812 1011 Q 1653 1156 1434 1209 L 1006 1294 Q 791 1341 614 1437 Q 438 1534 325 1695 Q 213 1856 213 2069 Q 213 2350 361 2529 Q 509 2709 746 2789 Q 984 2869 1259 2869 Q 1588 2869 1831 2694 L 2016 2853 Q 2016 2869 2047 2869 L 2094 2869 Q 2113 2869 2128 2851 Q 2144 2834 2144 2816 L 2144 1978 Q 2144 1919 2094 1919 L 2016 1919 Q 1959 1919 1959 1978 Q 1959 2313 1773 2516 Q 1588 2719 1253 2719 Q 966 2719 755 2612 Q 544 2506 544 2247 Q 544 2069 695 1955 Q 847 1841 1050 1791 L 1484 1709 Q 1703 1659 1892 1540 Q 2081 1422 2192 1240 Q 2303 1059 2303 831 Q 2303 600 2223 429 Q 2144 259 2001 146 Q 1859 34 1665 -19 Q 1472 -72 1259 -72 Q 859 -72 575 197 L 341 -56 Q 341 -72 306 -72 L 269 -72 Q 213 -72 213 -19 z " transform="scale(0.015625)"/> </defs> <use xlink:href="#Cmr10-1a" transform="translate(15.324707 27.859375)"/> <use xlink:href="#Cmmi10-12" transform="translate(0 0.75)"/> <use xlink:href="#Cmr10-29" transform="translate(66.923885 0.75)"/> <use xlink:href="#Cmsy10-8" transform="translate(164.609489 0.75)"/> <use xlink:href="#Cmr10-31" transform="translate(258.962084 0.75)"/> <use xlink:href="#Cmex10-15" transform="translate(308.962084 104.078125) scale(0.72923)"/> <use xlink:href="#Cmmi10-2f" transform="translate(394.383959 0.75)"/> <use xlink:href="#Cmmi10-62" transform="translate(442.089037 0.75)"/> <use xlink:href="#Cmmi10-71" transform="translate(492.089037 0.75)"/> <use xlink:href="#Cmr10-7b" transform="translate(562.152273 0.75)"/> <use xlink:href="#Cmr10-42" transform="translate(606.537038 0.75)"/> <use xlink:href="#Cmr10-52" transform="translate(656.537038 0.75)"/> <use xlink:href="#Cmmi10-12" transform="translate(719.858383 35.9125) scale(0.7)"/> <use xlink:href="#Cmr10-31" transform="translate(718.858383 -30.251563) scale(0.7)"/> <path d="M 381.883959 106.75 L 381.883959 113 L 534.374193 113 L 534.374193 106.75 L 381.883959 106.75 z "/> <path d="M 718.858383 22.625 L 718.858383 28.875 L 753.858383 28.875 L 753.858383 22.625 L 718.858383 22.625 z "/> </g> </g> </g> </svg></div>
</div>
</details>
</main>
<footer>
<span>Кадр считается за <span class="ms" id="frameMs">—</span> мс. В 2023-м ролик на 30 секунд рендерился минутами.</span>
<span>g по умолчанию — 2.0 м/с², как в оригинале · θ₀ = 2.71 ≈ e</span>
</footer>
</div>
<div class="toast" id="toast" role="status"></div>
<script>
(() => {
'use strict';
const TAU = Math.PI * 2;
const wrapPi = a => { a = (a + Math.PI) % TAU; if (a < 0) a += TAU; return a - Math.PI; };
const C = {
yellow: '#ffff00', blue: '#58c4dd', red: '#fc6255', orange: '#ff862f',
white: '#ececec', grey: '#8a8279', canvas: '#0f0e0d',
};
// ---------- режимы ----------
const S = (key, label, min, max, step, def, opts = {}) => ({ key, label, min, max, step, def, ...opts });
const gSlider = S('g', 'Ускорение g', 0.1, 20, 0.1, 2.0, { unit: 'м/с²', preset: 9.8 });
const MODES = {
single: {
sliders: [
S('th0', 'Начальный угол θ₀', -3.14, 3.14, 0.01, 2.71, { unit: 'рад', resets: true }),
S('w0', 'Начальная скорость θ̇₀', -10, 10, 0.1, 0, { unit: 'рад/с', resets: true }),
S('b', 'Вязкость b', 0, 5, 0.01, 0.35),
gSlider,
S('l', 'Длина стержня l', 0.1, 5, 0.1, 1.0, { unit: 'м' }),
S('m', 'Масса груза m', 0.1, 10, 0.1, 5.0, { unit: 'кг' }),
],
init: p => [p.th0, p.w0],
deriv: (t, y, p) => [y[1], -(p.g / p.l) * Math.sin(y[0]) - (p.b / (p.m * p.l)) * y[1]],
reach: p => p.l,
series: [{ i: 0, color: C.yellow, label: null }],
bobs: [{ color: C.red, trail: C.orange, l: p => p.l, m: p => p.m, sub: '' }],
energy: (y, p) => 0.5 * p.m * (p.l * y[1]) ** 2 + p.m * p.g * p.l * (1 - Math.cos(y[0])),
readouts: ['t', 'th', 'w', 'E'],
},
forced: {
sliders: [
S('th0', 'Начальный угол θ₀', -3.14, 3.14, 0.01, 2.71, { unit: 'рад', resets: true }),
S('w0', 'Начальная скорость θ̇₀', -10, 10, 0.1, 0, { unit: 'рад/с', resets: true }),
S('b', 'Вязкость b', 0, 5, 0.01, 0.35),
gSlider,
S('l', 'Длина стержня l', 0.1, 5, 0.1, 1.0, { unit: 'м' }),
S('m', 'Масса груза m', 0.1, 10, 0.1, 5.0, { unit: 'кг' }),
S('a1', 'Эксп. коэффициент a₁', -2, 2, 0.05, 1.0),
S('a2', 'Период. коэффициент a₂', 0, 10, 0.05, 2.0),
],
init: p => [p.th0, p.w0],
deriv: (t, y, p) => [y[1],
Math.exp(p.a1 * t / 30) * Math.cos(p.a2 * t)
- (p.g / p.l) * Math.sin(y[0]) - (p.b / (p.m * p.l)) * y[1]],
reach: p => p.l,
series: [{ i: 0, color: C.yellow, label: null }],
bobs: [{ color: C.red, trail: C.orange, l: p => p.l, m: p => p.m, sub: '' }],
energy: (y, p) => 0.5 * p.m * (p.l * y[1]) ** 2 + p.m * p.g * p.l * (1 - Math.cos(y[0])),
readouts: ['t', 'th', 'w', 'F', 'E'],
},
double: {
sliders: [
S('th10', 'Начальный угол θ₁', -3.14, 3.14, 0.01, 2.71, { unit: 'рад', resets: true }),
S('w10', 'Нач. скорость θ̇₁', -10, 10, 0.1, 0, { unit: 'рад/с', resets: true }),
S('th20', 'Начальный угол θ₂', -3.14, 3.14, 0.01, 2.71, { unit: 'рад', resets: true }),
S('w20', 'Нач. скорость θ̇₂', -10, 10, 0.1, 0, { unit: 'рад/с', resets: true }),
S('l1', 'Длина стержня l₁', 0.1, 5, 0.1, 1.0, { unit: 'м' }),
S('l2', 'Длина стержня l₂', 0.1, 5, 0.1, 1.0, { unit: 'м' }),
S('m1', 'Масса груза m₁', 0.1, 10, 0.1, 5.0, { unit: 'кг' }),
S('m2', 'Масса груза m₂', 0.1, 10, 0.1, 5.0, { unit: 'кг' }),
gSlider,
],
init: p => [p.th10, p.w10, p.th20, p.w20],
deriv: (t, y, p) => {
const [a1, w1, a2, w2] = y, { m1, m2, l1, l2, g } = p;
const d = a1 - a2, sd = Math.sin(d), cd = Math.cos(d);
const den = 2 * m1 + m2 - m2 * Math.cos(2 * d);
const dw1 = (-g * (2 * m1 + m2) * Math.sin(a1) - m2 * g * Math.sin(a1 - 2 * a2)
- 2 * sd * m2 * (l2 * w2 * w2 + l1 * w1 * w1 * cd)) / (l1 * den);
const dw2 = (2 * sd * (l1 * w1 * w1 * (m1 + m2) + g * (m1 + m2) * Math.cos(a1)
+ l2 * w2 * w2 * m2 * cd)) / (l2 * den);
return [w1, dw1, w2, dw2];
},
reach: p => p.l1 + p.l2,
series: [
{ i: 0, color: C.yellow, label: 'θ₁' },
{ i: 2, color: C.blue, label: 'θ₂' },
],
bobs: [
{ color: C.yellow, trail: C.yellow, l: p => p.l1, m: p => p.m1, sub: '1' },
{ color: C.blue, trail: C.blue, l: p => p.l2, m: p => p.m2, sub: '2' },
],
energy: (y, p) => {
const [a1, w1, a2, w2] = y, { m1, m2, l1, l2, g } = p;
return 0.5 * (m1 + m2) * l1 * l1 * w1 * w1 + 0.5 * m2 * l2 * l2 * w2 * w2
+ m2 * l1 * l2 * w1 * w2 * Math.cos(a1 - a2)
- (m1 + m2) * g * l1 * Math.cos(a1) - m2 * g * l2 * Math.cos(a2)
+ (m1 + m2) * g * l1 + m2 * g * l2;
},
readouts: ['t', 'th1', 'th2', 'w1', 'w2', 'E'],
},
};
const READOUT_DEFS = {
t: { label: 't', fmt: s => s.t.toFixed(2) + ' с' },
th: { label: 'θ', fmt: s => s.y[0].toFixed(2) + ' рад' },
w: { label: 'θ̇', fmt: s => s.y[1].toFixed(2) + ' рад/с' },
th1: { label: 'θ₁', fmt: s => s.y[0].toFixed(2) + ' рад' },
th2: { label: 'θ₂', fmt: s => s.y[2].toFixed(2) + ' рад' },
w1: { label: 'θ̇₁', fmt: s => s.y[1].toFixed(2) + ' рад/с' },
w2: { label: 'θ̇₂', fmt: s => s.y[3].toFixed(2) + ' рад/с' },
F: { label: 'F', fmt: s => (Math.exp(P.a1 * s.t / 30) * Math.cos(P.a2 * s.t)).toFixed(2) },
E: { label: 'E', fmt: s => MODES[s.mode].energy(s.y, P).toFixed(2) + ' Дж' },
};
// ---------- пресеты ----------
const PRESETS = [
{ label: 'Солнышко', mode: 'single', view: 'wrap', params: { th0: 0, w0: 4.5, b: 0.1, g: 2, l: 1, m: 5 } },
{ label: 'Сепаратриса', mode: 'single', view: 'flat', field: true, params: { th0: 3.1, w0: 0, b: 0, g: 2, l: 1, m: 5 } },
{ label: 'Резонанс', mode: 'forced', view: 'flat', params: { th0: 0.1, w0: 0, b: 0.1, g: 2, l: 1, m: 5, a1: 0, a2: 1.4 } },
{ label: 'Хаос', mode: 'double', view: 'flat', ghosts: true, params: { th10: 2.71, w10: 0, th20: 2.71, w20: 0, l1: 1, l2: 1, m1: 5, m2: 5, g: 2 } },
];
// ---------- состояние ----------
const P = {};
const REDUCED = matchMedia('(prefers-reduced-motion: reduce)').matches;
const sim = {
mode: 'single', y: [], t: 0,
running: !REDUCED,
view: 'flat', energy: [], ghosts: null, yaw: 0.6, pitch: 0.35,
dragging: -1, speed: 1,
phase: [], // по одному плоскому массиву [θ,ω,θ,ω,…] на серию
bobTrail: [], // [{t, ang:[…]}]
maxTh: 1, maxW: 1, rTh: 1.4, rW: 1.4,
bobPx: [], pivotPx: null,
};
const H = 0.002, PUSH_EVERY = 3, TRAIL_CAP = 24000, BOB_FADE = 0.55;
let pushCnt = 0;
function rk4(t, y, h, f) {
const k1 = f(t, y, P);
const y2 = y.map((v, i) => v + 0.5 * h * k1[i]);
const k2 = f(t + h / 2, y2, P);
const y3 = y.map((v, i) => v + 0.5 * h * k2[i]);
const k3 = f(t + h / 2, y3, P);
const y4 = y.map((v, i) => v + h * k3[i]);
const k4 = f(t + h, y4, P);
return y.map((v, i) => v + h / 6 * (k1[i] + 2 * k2[i] + 2 * k3[i] + k4[i]));
}
function recomputeMax() {
let mt = 0.8, mw = 0.8;
for (const arr of sim.phase) {
for (let i = 0; i < arr.length; i += 2) {
if (!Number.isFinite(arr[i]) || !Number.isFinite(arr[i + 1])) continue;
const a = Math.abs(arr[i]), b = Math.abs(arr[i + 1]);
if (a > mt) mt = a;
if (b > mw) mw = b;
}
}
sim.maxTh = mt;
sim.maxW = mw;
}
function pushPhase() {
const md = MODES[sim.mode];
let trimmed = false;
md.series.forEach((s, k) => {
const th = sim.y[s.i], w = sim.y[s.i + 1];
const arr = sim.phase[k];
arr.push(th, w);
if (arr.length > TRAIL_CAP) { arr.splice(0, TRAIL_CAP / 4); trimmed = true; }
const a = Math.abs(th), b = Math.abs(w);
if (Number.isFinite(a) && a > sim.maxTh) sim.maxTh = a;
if (Number.isFinite(b) && b > sim.maxW) sim.maxW = b;
});
if (trimmed) recomputeMax();
sim.energy.push(sim.t, md.energy(sim.y, P));
if (sim.energy.length > TRAIL_CAP / 2) sim.energy.splice(0, TRAIL_CAP / 8);
}
function stepSim(dt) {
const md = MODES[sim.mode];
const n = Math.max(1, Math.ceil(dt / H)), h = dt / n;
for (let i = 0; i < n; i++) {
if (sim.ghosts) for (let gi = 0; gi < sim.ghosts.length; gi++) sim.ghosts[gi] = rk4(sim.t, sim.ghosts[gi], h, md.deriv);
sim.y = rk4(sim.t, sim.y, h, md.deriv);
sim.t += h;
if (++pushCnt >= PUSH_EVERY) { pushCnt = 0; pushPhase(); }
}
sim.bobTrail.push({ t: sim.t, ang: md.series.map(s => sim.y[s.i]) });
while (sim.bobTrail.length && sim.t - sim.bobTrail[0].t > BOB_FADE) sim.bobTrail.shift();
}
function resetSim() {
const md = MODES[sim.mode];
sim.y = md.init(P);
sim.t = 0;
sim.phase = md.series.map(() => []);
sim.energy = [];
sim.bobTrail = [];
sim.maxTh = Math.max(...md.series.map(s => Math.abs(sim.y[s.i])), 0.8);
sim.maxW = 0.8;
pushCnt = 0;
sim.dragging = -1;
pushPhase();
initGhosts();
}
// ---------- DOM ----------
const $ = id => document.getElementById(id);
const slidersEl = $('sliders'), readoutsEl = $('readouts'), legendEl = $('legend');
const btnPlay = $('btnPlay'), btnReset = $('btnReset');
const viewSeg = $('viewSeg'), fieldEl = $('field'), fieldWrap = $('fieldWrap');
const ghostsEl = $('ghosts'), ghostsWrap = $('ghostsWrap');
let readoutSpans = [];
let sliderCtl = {};
function initGhosts() {
if (sim.mode === 'double' && ghostsEl.checked) {
sim.ghosts = Array.from({ length: 8 }, (_, k) => {
const y = sim.y.slice();
y[0] += (k + 1) * 1e-6;
return y;
});
} else sim.ghosts = null;
}
function buildSliders() {
slidersEl.innerHTML = '';
sliderCtl = {};
for (const cfg of MODES[sim.mode].sliders) {
P[cfg.key] = cfg.def;
const row = document.createElement('div');
row.className = 'srow';
const label = document.createElement('label');
const name = document.createElement('span');
name.textContent = cfg.label;
const out = document.createElement('output');
const fmt = v => v.toFixed(2) + (cfg.unit ? ' ' + cfg.unit : '');
out.textContent = fmt(cfg.def);
label.append(name, out);
if (cfg.preset != null) {
const chip = document.createElement('button');
chip.type = 'button'; chip.className = 'preset'; chip.textContent = String(cfg.preset);
chip.title = 'Земное значение';
name.append(' ', chip);
chip.addEventListener('click', () => { input.value = cfg.preset; input.dispatchEvent(new Event('input')); });
}
const input = document.createElement('input');
input.type = 'range';
input.min = cfg.min; input.max = cfg.max; input.step = cfg.step; input.value = cfg.def;
input.setAttribute('aria-label', cfg.label);
input.addEventListener('input', () => {
P[cfg.key] = parseFloat(input.value);
out.textContent = fmt(P[cfg.key]);
if (cfg.resets) resetSim();
updateHash();
});
label.htmlFor = input.id = 'sl-' + cfg.key;
row.append(label, input);
slidersEl.append(row);
sliderCtl[cfg.key] = { input, out, fmt };
}
}
function buildPresets() {
const el = $('presets');
for (const p of PRESETS) {
const b = document.createElement('button');
b.type = 'button';
b.textContent = p.label;
b.addEventListener('click', () => applyPreset(p));
el.append(b);
}
}
function applyParams(params) {
for (const [k, v] of Object.entries(params)) {
const ctl = sliderCtl[k];
if (!ctl) continue;
P[k] = v;
ctl.input.value = v;
ctl.out.textContent = ctl.fmt(v);
}
}
function applyPreset(p) {
setMode(p.mode);
applyParams(p.params);
setView(p.view || 'flat');
ghostsEl.checked = !!p.ghosts;
if ('field' in p) fieldEl.checked = p.field;
resetSim();
updateHash();
}
function buildReadouts() {
readoutsEl.innerHTML = '';
readoutSpans = [];
for (const key of MODES[sim.mode].readouts) {
const def = READOUT_DEFS[key];
const dt = document.createElement('dt');
dt.textContent = def.label;
const dd = document.createElement('dd');
readoutsEl.append(dt, dd);
readoutSpans.push([dd, def.fmt]);
}
}
function buildLegend() {
legendEl.innerHTML = '';
for (const s of MODES[sim.mode].series) {
if (!s.label) continue;
const chip = document.createElement('span');
chip.className = 'chip';
const i = document.createElement('i');
i.style.background = s.color;
chip.append(i, s.label);
legendEl.append(chip);
}
}
function setMode(mode) {
sim.mode = mode;
document.querySelectorAll('.tabs button').forEach(b =>
b.setAttribute('aria-pressed', String(b.dataset.mode === mode)));
buildSliders();
buildReadouts();
buildLegend();
ghostsWrap.hidden = mode !== 'double';
fieldWrap.hidden = MODES[mode].series.length !== 1;
resetSim();
}
function setView(v) {
sim.view = v;
viewSeg.querySelectorAll('button').forEach(b =>
b.setAttribute('aria-pressed', String(b.dataset.v === v)));
cvF.style.touchAction = v === 'cyl3d' ? 'none' : '';
}
// ---------- канвасы ----------
const cvP = $('cv-pend'), cvF = $('cv-phase'), cvE = $('cv-energy');
const ctxP = cvP.getContext('2d'), ctxF = cvF.getContext('2d'), ctxE = cvE.getContext('2d');
const dpr = Math.min(devicePixelRatio || 1, 2);
function fitCanvas(cv) {
const w = cv.clientWidth, h = cv.clientHeight;
if (cv.width !== Math.round(w * dpr)) { cv.width = Math.round(w * dpr); cv.height = Math.round(h * dpr); }
}
new ResizeObserver(() => { fitCanvas(cvP); fitCanvas(cvF); fitCanvas(cvE); }).observe(cvP);
function mathText(ctx, ch, sub, x, y, size, color) {
ctx.fillStyle = color;
ctx.font = 'italic ' + size + 'px ' + 'Georgia, "Times New Roman", serif';
ctx.fillText(ch, x, y);
if (sub) {
const w = ctx.measureText(ch).width;
ctx.font = 'italic ' + (size * 0.62) + 'px Georgia, "Times New Roman", serif';
ctx.fillText(sub, x + w + 1, y + size * 0.22);
}
}
function drawAngleArc(ctx, px, py, theta, r, sub) {
const w = wrapPi(theta);
if (Math.abs(w) < 0.03) return;
const to = Math.atan2(Math.cos(w), Math.sin(w));
ctx.beginPath();
ctx.strokeStyle = C.grey;
ctx.lineWidth = 1.4;
ctx.arc(px, py, r, Math.PI / 2, to, w > 0);
ctx.stroke();
const scale = Math.min(1, Math.abs(w) ** (1 / 3));
const mid = Math.PI / 2 - w / 2;
const lr = r + 15;
ctx.textAlign = 'center'; ctx.textBaseline = 'middle';
mathText(ctx, 'θ', sub, px + lr * Math.cos(mid), py + lr * Math.sin(mid), 18 * scale, C.white);
ctx.textAlign = 'left'; ctx.textBaseline = 'alphabetic';
}
function drawPend() {
fitCanvas(cvP);
const W = cvP.width / dpr, Hh = cvP.height / dpr;
ctxP.setTransform(dpr, 0, 0, dpr, 0, 0);
ctxP.fillStyle = C.canvas;
ctxP.fillRect(0, 0, W, Hh);
const md = MODES[sim.mode];
const reach = md.reach(P);
const s = 0.42 * Math.min(W, Hh) / reach;
const cx = W / 2, cy = Hh / 2;
sim.pivotPx = { x: cx, y: cy };
// штриховая вертикаль
ctxP.setLineDash([6, 6]);
ctxP.strokeStyle = '#4a453f';
ctxP.lineWidth = 1.2;
ctxP.beginPath();
ctxP.moveTo(cx, cy);
ctxP.lineTo(cx, cy + s * md.bobs[0].l(P) * 0.95);
ctxP.stroke();
ctxP.setLineDash([]);
// позиции грузов
const pts = [{ x: cx, y: cy }];
let px = cx, py = cy;
md.bobs.forEach((b, k) => {
const th = sim.y[md.series[k].i];
px += s * b.l(P) * Math.sin(th);
py += s * b.l(P) * Math.cos(th);
pts.push({ x: px, y: py });
});
// затухающие следы грузов
for (let k = 0; k < md.bobs.length; k++) {
const tr = sim.bobTrail;
if (tr.length < 2) break;
ctxP.lineWidth = 2.4;
ctxP.lineCap = 'round';
for (let i = 1; i < tr.length; i++) {
const posAt = rec => {
let x = cx, y = cy;
for (let j = 0; j <= k; j++) {
x += s * md.bobs[j].l(P) * Math.sin(rec.ang[j]);
y += s * md.bobs[j].l(P) * Math.cos(rec.ang[j]);
}
return { x, y };
};
const a = posAt(tr[i - 1]), b = posAt(tr[i]);
const alpha = Math.max(0, 1 - (sim.t - tr[i].t) / BOB_FADE);
ctxP.globalAlpha = alpha * 0.75;
ctxP.strokeStyle = md.bobs[k].trail;
ctxP.beginPath(); ctxP.moveTo(a.x, a.y); ctxP.lineTo(b.x, b.y); ctxP.stroke();
}
ctxP.globalAlpha = 1;
}
// призрачные клоны: чувствительность к начальным условиям
if (sim.ghosts) {
for (const gs of sim.ghosts) {
let gpx = cx, gpy = cy;
ctxP.strokeStyle = 'rgba(236,236,236,0.10)';
ctxP.lineWidth = 1.2;
ctxP.beginPath();
ctxP.moveTo(gpx, gpy);
const ends = [];
for (let j = 0; j < md.bobs.length; j++) {
gpx += s * md.bobs[j].l(P) * Math.sin(gs[md.series[j].i]);
gpy += s * md.bobs[j].l(P) * Math.cos(gs[md.series[j].i]);
ctxP.lineTo(gpx, gpy);
ends.push([gpx, gpy, md.bobs[j].color]);
}
ctxP.stroke();
ctxP.globalAlpha = 0.3;
for (const [ex, ey, ec] of ends) {
ctxP.fillStyle = ec;
ctxP.beginPath(); ctxP.arc(ex, ey, 3.4, 0, TAU); ctxP.fill();
}
ctxP.globalAlpha = 1;
}
}
// стержни
ctxP.strokeStyle = C.white;
ctxP.lineWidth = 2.2;
ctxP.beginPath();
for (let i = 0; i < pts.length - 1; i++) {
ctxP.moveTo(pts[i].x, pts[i].y);
ctxP.lineTo(pts[i + 1].x, pts[i + 1].y);
}
ctxP.stroke();
// точка подвеса
ctxP.fillStyle = C.white;
ctxP.beginPath(); ctxP.arc(cx, cy, 3.2, 0, TAU); ctxP.fill();
// дуги углов (θ₂ — от вертикали в точке сочленения)
drawAngleArc(ctxP, cx, cy, sim.y[0], Math.min(34, s * md.bobs[0].l(P) * 0.45), md.bobs.length > 1 ? '1' : '');
if (md.bobs.length > 1) {
const j = pts[1];
ctxP.setLineDash([4, 5]);
ctxP.strokeStyle = '#4a453f';
ctxP.beginPath(); ctxP.moveTo(j.x, j.y); ctxP.lineTo(j.x, j.y + s * P.l2 * 0.6); ctxP.stroke();
ctxP.setLineDash([]);
drawAngleArc(ctxP, j.x, j.y, sim.y[2], Math.min(28, s * P.l2 * 0.4), '2');
}
// грузы
sim.bobPx = [];
md.bobs.forEach((b, k) => {
const p = pts[k + 1];
const r = 7 * Math.cbrt(b.m(P)) + 2;
ctxP.fillStyle = b.color;
ctxP.beginPath(); ctxP.arc(p.x, p.y, r, 0, TAU); ctxP.fill();
ctxP.strokeStyle = C.canvas;
ctxP.lineWidth = 2;
ctxP.stroke();
sim.bobPx.push({ x: p.x, y: p.y, r: Math.max(r, 16) });
});
}
const niceStep = raw => {
if (!Number.isFinite(raw) || raw <= 0) return 1;
const p = Math.pow(10, Math.floor(Math.log10(raw)));
const m = raw / p;
return (m <= 1 ? 1 : m <= 2 ? 2 : m <= 5 ? 5 : 10) * p;
};
function drawPhase() {
fitCanvas(cvF);
const W = cvF.width / dpr, Hh = cvF.height / dpr;
ctxF.setTransform(dpr, 0, 0, dpr, 0, 0);
ctxF.fillStyle = C.canvas;
ctxF.fillRect(0, 0, W, Hh);
const md = MODES[sim.mode];
const wrap = sim.view === 'wrap';
const tTh = wrap ? Math.PI : Math.min(Math.max(sim.maxTh * 1.15, 1.2), 1e4);
const tW = Math.min(Math.max(sim.maxW * 1.15, 1.2), 1e4);
sim.rTh += (tTh - sim.rTh) * 0.12;
sim.rW += (tW - sim.rW) * 0.12;
if (sim.view === 'cyl3d') { drawPhase3D(W, Hh); return; }
const pad = 30;
const cx = W / 2, cy = Hh / 2;
const sx = (W / 2 - pad) / sim.rTh, sy = (Hh / 2 - pad) / sim.rW;
const X = th => cx + th * sx, Y = w => cy - w * sy;
// оси со стрелками
ctxF.strokeStyle = C.grey;
ctxF.fillStyle = C.grey;
ctxF.lineWidth = 1.3;
ctxF.beginPath();
ctxF.moveTo(pad * 0.4, cy); ctxF.lineTo(W - pad * 0.4, cy);
ctxF.moveTo(cx, Hh - pad * 0.4); ctxF.lineTo(cx, pad * 0.4);
ctxF.stroke();
ctxF.beginPath();
ctxF.moveTo(W - pad * 0.4, cy); ctxF.lineTo(W - pad * 0.4 - 9, cy - 4); ctxF.lineTo(W - pad * 0.4 - 9, cy + 4); ctxF.fill();
ctxF.beginPath();
ctxF.moveTo(cx, pad * 0.4); ctxF.lineTo(cx - 4, pad * 0.4 + 9); ctxF.lineTo(cx + 4, pad * 0.4 + 9); ctxF.fill();
// деления
ctxF.font = '10.5px ' + 'ui-monospace, Menlo, monospace';
ctxF.textAlign = 'center'; ctxF.textBaseline = 'top';
if (wrap) {
const t = [[-Math.PI, '−π'], [-Math.PI / 2, '−π/2'], [Math.PI / 2, 'π/2'], [Math.PI, 'π']];
for (const [v, lb] of t) {
ctxF.beginPath(); ctxF.moveTo(X(v), cy - 4); ctxF.lineTo(X(v), cy + 4); ctxF.stroke();
ctxF.fillText(lb, X(v), cy + 7);
}
} else {
const st = niceStep(sim.rTh / 2.2);
for (let v = st; v <= sim.rTh; v += st) {
for (const vv of [v, -v]) {
ctxF.beginPath(); ctxF.moveTo(X(vv), cy - 4); ctxF.lineTo(X(vv), cy + 4); ctxF.stroke();
ctxF.fillText(String(parseFloat(vv.toFixed(2))), X(vv), cy + 7);
}
}
}
const stw = niceStep(sim.rW / 2.2);
ctxF.textAlign = 'left'; ctxF.textBaseline = 'middle';
for (let v = stw; v <= sim.rW; v += stw) {
for (const vv of [v, -v]) {
ctxF.beginPath(); ctxF.moveTo(cx - 4, Y(vv)); ctxF.lineTo(cx + 4, Y(vv)); ctxF.stroke();
ctxF.fillText(String(parseFloat(vv.toFixed(2))), cx + 8, Y(vv));
}
}
// подписи осей
ctxF.textAlign = 'left'; ctxF.textBaseline = 'alphabetic';
mathText(ctxF, 'θ', '', W - pad * 0.4 - 4, cy - 10, 17, C.white);
mathText(ctxF, 'θ̇', '', cx + 10, pad * 0.4 + 14, 17, C.white);
// векторное поле и сепаратриса (только одномаятниковые режимы)
if (fieldEl.checked && md.series.length === 1) {
ctxF.strokeStyle = C.grey;
ctxF.fillStyle = C.grey;
ctxF.lineWidth = 1;
ctxF.globalAlpha = 0.16;
const stepPx = 36;
for (let gx = pad; gx <= W - pad; gx += stepPx) {
for (let gy = pad; gy <= Hh - pad; gy += stepPx) {
const th = (gx - cx) / sx, w = (cy - gy) / sy;
const d = md.deriv(sim.t, [th, w], P);
const vx = d[0] * sx, vy = -d[1] * sy;
const n = Math.hypot(vx, vy) || 1;
ctxF.beginPath();
ctxF.moveTo(gx - vx / n * 4, gy - vy / n * 4);
ctxF.lineTo(gx + vx / n * 4, gy + vy / n * 4);
ctxF.stroke();
ctxF.beginPath(); ctxF.arc(gx + vx / n * 4, gy + vy / n * 4, 1.1, 0, TAU); ctxF.fill();
}
}
// сепаратриса θ̇ = ±2·√(g/l)·|cos(θ/2)| — точна только для консервативного маятника
if (sim.mode === 'single' && P.b < 0.005) {
ctxF.globalAlpha = 0.5;
ctxF.strokeStyle = '#17a8a8';
ctxF.setLineDash([5, 5]);
const sepK = 2 * Math.sqrt(P.g / P.l);
for (const sgn of [1, -1]) {
ctxF.beginPath();
let first = true;
for (let th = -sim.rTh; th <= sim.rTh; th += sim.rTh / 160) {
const x = X(th), y = Y(sgn * sepK * Math.abs(Math.cos(th / 2)));
if (first) { ctxF.moveTo(x, y); first = false; } else ctxF.lineTo(x, y);
}
ctxF.stroke();
}
ctxF.setLineDash([]);
ctxF.globalAlpha = 1;
}
}
// траектории
md.series.forEach((sr, k) => {
const arr = sim.phase[k];
if (arr.length >= 4) {
ctxF.strokeStyle = sr.color;
ctxF.lineWidth = 1.8;
ctxF.globalAlpha = 0.85;
ctxF.beginPath();
let prev = null;
for (let i = 0; i < arr.length; i += 2) {
let th = arr[i];
if (!Number.isFinite(th)) { prev = null; continue; }
if (wrap) th = wrapPi(th);
const x = X(th), y = Y(arr[i + 1]);
if (prev === null || (wrap && Math.abs(th - prev) > Math.PI)) ctxF.moveTo(x, y);
else ctxF.lineTo(x, y);
prev = th;
}
ctxF.stroke();
ctxF.globalAlpha = 1;
}
// текущая точка с кольцом цвета фона — рисуется всегда, даже без следа
let th = sim.y[sr.i];
if (wrap) th = wrapPi(th);
const x = X(th), y = Y(sim.y[sr.i + 1]);
ctxF.beginPath(); ctxF.arc(x, y, 6.5, 0, TAU); ctxF.fillStyle = C.canvas; ctxF.fill();
ctxF.beginPath(); ctxF.arc(x, y, 4.5, 0, TAU); ctxF.fillStyle = sr.color; ctxF.fill();
});
// призраки на портрете
if (sim.ghosts) {
ctxF.globalAlpha = 0.35;
for (const gs of sim.ghosts) {
for (const sr of md.series) {
let th = gs[sr.i];
if (wrap) th = wrapPi(th);
ctxF.fillStyle = sr.color;
ctxF.beginPath(); ctxF.arc(X(th), Y(gs[sr.i + 1]), 2.4, 0, TAU); ctxF.fill();
}
}
ctxF.globalAlpha = 1;
}
}
function drawPhase3D(W, Hh) {
const md = MODES[sim.mode];
const cx = W / 2, cy = Hh / 2;
const L = 1.7, R = 1, D = 4.2;
const S3 = Math.min(W, Hh) * 0.3;
const cp = Math.cos(sim.pitch), sp = Math.sin(sim.pitch);
const cw = Math.cos(sim.yaw), sw = Math.sin(sim.yaw);
const proj = (x, y, z) => {
const x1 = x * cw + z * sw, z1 = -x * sw + z * cw;
const y2 = y * cp - z1 * sp, z2 = y * sp + z1 * cp;
const f = D / (D - z2);
return [cx + x1 * f * S3, cy - y2 * f * S3];
};
const P3 = (th, w) => proj(Math.max(-1, Math.min(1, w / sim.rW)) * L, -Math.cos(th) * R, Math.sin(th) * R);
// каркас цилиндра: два обода и четыре образующие
ctxF.strokeStyle = C.grey;
ctxF.lineWidth = 1;
ctxF.globalAlpha = 0.35;
for (const ex of [-L, L]) {
ctxF.beginPath();
for (let i = 0; i <= 72; i++) {
const a = i * TAU / 72;
const [x, y] = proj(ex, -Math.cos(a) * R, Math.sin(a) * R);
i === 0 ? ctxF.moveTo(x, y) : ctxF.lineTo(x, y);
}
ctxF.stroke();
}
ctxF.globalAlpha = 0.15;
for (let k = 0; k < 4; k++) {
const a = k * Math.PI / 2;
const [x1, y1] = proj(-L, -Math.cos(a) * R, Math.sin(a) * R);
const [x2, y2] = proj(L, -Math.cos(a) * R, Math.sin(a) * R);
ctxF.beginPath(); ctxF.moveTo(x1, y1); ctxF.lineTo(x2, y2); ctxF.stroke();
}
ctxF.globalAlpha = 1;
ctxF.textAlign = 'left'; ctxF.textBaseline = 'middle';
const [lx, ly] = proj(L * 1.22, 0, 0);
mathText(ctxF, 'θ̇', '', lx, ly, 16, C.grey);
// траектории, намотанные на цилиндр
md.series.forEach((sr, k) => {
const arr = sim.phase[k];
if (arr.length >= 4) {
ctxF.strokeStyle = sr.color;
ctxF.lineWidth = 1.5;
ctxF.globalAlpha = 0.8;
ctxF.beginPath();
let started = false;
for (let i = 0; i < arr.length; i += 2) {
if (!Number.isFinite(arr[i])) { started = false; continue; }
const [x, y] = P3(arr[i], arr[i + 1]);
if (!started) { ctxF.moveTo(x, y); started = true; } else ctxF.lineTo(x, y);
}
ctxF.stroke();
ctxF.globalAlpha = 1;
}
const [x, y] = P3(sim.y[sr.i], sim.y[sr.i + 1]);
ctxF.beginPath(); ctxF.arc(x, y, 6, 0, TAU); ctxF.fillStyle = C.canvas; ctxF.fill();
ctxF.beginPath(); ctxF.arc(x, y, 4.2, 0, TAU); ctxF.fillStyle = sr.color; ctxF.fill();
});
// призраки и в 3D
if (sim.ghosts) {
ctxF.globalAlpha = 0.35;
for (const gs of sim.ghosts) {
for (const sr of md.series) {
const [x, y] = P3(gs[sr.i], gs[sr.i + 1]);
ctxF.fillStyle = sr.color;
ctxF.beginPath(); ctxF.arc(x, y, 2.4, 0, TAU); ctxF.fill();
}
}
ctxF.globalAlpha = 1;
}
ctxF.font = '11px ui-monospace, Menlo, monospace';
ctxF.fillStyle = C.grey;
ctxF.textAlign = 'left'; ctxF.textBaseline = 'alphabetic';
ctxF.fillText((REDUCED ? '' : 'крутится само · ') + 'перетащите, чтобы повернуть', 12, Hh - 12);
}
function drawEnergy() {
fitCanvas(cvE);
const W = cvE.width / dpr, Hh = cvE.height / dpr;
ctxE.setTransform(dpr, 0, 0, dpr, 0, 0);
ctxE.fillStyle = C.canvas;
ctxE.fillRect(0, 0, W, Hh);
const arr = sim.energy;
if (arr.length < 4) return;
let t0 = Infinity, t1 = -Infinity, eMax = 0;
for (let i = 0; i < arr.length; i += 2) {
if (!Number.isFinite(arr[i]) || !Number.isFinite(arr[i + 1])) continue;
if (arr[i] < t0) t0 = arr[i];
if (arr[i] > t1) t1 = arr[i];