feat(math6): симметрия (Гл.6 §4 центральная, §5 осевая) — reflectFold

Math6Anim.reflectFold: на координатной плоскости треугольник плавно
переходит на свой образ — центральная (поворот 180° вокруг O, режим
'central') или осевая (отражение через Oy, режим 'axial'); образ показан
красным пунктиром, ось/центр выделены. Один компонент закрыл §4 и §5.
Headless-safe. Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-02 21:56:57 +03:00
parent 555f701b57
commit 97966ba2df
3 changed files with 51 additions and 0 deletions
+10
View File
@@ -405,9 +405,14 @@ function buildP4(){
+'<div id="p4-q2" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap">$x\'=$ <input type="number" id="p4-x2" class="tinp" style="width:70px;text-align:center"> $y\'=$ <input type="number" id="p4-y2" class="tinp" style="width:70px;text-align:center"><button class="btn primary" id="p4-go2">Проверить</button></div>'
+'<div class="feedback" id="p4-fb2"></div></div>';
h+='<div class="wg" id="p4-symfig-wg"><div class="wg-header"><span class="wg-badge">Анимация</span><div class="wg-title">Центральная симметрия вживую</div></div>'
+'<div class="wg-help">Жёлтый треугольник плавно поворачивается на $180°$ вокруг центра $O$ и ложится на свой образ (красный пунктир).</div>'
+'<div id="p4-symfig"></div></div>';
h+=secNav('p3','p5')+readBtn('p4');
box.innerHTML=h; renderMath(box);
(function(){ if(window.Math6Anim) Math6Anim.reflectFold(document.getElementById('p4-symfig'),{mode:'central'}); })();
(function(){
var i2=0,score2=0,cur2=null;
function gen2(){ var ax=_pick([-5,-4,-3,-2,-1,1,2,3,4,5]),ay=_pick([-5,-4,-3,-2,-1,1,2,3,4,5]); cur2={ax:ax,ay:ay,rx:-ax,ry:-ay}; }
@@ -469,9 +474,14 @@ function buildP5(){
+'<div id="p5-q2" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap"><button class="btn primary" data-ax2="Oy">Ось $Oy$</button><button class="btn primary" data-ax2="Ox">Ось $Ox$</button></div>'
+'<div class="feedback" id="p5-fb2"></div></div>';
h+='<div class="wg" id="p5-symfig-wg"><div class="wg-header"><span class="wg-badge">Анимация</span><div class="wg-title">Осевая симметрия вживую</div></div>'
+'<div class="wg-help">Жёлтый треугольник «складывается» через ось $Oy$ (красный пунктир) и ложится на свой образ.</div>'
+'<div id="p5-symfig"></div></div>';
h+=secNav('p4','final')+readBtn('p5');
box.innerHTML=h; renderMath(box);
(function(){ if(window.Math6Anim) Math6Anim.reflectFold(document.getElementById('p5-symfig'),{mode:'axial'}); })();
(function(){
var i2=0,score2=0,cur2=null;
function gen2(){ var ax=_pick([-4,-3,-2,-1,1,2,3,4]),ay=_pick([-4,-3,-2,-1,1,2,3,4]),axis=_pick(['Oy','Ox']); cur2={ax:ax,ay:ay,axis:axis,rx:axis==='Oy'?-ax:ax,ry:axis==='Oy'?ay:-ay}; }