feat(stereo3d): drag-to-rotate для 3D-сцен Геометрии 10
STEREO3D.attachDragRotate(target, scene, onChange?) — мутирует scene.rotX/rotY на mouse/touch drag, по умолчанию пересобирает innerHTML контейнера через scene.render(). Применено к аннотированному кубу §1 (viz1-cube) в geometry_10_r1.html. Остальные сцены не затронуты.
This commit is contained in:
@@ -245,7 +245,7 @@ const PARAS = [
|
||||
{ id:'p1', num:'§ 1', name:'Пространственные фигуры', sub:'Призма · пирамида · цилиндр · конус · шар' },
|
||||
{ id:'p2', num:'§ 2', name:'Прямые и плоскости', sub:'3 аксиомы стереометрии + следствия' },
|
||||
{ id:'p3', num:'§ 3', name:'Построения сечений', sub:'Метод следов · max 6-угольник у куба' },
|
||||
{ id:'final', num:'★', name:'Финал раздела', sub:'4 интегрированных босса', final:true }
|
||||
{ id:'final', num:'★', name:'Финал раздела', sub:'4 интегрированных босса', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
@@ -579,7 +579,7 @@ function buildP1(){
|
||||
html += makeCard('rule', 'Формула Эйлера', '§ 1.3',
|
||||
'<p>Для любого <b>выпуклого многогранника</b>:</p>'
|
||||
+ '<p style="text-align:center;margin:8px 0">$$В - Р + Г = 2$$</p>'
|
||||
+ '<p>Куб: $8 - 12 + 6 = 2$ ✓. Тетраэдр: $4 - 6 + 4 = 2$ ✓.</p>'
|
||||
+ '<p>Куб: $8 - 12 + 6 = 2$ ✓. Тетраэдр: $4 - 6 + 4 = 2$ ✓.</p>'
|
||||
+ '<details class="spoiler"><summary>Свойства основных тел</summary><div class="spoiler-body">'
|
||||
+ '<ul>'
|
||||
+ '<li>$n$-угольная призма: $В=2n$, $Р=3n$, $Г=n+2$.</li>'
|
||||
@@ -948,7 +948,10 @@ function buildAnnotatedCube(){
|
||||
sc.addCube({center:[0,0,0], size:2.0, labels:true});
|
||||
sc.addEdge([-1,-1,-1],[1,1,1], {stroke:'#dc2626', width:3, dash:'5 3'});
|
||||
sc.addFace([[-1,-1,-1],[1,-1,-1],[1,-1,1],[-1,-1,1]], {fill:'#a78bfa', opacity:0.30, stroke:'none'});
|
||||
const el = document.getElementById('viz1-cube'); if(el) el.innerHTML = sc.render();
|
||||
const el = document.getElementById('viz1-cube');
|
||||
if(!el) return;
|
||||
el.innerHTML = sc.render();
|
||||
if (S.attachDragRotate && !el.__rotBound){ S.attachDragRotate(el, sc); el.__rotBound = true; }
|
||||
}
|
||||
|
||||
function buildPrismDirect(){
|
||||
|
||||
Reference in New Issue
Block a user