// Физика 7 · Лабораторный практикум · 6 виртуальных ЛР. // Палитра cyan (#0891b2). Каждая ЛР: Цель + Оборудование + Ход + Симуляция + // Таблица измерений + Контрольные вопросы + Кнопка «Сдать ЛР». // Ачивка «Лаборант 7 класса» (+80 XP) — за прохождение всех 6. (function(){ 'use strict'; const ACCENT = '#0891b2'; const ACCENT_D = '#0e7490'; const ACCENT_SOFT = '#cffafe'; function renderMath(root){ if(window.renderMathInElement){ try{ window.renderMathInElement(root, { delimiters: [{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false}], throwOnError: false }); }catch(e){} } } function makeCard(kind, title, body){ const colorByKind = { goal:ACCENT, equip:'#d97706', steps:'#7c3aed', concl:'#10b981' }; const labelByKind = { goal:'Цель', equip:'Оборудование', steps:'Ход работы', concl:'Вывод' }; const c = colorByKind[kind] || ACCENT; return '
' + '
' + '' + labelByKind[kind] + '' + '' + title + '' + '
' + '
' + body + '
' + '
'; } function wgWrap(id, badge, title, hint, body){ return '
' + '
' + '' + badge + '' + '' + title + '' + '
' + (hint ? '
' + hint + '
' : '') + body + '
'; } function submitBtn(lrId){ return '
'; } function wireSubmit(lrId){ const btn = document.querySelector('.ph7-lr-submit[data-lr="' + lrId + '"]'); if(!btn) return; const KEY = 'physics7_lab_done_' + lrId; if(localStorage.getItem(KEY) === '1'){ btn.innerHTML = ' ЛР сдана'; btn.disabled = true; btn.style.background = '#94a3b8'; btn.style.cursor = 'default'; return; } btn.addEventListener('click', () => { if(localStorage.getItem(KEY) === '1') return; localStorage.setItem(KEY, '1'); if(typeof window.bumpProgress === 'function') window.bumpProgress(lrId, 100); if(typeof window.addXp === 'function') window.addXp(30, 'lr-' + lrId); btn.innerHTML = ' ЛР сдана'; btn.disabled = true; btn.style.background = '#94a3b8'; btn.style.cursor = 'default'; const fb = document.getElementById('ph7-lr-fb-' + lrId); if(fb){ fb.style.color = '#047857'; fb.textContent = '+30 XP получено.'; } // Проверка ачивки «Лаборант» const allDone = ['lr1','lr2','lr3','lr4','lr5','lr6'].every(k => localStorage.getItem('physics7_lab_done_' + k) === '1'); if(allDone && localStorage.getItem('physics7_lab_master') !== '1'){ localStorage.setItem('physics7_lab_master', '1'); if(typeof window.addXp === 'function') window.addXp(80, 'lab-master'); if(typeof window.achievement === 'function') window.achievement('all_labs', 'Лаборант 7 класса'); if(fb) fb.innerHTML = '+30 XP. ✓ Ачивка «Лаборант 7 класса» +80 XP!'; } }); } function quizQuestion(host, idx, q, opts, correctIdx, explain){ const optsHtml = opts.map((o,i) => '').join(''); return '
' + '
' + (idx+1) + '. ' + q + '
' + '
' + optsHtml + '
' + '' + '
'; } function wireQuiz(host){ const root = document.getElementById(host); if(!root) return; const all = root.querySelectorAll('.qz-q'); const done = new Set(); all.forEach(qDiv => { const opts = qDiv.querySelectorAll('.qz-opt'); const correct = +qDiv.querySelector('.qz-opts').dataset.correct; const explain = qDiv.querySelector('.qz-opts').dataset.explain; const fb = qDiv.querySelector('.qz-fb'); opts.forEach(o => o.addEventListener('click', () => { if(done.has(qDiv)) return; const i = +o.dataset.i; opts.forEach(x => x.disabled = true); if(i === correct){ o.style.background = '#d1fae5'; o.style.borderColor = '#10b981'; o.style.color = '#065f46'; fb.style.display = 'block'; fb.style.background = '#d1fae5'; fb.style.color = '#065f46'; fb.style.borderLeft = '4px solid #10b981'; fb.innerHTML = '✓ Верно!' + (explain ? ' ' + explain : ''); } else { o.style.background = '#fee2e2'; o.style.borderColor = '#dc2626'; o.style.color = '#7f1d1d'; opts[correct].style.background = '#d1fae5'; opts[correct].style.borderColor = '#10b981'; opts[correct].style.color = '#065f46'; fb.style.display = 'block'; fb.style.background = '#fee2e2'; fb.style.color = '#7f1d1d'; fb.style.borderLeft = '4px solid #dc2626'; fb.innerHTML = '✗ Правильно: «' + opts[correct].textContent + '».' + (explain ? ' ' + explain : ''); } done.add(qDiv); })); }); } /* ========================================================== */ /* ЛР-1 — Цена деления шкалы измерительного прибора */ /* ========================================================== */ function build_lr1(){ const body = document.getElementById('lr1-body'); if(!body) return; let h = ''; h += makeCard('goal', 'Цель', 'Научиться определять цену деления любого измерительного прибора по двум подписанным значениям и числу делений между ними.'); h += makeCard('equip', 'Оборудование (виртуальное)', ''); h += makeCard('steps', 'Ход работы', '
    ' + '
  1. Найди на шкале две соседние подписанные отметки $X_1$ и $X_2$.
  2. ' + '
  3. Посчитай число малых делений $N$ между ними.
  4. ' + '
  5. Вычисли цену деления: $C = (X_2 - X_1)/N$.
  6. ' + '
  7. Запиши результаты в таблицу.
  8. ' + '
'); /* Виджет: 4 прибора */ h += wgWrap('lr1-w', 'СИМ', 'Виртуальные приборы', 'Каждый прибор имеет свою цену деления. Подвинь slider — отсчёт пересчитывается.', '
' + ['Линейка','Термометр','Мензурка','Динамометр'].map((nm, i) => '
' + '
' + nm + '
' + '' + '
$C = $
' + '
').join('') + '
'); /* Таблица измерений */ h += wgWrap('lr1-tbl', 'ТБЛ', 'Таблица измерений', '', '' + '' + [['Линейка','0','1 см','10','0,1 см = 1 мм'],['Термометр','0','10 °C','5','2 °C'],['Мензурка','0','100 мл','5','20 мл'],['Динамометр','0','5 Н','10','0,5 Н']].map(r => '').join('') + '
Прибор$X_1$$X_2$$N$$C$
' + r[0] + '' + r[1] + '' + r[2] + '' + r[3] + '' + r[4] + '
'); /* Контрольные вопросы */ h += wgWrap('lr1-q', 'ВОПР', 'Контрольные вопросы', '', '
' + quizQuestion('lr1-q', 0, 'Что такое цена деления?', ['Расстояние между прибором и телом','Значение наименьшего деления шкалы','Размер шкалы','Цена прибора'], 1) + quizQuestion('lr1-q', 1, 'Между $0$ и $1$ см на линейке $10$ делений. $C = ?$', ['1 мм','5 мм','10 мм','0,1 мм'], 0, '$C = (10-0)/10 = 1$ мм.') + quizQuestion('lr1-q', 2, 'Чем меньше цена деления, тем прибор…', ['Дешевле','Меньше','Точнее','Тяжелее'], 2) + '
'); h += makeCard('concl', 'Вывод', 'Мы научились определять цену деления любого измерительного прибора. Формула $C = (X_2 - X_1)/N$ ' + 'универсальна — работает для линейки, термометра, мензурки, динамометра и других приборов со шкалой. ' + 'Чем меньше $C$, тем точнее прибор.'); h += submitBtn('lr1'); body.innerHTML = h; // Render 4 instruments const insts = [ { ticks:11, lbl:i => i%10===0?(i/10):'', unit:'см', color:'#0284c7' }, { ticks:6, lbl:i => i*10, unit:'°C', color:'#dc2626' }, { ticks:6, lbl:i => i*100, unit:'мл', color:'#0891b2' }, { ticks:11, lbl:i => i%2===0?(i*0.5):'', unit:'Н', color:'#d97706' } ]; insts.forEach((inst, idx) => { const W = 200, H = 90; let s = ''; for(let i = 0; i < inst.ticks; i++){ const x = 10 + (i * (W - 20) / (inst.ticks - 1)); const tickH = 14; s += ''; const lbl = inst.lbl(i); if(lbl !== '') s += '' + lbl + ''; } s += '' + inst.unit + ''; document.getElementById('lr1-svg-' + idx).innerHTML = s; const cVals = ['1 мм','2 °C','20 мл','0,5 Н']; document.getElementById('lr1-C-' + idx).textContent = cVals[idx]; }); wireQuiz('lr1-q-host'); wireSubmit('lr1'); renderMath(body); } /* ========================================================== */ /* ЛР-2 — Измерение длины */ /* ========================================================== */ function build_lr2(){ const body = document.getElementById('lr2-body'); if(!body) return; let h = ''; h += makeCard('goal', 'Цель', 'Научиться измерять длину предметов линейкой и записывать результат с учётом погрешности измерения.'); h += makeCard('equip', 'Оборудование', ''); h += makeCard('steps', 'Ход работы', '
    ' + '
  1. Положи предмет вдоль линейки. Совмести один край с отметкой $0$.
  2. ' + '
  3. Прочитай отсчёт у другого края, округлив до ближайшего деления.
  4. ' + '
  5. Цена деления $C = 1$ мм, поэтому погрешность $\\Delta l = C/2 = 0{,}5$ мм.
  6. ' + '
  7. Запиши: $l = (l_0 \\pm \\Delta l)$ мм.
  8. ' + '
'); /* Виджет: 3 предмета по линейке */ h += wgWrap('lr2-w', 'СИМ', 'Измерь 3 предмета', 'Выбери предмет — увидь его длину на линейке.', '
' + [['penc','Карандаш',125],['tetr','Тетрадь',204],['brusk','Брусок',83]].map((o, i) => '').join('') + '
' + '' + '
'); /* Таблица */ h += wgWrap('lr2-tbl', 'ТБЛ', 'Таблица измерений', '', '' + '' + [['Карандаш',125,0.5,'(125,0 ± 0,5) мм'],['Тетрадь',204,0.5,'(204,0 ± 0,5) мм'],['Брусок',83,0.5,'(83,0 ± 0,5) мм']].map(r => '').join('') + '
Предмет$l_0$, мм$\\Delta l$, ммЗапись
' + r[0] + '' + r[1] + '' + r[2] + '' + r[3] + '
'); h += wgWrap('lr2-q', 'ВОПР', 'Контрольные вопросы', '', '
' + quizQuestion('lr2-q', 0, 'Чему равна погрешность миллиметровой линейки?', ['1 мм','0,5 мм','0,1 мм','2 мм'], 1, 'Половина цены деления: $1/2 = 0{,}5$ мм.') + quizQuestion('lr2-q', 1, 'Зачем записывать $\\Delta l$ в результате?', ['Для красоты','Чтобы показать границы возможной ошибки','По привычке','Не нужно'], 1) + quizQuestion('lr2-q', 2, 'Запись $l = (15{,}0 \\pm 0{,}5)$ мм означает, что $l$ может быть…', ['Любым','От 14,5 до 15,5 мм','От 10 до 20 мм','Точно 15 мм'], 1) + '
'); h += makeCard('concl', 'Вывод', 'Мы научились измерять длину предметов с погрешностью $\\Delta l = C/2 = 0{,}5$ мм. ' + 'Любое измерение записывается в виде $l = (l_0 \\pm \\Delta l)$ — это указывает на границы, в которых лежит истинная длина.'); h += submitBtn('lr2'); body.innerHTML = h; // Render ruler with object function draw2(lenMm, nm){ const W = 360, H = 110; const xPad = 20; const rulerW = W - 2 * xPad; const totalMm = 300; const pxPerMm = rulerW / totalMm; let s = ''; // Object const objW = lenMm * pxPerMm; s += ''; s += '' + nm + ''; // Ruler s += ''; for(let mm = 0; mm <= totalMm; mm += 10){ const x = xPad + mm * pxPerMm; const isCm = mm % 10 === 0, isBig = mm % 50 === 0; const tickH = isBig ? 14 : 10; s += ''; if(isBig) s += '' + (mm/10) + ''; } // Mark of length const markX = xPad + lenMm * pxPerMm; s += ''; s += 'см'; document.getElementById('lr2-svg').innerHTML = s; document.getElementById('lr2-info').innerHTML = '' + nm + ': отсчёт $l_0 = ' + lenMm + '$ мм $= ' + (lenMm/10).toFixed(1) + '$ см. С погрешностью: $l = (' + lenMm + ' \\pm 0{,}5)$ мм.'; renderMath(document.getElementById('lr2-info')); } body.querySelectorAll('.lr2-obj').forEach(btn => btn.addEventListener('click', () => { body.querySelectorAll('.lr2-obj').forEach(b => { b.style.background = '#fff'; b.style.color = ACCENT; }); btn.style.background = ACCENT; btn.style.color = '#fff'; draw2(+btn.dataset.l, btn.dataset.nm); })); draw2(125, 'Карандаш'); wireQuiz('lr2-q-host'); wireSubmit('lr2'); renderMath(body); } /* ========================================================== */ /* ЛР-3 — Измерение объёма (вытеснение жидкости) */ /* ========================================================== */ function build_lr3(){ const body = document.getElementById('lr3-body'); if(!body) return; let h = ''; h += makeCard('goal', 'Цель', 'Научиться измерять объём тела неправильной формы методом вытеснения жидкости.'); h += makeCard('equip', 'Оборудование', '
  • Мензурка с водой
  • Тело неправильной формы (камень, гайка, болт)
  • Нитка
'); h += makeCard('steps', 'Ход работы', '
    ' + '
  1. Налей в мензурку воды до отметки $V_1$. Запиши.
  2. ' + '
  3. Опусти тело в мензурку (полностью под водой!).
  4. ' + '
  5. Прочитай новый уровень $V_2$.
  6. ' + '
  7. Объём тела: $V = V_2 - V_1$.
  8. ' + '
'); /* Виджет: мензурка с телом */ h += wgWrap('lr3-w', 'СИМ', 'Измерь объём тела', 'Выбери тело и опусти его в мензурку.', '
' + [['stone','Камень',45],['nut','Гайка',12],['bolt','Болт',23]].map((o, i) => '').join('') + '
' + '' + '
'); /* Таблица */ h += wgWrap('lr3-tbl', 'ТБЛ', 'Таблица измерений', '', '' + '' + [['Камень',100,145,45],['Гайка',100,112,12],['Болт',100,123,23]].map(r => '').join('') + '
Тело$V_1$, мл$V_2$, мл$V$, мл = см³
' + r[0] + '' + r[1] + '' + r[2] + '' + r[3] + '
'); h += wgWrap('lr3-q', 'ВОПР', 'Контрольные вопросы', '', '
' + quizQuestion('lr3-q', 0, 'Можно ли измерить объём картофелины линейкой?', ['Да','Нет — неправильная форма, нужна мензурка','Только если разрезать','Только большие'], 1) + quizQuestion('lr3-q', 1, '$V_1 = 50$ мл, $V_2 = 78$ мл. $V_{тела}$?', ['28 мл','78 мл','128 мл','50 мл'], 0, '$V = V_2 - V_1 = 78 - 50 = 28$ мл.') + quizQuestion('lr3-q', 2, '$1$ мл — это сколько см³?', ['0,1','1','10','100'], 1) + '
'); h += makeCard('concl', 'Вывод', 'Метод вытеснения жидкости позволяет измерить объём тела любой формы. Это пример косвенного измерения: ' + 'мы напрямую измеряем уровни $V_1$ и $V_2$, а затем по формуле $V = V_2 - V_1$ вычисляем искомый объём.'); h += submitBtn('lr3'); body.innerHTML = h; function draw3(vTel, nm){ const W = 320, H = 240; const W1 = 100, W2 = 200; // позиции 2 мензурок const mWidth = 60, mHeight = 180, mY = 30; const maxMl = 200; function drawMenz(x, label, V){ let s = ''; // Стенки s += ''; s += ''; s += ''; // Вода const waterH = (V / maxMl) * mHeight; s += ''; // Шкала for(let ml = 0; ml <= maxMl; ml += 20){ const y = mY + mHeight - (ml / maxMl) * mHeight; s += ''; if(ml % 40 === 0) s += '' + ml + ''; } // Подпись V s += '' + label + ''; s += '' + V + ' мл'; return s; } let s = ''; s += drawMenz(W1, 'V₁', 100); s += drawMenz(W2, 'V₂', 100 + vTel); // Тело во второй мензурке s += ''; // Стрелка s += ''; s += ''; s += 'опускаем'; s += 'тело'; document.getElementById('lr3-svg').innerHTML = s; document.getElementById('lr3-info').innerHTML = '' + nm + ': $V_1 = 100$ мл, $V_2 = ' + (100 + vTel) + '$ мл  →  ' + '$V = V_2 - V_1 = ' + vTel + '$ мл $= ' + vTel + '$ см³'; renderMath(document.getElementById('lr3-info')); } body.querySelectorAll('.lr3-obj').forEach(btn => btn.addEventListener('click', () => { body.querySelectorAll('.lr3-obj').forEach(b => { b.style.background = '#fff'; b.style.color = ACCENT; }); btn.style.background = ACCENT; btn.style.color = '#fff'; draw3(+btn.dataset.v, btn.dataset.nm); })); draw3(45, 'Камень'); wireQuiz('lr3-q-host'); wireSubmit('lr3'); renderMath(body); } /* ========================================================== */ /* ЛР-4 — Изучение неравномерного движения */ /* ========================================================== */ function build_lr4(){ const body = document.getElementById('lr4-body'); if(!body) return; let h = ''; h += makeCard('goal', 'Цель', 'Измерить среднюю скорость движения шарика, скатывающегося по наклонной плоскости, для разных углов наклона.'); h += makeCard('equip', 'Оборудование', '
  • Желоб (наклонная плоскость)
  • Шарик
  • Секундомер
  • Линейка / мерная лента
'); h += makeCard('steps', 'Ход работы', '
    ' + '
  1. Установи желоб под углом 15°. Отпусти шарик с верха.
  2. ' + '
  3. Засеки время $t$ от старта до конца желоба.
  4. ' + '
  5. Измерь путь $s$ (длину желоба).
  6. ' + '
  7. Вычисли $\\langle v\\rangle = s/t$.
  8. ' + '
  9. Повтори для углов 30° и 45°.
  10. ' + '
'); /* Виджет: симуляция шарика */ h += wgWrap('lr4-w', 'СИМ', 'Шарик на наклонной плоскости', 'Меняй угол, нажимай «Запустить» — шарик скатится, время и средняя скорость измерятся автоматически.', '
' + '' + '
' + '
' + '' + '
'); h += wgWrap('lr4-tbl', 'ТБЛ', 'Таблица измерений', '', '' + '' + [['15°','1,0','1,7','0,59'],['30°','1,0','1,1','0,91'],['45°','1,0','0,8','1,25']].map(r => '').join('') + '
Угол $\\alpha$$s$, м$t$, с$\\langle v\\rangle$, м/с
' + r[0] + '' + r[1] + '' + r[2] + '' + r[3] + '
'); h += wgWrap('lr4-q', 'ВОПР', 'Контрольные вопросы', '', '
' + quizQuestion('lr4-q', 0, 'Каков физический смысл $\\langle v\\rangle$?', ['Скорость в средней точке','Скорость, при которой за то же время прошёл бы тот же путь','Полусумма начальной и конечной','Скорость покоя'], 1) + quizQuestion('lr4-q', 1, 'Что изменится, если увеличить угол?', ['Время больше, скорость меньше','Время меньше, $\\langle v\\rangle$ больше','Ничего не изменится','Скорость станет нулевой'], 1, 'Чем круче — тем быстрее скатывается.') + quizQuestion('lr4-q', 2, 'Шарик прошёл $s = 2$ м за $t = 4$ с. $\\langle v\\rangle$?', ['0,2 м/с','0,5 м/с','1 м/с','2 м/с'], 1, '$\\langle v\\rangle = 2/4 = 0{,}5$ м/с.') + '
'); h += makeCard('concl', 'Вывод', 'Чем больше угол наклона, тем сильнее ускорение шарика и тем выше его средняя скорость. ' + 'Движение шарика — неравномерное: его мгновенная скорость растёт от нуля в начале до максимума в конце. ' + 'Формула $\\langle v\\rangle = s/t$ даёт усреднённую характеристику, удобную для сравнения.'); h += submitBtn('lr4'); body.innerHTML = h; let lr4Anim = { raf: 0, t: 0, running: false, totalT: 0, ang: 15 }; function drawTrack(){ const ang = +document.getElementById('lr4-a-r').value; document.getElementById('lr4-a').textContent = ang; lr4Anim.ang = ang; const W = 360, H = 200, baseY = 170; const len = 220; const a = ang * Math.PI / 180; const x1 = 40, y1 = baseY; const x2 = x1 + len * Math.cos(a); const y2 = baseY - len * Math.sin(a); let s = ''; s += ''; s += ''; // Шарик в начальной позиции (на верху) const t = lr4Anim.t; const totalT = Math.max(0.5, 2.0 - ang * 0.025); // эмпирическая формула: больше угол — меньше время lr4Anim.totalT = totalT; let progress = t / totalT; if(progress > 1) progress = 1; // Шарик ускоряется (квадратичная зависимость пути от времени) const sFrac = progress * progress; const bx = x2 + (x1 - x2) * sFrac; const by = y2 + (y1 - y2) * sFrac; s += ''; // Подпись s += 'α = ' + ang + '°'; s += 's = 1,0 м'; s += 't = ' + t.toFixed(2) + ' с'; document.getElementById('lr4-svg').innerHTML = s; const vavg = progress >= 1 ? (1.0 / totalT) : 0; document.getElementById('lr4-info').innerHTML = progress >= 1 ? 'Шарик скатился! $t = ' + totalT.toFixed(2) + '$ с · $s = 1{,}0$ м · $\\langle v\\rangle = s/t = ' + vavg.toFixed(2) + '$ м/с' : 'В движении... $t = ' + t.toFixed(2) + '$ с'; renderMath(document.getElementById('lr4-info')); } function lr4Loop(){ if(!lr4Anim.running) return; lr4Anim.t += 0.02; if(lr4Anim.t >= lr4Anim.totalT){ lr4Anim.t = lr4Anim.totalT; lr4Anim.running = false; drawTrack(); return; } drawTrack(); lr4Anim.raf = requestAnimationFrame(lr4Loop); } document.getElementById('lr4-a-r').addEventListener('input', () => { lr4Anim.t = 0; lr4Anim.running = false; drawTrack(); }); document.getElementById('lr4-go').addEventListener('click', () => { lr4Anim.t = 0; lr4Anim.running = true; if(lr4Anim.raf) cancelAnimationFrame(lr4Anim.raf); lr4Loop(); }); drawTrack(); wireQuiz('lr4-q-host'); wireSubmit('lr4'); renderMath(body); } /* ========================================================== */ /* ЛР-5 — Измерение плотности вещества */ /* ========================================================== */ function build_lr5(){ const body = document.getElementById('lr5-body'); if(!body) return; let h = ''; h += makeCard('goal', 'Цель', 'Измерить плотности трёх веществ и определить, что это за материалы, по таблице плотностей.'); h += makeCard('equip', 'Оборудование', '
  • Весы (электронные или рычажные)
  • Мензурка
  • 3 образца разных материалов
  • Нитка для опускания
'); h += makeCard('steps', 'Ход работы', '
    ' + '
  1. Измерь массу $m$ образца на весах.
  2. ' + '
  3. Измерь его объём $V$ методом вытеснения (как в ЛР-3).
  4. ' + '
  5. Вычисли $\\rho = m/V$.
  6. ' + '
  7. Найди в таблице вещество с такой плотностью.
  8. ' + '
'); /* Виджет */ h += wgWrap('lr5-w', 'СИМ', '3 образца — определи вещество', 'Выбери образец — увидь массу и объём, вычисли плотность.', '
' + [['s1','Образец 1',54,20],['s2','Образец 2',156,20],['s3','Образец 3',272,20]].map((o, i) => '').join('') + '
' + '
' + '
' + '
Весы
' + '
54 г
' + '
' + '
' + '
Мензурка
' + '
20 см³
' + '
' + '
' + '
'); /* Таблица */ h += wgWrap('lr5-tbl', 'ТБЛ', 'Таблица плотностей (для сравнения)', '', '' + '' + [['Сосна',0.5],['Лёд',0.9],['Вода',1.0],['Алюминий',2.7],['Железо',7.8],['Медь',8.9],['Свинец',11.3],['Ртуть',13.6],['Золото',19.3]].map(r => '').join('') + '
Вещество$\\rho$, г/см³
' + r[0] + '' + r[1] + '
'); h += wgWrap('lr5-q', 'ВОПР', 'Контрольные вопросы', '', '
' + quizQuestion('lr5-q', 0, 'Образец 1 имеет $m = 54$ г, $V = 20$ см³. $\\rho$?', ['1,7 г/см³','2,7 г/см³','3,7 г/см³','5,4 г/см³'], 1, '$54/20 = 2{,}7$ г/см³ — алюминий.') + quizQuestion('lr5-q', 1, 'Образец 2: $m = 156$ г, $V = 20$ см³. Что это?', ['Лёд','Алюминий','Железо','Свинец'], 2, '$156/20 = 7{,}8$ г/см³ — железо.') + quizQuestion('lr5-q', 2, 'Какое измерение здесь косвенное?', ['Массы','Объёма','Плотности','Времени'], 2, 'Плотность вычисляется через прямые $m$ и $V$.') + '
'); h += makeCard('concl', 'Вывод', 'Зная массу и объём тела, можно вычислить плотность вещества и определить, что это за материал. ' + 'Измерение плотности — пример косвенного измерения через два прямых ($m$ и $V$). ' + 'Таблицы плотностей позволяют идентифицировать неизвестные вещества.'); h += submitBtn('lr5'); body.innerHTML = h; function matName(rho){ if(rho < 0.6) return 'дерево (сосна)'; if(rho < 0.95) return 'лёд'; if(rho < 1.1) return 'вода'; if(rho < 3) return 'алюминий'; if(rho < 9) return 'железо / медь'; if(rho < 14) return 'свинец / ртуть'; return 'золото / платина'; } function upd5(m, V, nm){ document.getElementById('lr5-m').textContent = m + ' г'; document.getElementById('lr5-V').textContent = V + ' см³'; const rho = m / V; document.getElementById('lr5-info').innerHTML = '' + nm + ': $\\rho = m/V = ' + m + '/' + V + ' = $ ' + rho.toFixed(2) + ' г/см³.
' + 'Похоже на: ' + matName(rho) + ''; renderMath(document.getElementById('lr5-info')); } body.querySelectorAll('.lr5-obj').forEach(btn => btn.addEventListener('click', () => { body.querySelectorAll('.lr5-obj').forEach(b => { b.style.background = '#fff'; b.style.color = ACCENT; }); btn.style.background = ACCENT; btn.style.color = '#fff'; upd5(+btn.dataset.m, +btn.dataset.v, btn.dataset.nm); })); upd5(54, 20, 'Образец 1'); wireQuiz('lr5-q-host'); wireSubmit('lr5'); renderMath(body); } /* ========================================================== */ /* ЛР-6 — Изучение силы трения */ /* ========================================================== */ function build_lr6(){ const body = document.getElementById('lr6-body'); if(!body) return; let h = ''; h += makeCard('goal', 'Цель', 'Измерить силу трения скольжения для разных поверхностей и убедиться, что $F_{тр} \\sim N$ (зависит от нормальной реакции).'); h += makeCard('equip', 'Оборудование', '
  • Деревянный брусок
  • Грузы по 100 г
  • Динамометр
  • Разные поверхности (дерево, пластик, резина)
'); h += makeCard('steps', 'Ход работы', '
    ' + '
  1. Положи брусок на поверхность. Прицепи к нему динамометр.
  2. ' + '
  3. Тяни равномерно и измерь $F_{тр}$ — это сила, которую показал динамометр (=сила тяги при равномерном движении).
  4. ' + '
  5. Добавляй грузы по 100 г и снова измеряй $F_{тр}$.
  6. ' + '
  7. Поменяй поверхность — повтори.
  8. ' + '
'); /* Виджет */ h += wgWrap('lr6-w', 'СИМ', 'Брусок с динамометром', 'Меняй массу и поверхность — увидь силу трения.', '
' + '' + '' + '
' + '' + '
'); h += wgWrap('lr6-tbl', 'ТБЛ', 'Таблица измерений (μ=0,3, дерево по дереву)', '', '' + '' + [['0 (брусок)',0.1,1.0,0.3],['+1 груз',0.2,2.0,0.6],['+2 груза',0.3,3.0,0.9],['+3 груза',0.4,4.0,1.2],['+4 груза',0.5,5.0,1.5]].map(r => '').join('') + '
Грузы$m$, кг$N = mg$, Н$F_{тр}$, Н
' + r[0] + '' + r[1] + '' + r[2] + '' + r[3] + '
' + '

Видно, что $F_{тр}$ растёт пропорционально массе — то есть пропорционально $N$. Это и есть закон $F_{тр} \\sim N$.

'); h += wgWrap('lr6-q', 'ВОПР', 'Контрольные вопросы', '', '
' + quizQuestion('lr6-q', 0, 'Если массу удвоить, $F_{тр}$ скольжения…', ['Не изменится','Удвоится','Уменьшится в 2 раза','Останется','Станет 0'], 1) + quizQuestion('lr6-q', 1, 'Какая поверхность дает наименьшее трение?', ['Дерево','Резина','Лёд','Пластик'], 2, 'У льда $\\mu \\approx 0{,}04$ — поэтому скользко.') + quizQuestion('lr6-q', 2, 'Брусок $m = 0{,}5$ кг, $\\mu = 0{,}3$, $g = 10$. $F_{тр}$?', ['0,5 Н','1 Н','1,5 Н','3 Н'], 2, '$F_{тр} = \\mu mg = 0{,}3 \\cdot 0{,}5 \\cdot 10 = 1{,}5$ Н.') + '
'); h += makeCard('concl', 'Вывод', 'Эксперимент подтвердил, что сила трения скольжения прямо пропорциональна нормальной реакции (а значит — массе тела). ' + 'Коэффициент трения $\\mu$ зависит от пары поверхностей: для дерево-лёд он очень мал ($\\sim 0{,}04$), ' + 'для дерево-резина — большой ($\\sim 0{,}5$). Поэтому шипованная резина не скользит по асфальту и снегу.'); h += submitBtn('lr6'); body.innerHTML = h; function draw6(){ const m = +document.getElementById('lr6-m-r').value; const mu = +document.getElementById('lr6-surf').value; document.getElementById('lr6-m').textContent = m; const N = m / 1000 * 10; // m в г → кг → N const Ftr = mu * N; const W = 380, H = 180, baseY = 130; let s = ''; s += ''; for(let i = 0; i < 18; i++) s += ''; const bx = 80, bw = 60, bh = 40; // Грузы наверху const numGr = Math.max(0, (m - 100) / 100); for(let i = 0; i < numGr; i++){ s += ''; } // Брусок s += ''; s += '' + m + ' г'; // Динамометр + нить const dynX = bx + bw + 20; s += ''; s += ''; s += '' + Ftr.toFixed(2) + ' Н'; s += 'динамометр'; // Стрелка тяги s += ''; s += ''; // Стрелка трения s += ''; s += ''; s += 'F_тр'; document.getElementById('lr6-svg').innerHTML = s; document.getElementById('lr6-info').innerHTML = '$m = ' + (m/1000).toFixed(2) + '$ кг, $N = mg = ' + N.toFixed(1) + '$ Н, $\\mu = ' + mu + '$  →  $F_{тр} = \\mu N = ' + Ftr.toFixed(2) + '$ Н'; renderMath(document.getElementById('lr6-info')); } document.getElementById('lr6-m-r').addEventListener('input', draw6); document.getElementById('lr6-surf').addEventListener('change', draw6); draw6(); wireQuiz('lr6-q-host'); wireSubmit('lr6'); renderMath(body); } window.PHYS7_LAB_WIDGETS = { lr1: build_lr1, lr2: build_lr2, lr3: build_lr3, lr4: build_lr4, lr5: build_lr5, lr6: build_lr6 }; })();