Редактирование: Динамика одномерного кристалла
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | |||
− | |||
[[Виртуальная лаборатория]] > [[Динамика одномерного кристалла]] <HR> | [[Виртуальная лаборатория]] > [[Динамика одномерного кристалла]] <HR> | ||
Здесь расположена последняя версия программы, моделирующей динамику одномерного кристалла. | Здесь расположена последняя версия программы, моделирующей динамику одномерного кристалла. | ||
− | + | <addscript src=Chain_v3_release/> | |
+ | <htmlet nocache="yes">Chain_v3_TM</htmlet> | ||
Скачать программу: [[Медиа:Chain_v3_release.zip|Chain_v3_release.zip]] | Скачать программу: [[Медиа:Chain_v3_release.zip|Chain_v3_release.zip]] | ||
− | + | Текст программы на языке JavaScript (разработчик [[Цветков Денис]]): <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> | |
− | |||
Файл '''"Chain_v3_release.js"''' | Файл '''"Chain_v3_release.js"''' | ||
− | < | + | <source lang="javascript" first-line="1"> |
function MainChain(canvas, vCanvas) { | function MainChain(canvas, vCanvas) { | ||
− | |||
// Предварительные установки | // Предварительные установки | ||
Строка 19: | Строка 16: | ||
var vContext = vCanvas.getContext("2d");// на context происходит рисование | var vContext = vCanvas.getContext("2d");// на context происходит рисование | ||
− | + | const Pi = 3.1415926; // число "пи" | |
− | + | const m0 = 1; // масштаб массы | |
− | + | const T0 = 1; // масштаб времени (период колебаний исходной системы) | |
− | + | const a0 = 1; // масштаб расстояния (диаметр шара) | |
− | + | const k0 = 2 * Pi / T0; // масштаб частоты | |
− | + | const C0 = m0 * k0 * k0; // масштаб жесткости | |
// *** Задание физических параметров *** | // *** Задание физических параметров *** | ||
− | + | const m = 1 * m0; // масса | |
− | + | const C = 1 * C0; // жесткость | |
− | + | const numStart = 24; // начальное количество частиц | |
// *** Задание вычислительных параметров *** | // *** Задание вычислительных параметров *** | ||
− | + | const fps = 50; // frames per second - число кадров в секунду (качечтво отображения) | |
− | + | const spf = 10; // steps per frame - число шагов интегрирования между кадрами (скорость расчета) | |
− | + | const dt = 0.4 * T0 / fps; // шаг интегрирования (качество расчета) | |
// Выполнение программы | // Выполнение программы | ||
− | + | const scale = canvas.height / a0; // масштабный коэффициент для перехода от расчетных к экранным координатам | |
− | + | const wScale = canvas.width; // ширина окна в экранных координатах | |
− | + | const hScale = canvas.height; // высота окна в экранных координатах | |
− | + | const w = wScale / scale; // ширина окна в расчетных координатах | |
− | + | const h = hScale / scale; // высота окна в расчетных координатах | |
− | + | const chainHeightScale = hScale/2; // высота положения цепи в экранных координатах | |
// константы для графика скорости | // константы для графика скорости | ||
− | + | const vWScale = vCanvas.width; // ширина окна в экранных координатах | |
− | + | const vHScale = vCanvas.height; // высота окна в экранных координатах | |
− | + | const vHeightScale = vHScale/2; // высота графика скорости в экранных координатах | |
− | + | const vAxisScale = vHScale * 0.4; // масштаб оси "y" графика скорости | |
− | + | const uvWResize = vWScale/wScale; // пересчет ширины относительно основного окна | |
// Генерорование начальных условий | // Генерорование начальных условий | ||
Строка 123: | Строка 120: | ||
function physics(){ | function physics(){ | ||
for (var s=1; s<=spf; s++) {// то, что происходит каждый шаг времени | for (var s=1; s<=spf; s++) {// то, что происходит каждый шаг времени | ||
− | for (var i=1; i<particles.length-1; i++) { | + | for (var i=1; i<particles.length-1; i++){ |
particles[i].fu = C*(particles[i+1].uu - 2*particles[i].uu + particles[i-1].uu); | particles[i].fu = C*(particles[i+1].uu - 2*particles[i].uu + particles[i-1].uu); | ||
particles[i].vu += particles[i].fu / m * dt; | particles[i].vu += particles[i].fu / m * dt; | ||
Строка 167: | Строка 164: | ||
setInterval(control, 1000/fps); | setInterval(control, 1000/fps); | ||
} | } | ||
− | </ | + | </source> |
− | |||
Файл '''"Chain_v2_release.html"''' | Файл '''"Chain_v2_release.html"''' | ||
− | < | + | <source lang="html" first-line="1"> |
<!DOCTYPE html> | <!DOCTYPE html> | ||
<html> | <html> | ||
Строка 219: | Строка 215: | ||
</body> | </body> | ||
</html> | </html> | ||
− | </ | + | </source> |
− | </ | + | </toggledisplay> |
− | |||
[[JavaScript - Цепь|Здесь]] вы можете найти предыдущие версии программы. | [[JavaScript - Цепь|Здесь]] вы можете найти предыдущие версии программы. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Category: Виртуальная лаборатория]] | [[Category: Виртуальная лаборатория]] | ||
[[Category: Программирование]] | [[Category: Программирование]] | ||
− | [[Category: | + | [[Category: JavaScript]] |