fix(geom7): cache-bust geom7_svg.js (?v=3) + 3-й SVG в §5 (транспортир)

Скорее всего у пользователя был закэширован старый geom7_svg.js, из-за
чего часть API изменилась и SVG-блоки в §5 рендерились пустыми
(angleViz и notationVariant возвращали '' если G не было).

Что сделано:
1. Везде src="/js/geom7_svg.js?v=3" — форсит браузер скачать заново
   - geometry_7_ch1.html
   - geometry_7_ch2.html
2. notationVariant: function declaration внутри if(G) заменён на
   const arrow expression — для надёжности в strict mode + блоке
3. Добавлен 3-й SVG в §5 — карточка 5.2 «Измерение углов»:
   - полукруглый транспортир радиусом 90px с делениями каждые 10°
   - три цветных луча, отложенные на 40°, 90°, 140° от одной стороны
   - цветные подписи градусных мер в правильных местах

Теперь в §5 ТРИ SVG-рисунка:
- 5.1 «Что такое угол» — три обозначения одного угла
- 5.2 «Измерение углов» — транспортир с 3 примерами (НОВОЕ)
- 5.3 «Виды углов» — 4 типа углов с заливкой
- 5.4 «Биссектриса» — деление угла пополам

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-29 08:29:20 +03:00
parent 34dd197390
commit cf5662087c
2 changed files with 25 additions and 5 deletions
+24 -4
View File
@@ -13,7 +13,7 @@
onload="renderMathInElement(document.body,{delimiters:[{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true},{left:'\\(',right:'\\)',display:false}],throwOnError:false})"></script>
<script src="/js/api.js" defer></script>
<script src="/js/xp.js" defer></script>
<script src="/js/geom7_svg.js" defer></script>
<script src="/js/geom7_svg.js?v=3" defer></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800;900&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<style>
:root{
@@ -1021,7 +1021,7 @@ function buildP5(){
/* SVG: обозначение одного угла 3 разными способами */
let svgNotation='';
if(G){
function notationVariant(label, mode){
const notationVariant = function(label, mode){
const b=G.svgBox(180,160,{id:'p5-not-'+mode,cell:20});
const V={x:40,y:130}, A={x:160,y:130};
const B={x:V.x+115*Math.cos(Math.PI/3.5), y:V.y-115*Math.sin(Math.PI/3.5)};
@@ -1049,8 +1049,8 @@ function buildP5(){
}
s += b.close;
return s;
}
svgNotation = '<div style="display:flex;gap:8px;flex-wrap:wrap;justify-content:center">'
};
svgNotation = '<div style="display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:8px">'
+ '<div>'+notationVariant('∠BAC','full')+'</div>'
+ '<div>'+notationVariant('∠A','short')+'</div>'
+ '<div>'+notationVariant('α','greek')+'</div>'
@@ -1065,10 +1065,30 @@ function buildP5(){
<p style="font-size:.9rem;color:var(--muted);text-align:center;margin-top:10px"><b>Один и тот же угол можно обозначить тремя способами:</b></p>
`+svgNotation+``);
/* SVG: транспортир с измерением 3 углов */
let svgProtractor='';
if(G){
const b=G.svgBox(320,180,{id:'p5-prot',cell:20});
const V={x:160,y:160};
svgProtractor = b.open
+ G.protractor(V,90,{color:'#0891b2',fill:'#fef3c7'})
/* Три цветных луча с разными углами */
+ G.segment(V,{x:V.x+105*Math.cos(-Math.PI*40/180), y:V.y-105*Math.sin(Math.PI*40/180)},{color:'#10b981',width:2.6})
+ G.segment(V,{x:V.x+105*Math.cos(-Math.PI*90/180), y:V.y-105*Math.sin(Math.PI*90/180)},{color:'#dc2626',width:2.6})
+ G.segment(V,{x:V.x+105*Math.cos(-Math.PI*140/180), y:V.y-105*Math.sin(Math.PI*140/180)},{color:'#7c3aed',width:2.6})
/* Подписи углов */
+ '<text x="'+(V.x+50)+'" y="'+(V.y-30)+'" font-size="13" fill="#047857" font-weight="800" font-family="JetBrains Mono">40°</text>'
+ '<text x="'+(V.x+8)+'" y="'+(V.y-55)+'" font-size="13" fill="#b91c1c" font-weight="800" font-family="JetBrains Mono">90°</text>'
+ '<text x="'+(V.x-90)+'" y="'+(V.y-15)+'" font-size="13" fill="#6d28d9" font-weight="800" font-family="JetBrains Mono">140°</text>'
+ b.close;
}
html += makeCard('rule', 'Измерение углов. Градус', '5.2', `
<p>Углы измеряют в <b>градусах</b>. Развёрнутый угол (стороны на одной прямой) равен <b>$180°$</b>.</p>
<p>$$ — это $\\dfrac{1}{180}$ часть развёрнутого угла.</p>
<p>Углы измеряют <b>транспортиром</b>. Транспортир позволяет также построить угол данной градусной меры.</p>
<div class="svg-host">`+svgProtractor+`</div>
<p style="text-align:center;font-size:.85rem;color:var(--muted);margin-top:-4px">Три угла (40°, 90°, 140°), отложенные транспортиром от общей стороны.</p>
<p><b>Аксиома измерения углов.</b> Если внутри угла из его вершины провести луч, он разобьёт угол на два, сумма градусных мер которых равна градусной мере исходного.</p>
<p><b>Аксиома откладывания углов.</b> От любого луча в данную полуплоскость можно отложить угол данной градусной меры, и притом только один.</p>`);
+1 -1
View File
@@ -13,7 +13,7 @@
onload="renderMathInElement(document.body,{delimiters:[{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true},{left:'\\(',right:'\\)',display:false}],throwOnError:false})"></script>
<script src="/js/api.js" defer></script>
<script src="/js/xp.js" defer></script>
<script src="/js/geom7_svg.js" defer></script>
<script src="/js/geom7_svg.js?v=3" defer></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800;900&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<style>
:root{