Редактирование: Chain v3
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | [[ | + | [[ТМ|Кафедра ТМ]] > [[Программирование]] > [[Программирование и моделирование в Интернет|Интернет]] > [[JavaScript-программирование|JavaScript]] > [[JavaScript - Цепь|Цепь]] > '''Chain v3''' <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]] | ||
Строка 9: | Строка 11: | ||
<syntaxhighlight lang="javascript" line start="1" enclose="div"> | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | ||
function MainChain(canvas, vCanvas) { | function MainChain(canvas, vCanvas) { | ||
− | |||
// Предварительные установки | // Предварительные установки | ||
Строка 15: | Строка 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; // пересчет ширины относительно основного окна | |
// Генерорование начальных условий | // Генерорование начальных условий | ||
Строка 119: | Строка 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; | ||
Строка 218: | Строка 219: | ||
</div> | </div> | ||
− | |||
[[Category: Программирование]] | [[Category: Программирование]] | ||
+ | [[Category: JavaScript]] |