Точечная модель твёрдого тела в компьютерной симуляции

Автор
Сообщение
computer
#53354 2022-11-19 21:43 GMT

Выкладываю программку, или даже точнее заготовку, на Javascript для моделирования упругих тел,
состоящих из «точек», взаимодействующих между собой. Можно сгенерировать случайным образом
расположение и скорости движения нескольких объектов, октаэдров и кубов, или загрузить
текст с произвольным описанием через форму. В пределах одного объекта точки взаимодействуют
по закону: потенциальная энергия между двумя точками равна c • (2 • r0^3 / r + r^2 - 3 • r0^2)
где с = константа упругости, r0 = равновесное расстояние (как в правильном кубе или октаэдре),
r = расстояние между точками. Сила взаимодействия равна 2 • c • (r0^3 / r^2 - r)
Между точками различающихся объектов потенциальная энергия равна с • (1 / r - 1 / r0)
для r <= r0, и нулю для r > r0. Сила взаимодействия равна с / r^2 для r <= r0,
и нулю для r > r0, константа упругости здесь другая. Общая энергия системы (потенциальная
плюс кинетическая) по умолчанию сохраняется, для чего движение точек рассматривается поочерёдно,
не «прыгают» сразу несколько на очень близкие места, что может привести к невероятному росту
потенциальной энергии. Если точка под действием силы собирается перейти через заданный шаг
времени туда, где её потенциальная энергия растёт настолько, что кинетической недостаточно
для компенсации, движение не происходит и скорости меняются на обратные. То же самое при
выходе к границам модельного объёма. В первую очередь внимание уделяется сохранению энергии,
а импульса постольку-поскольку. Алгоритм спорный, возможны модификации, буду рад
дельным предложениям. Возможные дальнейшие пути развития программы:
— введение в систему абсолютно жёстких предметов, где расстояния между точками постоянные
и наложенные на треугольники текстуры не искажались бы;
— стремление объекта в целом двигаться в одном направлении под действием особой силы или инерции,
со сложными пересчётами общего импульса, вращательных моментов и кинетической энергии;
— постепенное замедление движений точек внутри объекта, путём умножения скоростей
на уменьшающую константу, условный переход упругих колебаний в тепловую энергию.
Настройки по умолчанию могут быть не лучшими, экспериментируйте, сам я не собираюсь
пока особенно заниматься этой программой.

Скрипт запускается следующим образом (эти строки можно поместить в файл с расширением .htm или .html):

<HTML>
<HEAD>
<script src=«solid.txt»></script>
</HEAD>
<BODY>
<noscript style=«text-align: center; font-size: 50;»>JAVASCRIPT MUST BE TURNED ON</noscript>
<script type=«text/javascript»>
document.body.style.backgroundColor = «WhiteSmoke»;
f_create();
</script>
</BODY>
</HTML>

В файле solid.txt, который должен быть в той же папке, содержится остальной код.

Пояснения к интерфейсу:
Целочисленные width и height определяют ширину и высоту модельного поля в пикселах.
Поля x,y,z minimum и maximum задают границы реального объёма. По каждому измерению
размах дожен быть больше (или равен) размеров сгенерированного октаэдра или куба.
Следует учитывать, что текстовые поля реально изменяются не после нажатия клавиши enter,
а после клика мышкой в другом месте.
Радио переключатели view along показывают, вдоль какой оси пользователь наблюдает
модельный объём, по умолчанию вдоль z, остальные оси всегда направлены вправо и вниз
(используется правая система координат).
Поле min positive обозначает минимальную положительную величину, допустимую в расчётах,
в частности, для деления, чтобы знаменатель не был равным нулю.
Поле min distance показывает на каком расстоянии (или меньшем)
начинают взаимодействовать «чужие» точки при упругом отталкивании.
Поле velocity mul это множитель для скоростей, задаваемых при создании рандомной модели.
Поле kinetic mul используется при нажатии кнопки mul Ekin, чтобы умножить
кинетическую энергию системы на заданное число, то есть фактически уменьшить
или увеличить скорость движения точек и условную «температуру».
Поле octahedron size задаёт размеры октаэдра, cube size размеры куба.
Поле own rigidity задаёт константу упругости внутри объекта,
out rigidity константу упругости между разными объектами.
Поля force along x,y,z задают дополнительные силы, действующие вдоль каждого измерения.
Величина point size обозначает размеры точки (квадратика) в пикселах.
Целочисленные octahedrons и cubes показывают количество объектов каждого вида.
Поля oct point mass и cub point mass обозначают массы точек по каждому виду объектов.
Поле msecs показывает как часто (в миллисекундах) вызывается шаг симуляции.
Поле time step это шаг времени, величина для использования в расчётах обновления
реальных скоростей и положений точек в системе координат.
Кнопка one step делает один шаг в симуляции.
Кнопка run model запускает регулярно повторяемую симуляцию.
Кнопка pause останавливает исполнение.
Кнопка create создаёт рандомную модель с заданными выше настройками.
Кнопки load и save нужны для загрузки и сохранения модели через текстовое поле
внизу панели управления, в формате «количество точек» + 3 числа для положений x,y,z
+ 3 числа для скоростей x,y,z, числа разделяются одним или многими white-space
символами, к которым относится пробел, табуляция (горизонтальная),
перевод на новую строку и возврат каретки.
Кнопка 0 impulse обнуляет суммарный импульс системы по всем измерениям.
Кнопка mul Ekin, как написано выше, использует множитель для кинетической энергии
системы точек, изменяет «температуру».
Кнопка get Ekin получает суммарную кинетическую энергию в поле справа.
Кнопка set Ekin загружает из этого поля кинетическую энергию, с соответствующим
уножением скоростей точек, если это математически возможно.
Кнопка get Epot получает суммарную потенциальную энергию в поле справа.
Кнопка get energy получает суммарную энергию в поле справа, также обновляет
кинетическую и потенциальную.


отредактировал(а) computer: 2023-01-22 16:39 GMT
computer
#54659 2023-01-22 16:39 GMT

////// global data
var d_field;
var p_objects = null;
var d_xspace = 5,d_xsize = 200,d_yspace = 5,d_ysize = 20;
var d_panel;
var d_width = 600,d_height = 600;
var d_xmin = -1,d_xmax = 1,d_ymin = -1,d_ymax = 1,d_zmin = -0.25,d_zmax = 0.25;
var d_viewdir = 2;
var d_minpos = 0.000001;
var d_mindist = 0.03;
var d_velmul = 0.1;
var d_kinmul = 0.5;
var d_octsize = 0.25;
var d_cubesize = 0.25;
var d_ownrigid = 10;
var d_outrigid = 10;
var d_xforce = 0,d_yforce = 0,d_zforce = 0;
var d_pointsize = 3;
var d_octs = 3,d_cubes = 3;
var d_octmass = 2,d_cubemass = 1;
var d_timer;
var d_msecs = 100;
var d_timestep = 0.01;
var d_colldir = 0;
var d_fx,d_fy,d_fz;
////// label
function f_label(d_div,d_id,d_text,d_left,d_top)
{
var d_label = document.createElement(«div»);
d_label.id = d_id;
d_label.innerText = d_text;
d_label.style.left = d_left + «px»;
d_label.style.top = d_top + «px»;
d_label.style.width = d_xsize + «px»;
d_label.style.height = d_ysize + «px»;
d_label.style.position = «absolute»;
d_label.style.backgroundColor = «whiteSmoke»;
d_label.style.color = «black»;
d_label.style.FontSize = 16;
d_label.style.textAlign = «center»;
d_div.appendChild(d_label);
return;
}
////// halflabel
function f_halflabel(d_div,d_id,d_text,d_left,d_top)
{
var d_label = document.createElement(«div»);
d_label.id = d_id;
d_label.innerText = d_text;
d_label.style.left = d_left + «px»;
d_label.style.top = d_top + «px»;
d_label.style.width = (d_xsize / 2) + «px»;
d_label.style.height = d_ysize + «px»;
d_label.style.position = «absolute»;
d_label.style.backgroundColor = «whiteSmoke»;
d_label.style.color = «black»;
d_label.style.FontSize = 16;
d_label.style.textAlign = «center»;
d_div.appendChild(d_label);
return;
}
////// area
function f_area(d_div,d_id,d_text,d_left,d_top)
{
var d_area = document.createElement(«textarea»);
d_area.id = d_id;
d_area.value = d_text;
d_area.style.left = d_left + «px»;
d_area.style.top = d_top + «px»;
d_area.style.width = d_xsize + «px»;
d_area.style.height = d_ysize + «px»;
d_area.style.position = «absolute»;
d_area.style.backgroundColor = «white»;
d_area.style.color = «black»;
d_area.style.FontSize = 16;
d_area.style.textAlign = «left»;
d_div.appendChild(d_area);
return d_area;
}
////// halfarea
function f_halfarea(d_div,d_id,d_text,d_left,d_top)
{
var d_area = document.createElement(«textarea»);
d_area.id = d_id;
d_area.value = d_text;
d_area.style.left = d_left + «px»;
d_area.style.top = d_top + «px»;
d_area.style.width = (d_xsize / 2) + «px»;
d_area.style.height = d_ysize + «px»;
d_area.style.position = «absolute»;
d_area.style.backgroundColor = «white»;
d_area.style.color = «black»;
d_area.style.FontSize = 16;
d_area.style.textAlign = «left»;
d_div.appendChild(d_area);
return d_area;
}
////// button
function f_button(d_div,d_id,d_text,d_left,d_top)
{
var d_button = document.createElement(«button»);
d_button.id = d_id;
d_button.innerText = d_text;
d_button.style.left = d_left + «px»;
d_button.style.top = d_top + «px»;
d_button.style.width = d_xsize + «px»;
d_button.style.height = d_ysize + «px»;
d_button.style.position = «absolute»;
d_button.style.backgroundColor = «whiteSmoke»;
d_button.style.color = «black»;
d_button.style.FontSize = 16;
d_button.style.textAlign = «center»;
d_div.appendChild(d_button);
return d_button;
}
////// halfbutton
function f_halfbutton(d_div,d_id,d_text,d_left,d_top)
{
var d_button = document.createElement(«button»);
d_button.id = d_id;
d_button.innerText = d_text;
d_button.style.left = d_left + «px»;
d_button.style.top = d_top + «px»;
d_button.style.width = (d_xsize / 2) + «px»;
d_button.style.height = d_ysize + «px»;
d_button.style.position = «absolute»;
d_button.style.backgroundColor = «whiteSmoke»;
d_button.style.color = «black»;
d_button.style.FontSize = 16;
d_button.style.textAlign = «center»;
d_div.appendChild(d_button);
return d_button;
}
////// check
function f_check(d_div,d_id,d_var,d_left,d_top)
{
var d_check = document.createElement(«input»);
d_check.type = «checkbox»;
d_check.id = d_id;
if(d_var == 0) d_check.checked = false;
else d_check.checked = true;
d_check.style.left = d_left + «px»;
d_check.style.top = d_top + «px»;
d_check.style.width = d_ysize + «px»;
d_check.style.height = d_ysize + «px»;
d_check.style.position = «absolute»;
d_div.appendChild(d_check);
return d_check;
}
////// radio
function f_radio(d_div,d_id,d_name,d_value,d_var,d_left,d_top)
{
var d_radio = document.createElement(«input»);
d_radio.type = «radio»;
d_radio.id = d_id;
d_radio.name = d_name;
d_radio.value = d_value;
if(d_var == d_value) d_radio.checked = true;
else d_radio.checked = false;
d_radio.style.left = d_left + «px»;
d_radio.style.top = d_top + «px»;
d_radio.style.width = d_ysize + «px»;
d_radio.style.height = d_ysize + «px»;
d_radio.style.position = «absolute»;
d_div.appendChild(d_radio);
return d_radio;
}
////// width
function f_width()
{
var d_extent,d_left;
var d_point;
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == Math.round(d_new))
{//3
if(d_new == d_width)
return;
d_width = d_new;
d_field.style.width = d_width + «px»;
d_panel.style.left = d_width + «px»;
if(p_objects == null)
return;
var d_div = d_field.firstChild;
var d_object = p_objects;
if(d_viewdir == 0) d_extent = d_ymax — d_ymin;//y right,z down
else
{
if(d_viewdir == 1) d_extent = d_zmax — d_zmin;//z right,x down
else d_extent = d_xmax — d_xmin;//d_viewdir = 2,x right,y down
}
for(;;)
{//4
d_point = d_object.p_points;
for(;;)
{//5
if(d_extent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else
{//6
if(d_viewdir == 0) d_left = Math.round((((d_point.d_sy — d_ymin) / d_extent) * d_width) — (d_pointsize / 2));
else
{
if(d_viewdir == 1) d_left = Math.round((((d_point.d_sz — d_zmin) / d_extent) * d_width) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sx — d_xmin) / d_extent) * d_width) — (d_pointsize / 2));
}
}//6
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
d_div = d_div.nextSibling;
}//5
d_object = d_object.d_nextobject;
if(d_object == null)
break;
d_div = d_div.nextSibling;
}//4
return;
}//3
}//2
}//1
this.value = d_width;
return;
}
////// height
function f_height()
{
var d_extent,d_top;
var d_point;
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == Math.round(d_new))
{//3
if(d_new == d_height)
return;
d_height = d_new;
d_field.style.height = d_height + «px»;
if(p_objects == null)
return;
var d_div = d_field.firstChild;
var d_object = p_objects;
if(d_viewdir == 0) d_extent = d_zmax — d_zmin;//y right,z down
else
{
if(d_viewdir == 1) d_extent = d_xmax — d_xmin;//z right,x down
else d_extent = d_ymax — d_ymin;//d_viewdir = 2,x right,y down
}
for(;;)
{//4
d_point = d_object.p_points;
for(;;)
{//5
if(d_extent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else
{//6
if(d_viewdir == 0) d_top = Math.round((((d_point.d_sz — d_zmin) / d_extent) * d_height) — (d_pointsize / 2));
else
{
if(d_viewdir == 1) d_top = Math.round((((d_point.d_sx — d_xmin) / d_extent) * d_height) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sy — d_ymin) / d_extent) * d_height) — (d_pointsize / 2));
}
}//6
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
d_div = d_div.nextSibling;
}//5
d_object = d_object.d_nextobject;
if(d_object == null)
break;
d_div = d_div.nextSibling;
}//4
return;
}//3
}//2
}//1
this.value = d_height;
return;
}

computer
#54660 2023-01-22 16:40 GMT

////// cleanfield
function f_cleanfield()
{
var d_point;
var d_nextdiv;
var d_nextobject;
var d_nextpoint;
if(p_objects == null)
return;
var d_div = d_field.firstChild;
var d_object = p_objects;
for(;;)
{//1
d_nextobject = d_object.d_nextobject;
d_point = d_object.p_points;
for(;;)
{
d_nextdiv = d_div.nextSibling;
d_nextpoint = d_point.d_nextpoint;
d_field.removeChild(d_div);
delete d_point;//?
if(d_nextpoint == null)
break;
d_div = d_nextdiv;
d_point = d_nextpoint;
}
delete d_object;//?
if(d_nextobject == null)
break;
d_div = d_nextdiv;
d_object = d_nextobject;
}//1
p_objects = null;
return;
}
////// xmin
function f_xmin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new <= d_xmax)
{
if(d_new == d_xmin)
return;
d_xmin = d_new;
f_cleanfield();
return;
}
}//1
this.value = d_xmin;
return;
}
////// xmax
function f_xmax()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new >= d_xmin)
{
if(d_new == d_xmax)
return;
d_xmax = d_new;
f_cleanfield();
return;
}
}//1
this.value = d_xmax;
return;
}
////// ymin
function f_ymin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new <= d_ymax)
{
if(d_new == d_ymin)
return;
d_ymin = d_new;
f_cleanfield();
return;
}
}//1
this.value = d_ymin;
return;
}
////// ymax
function f_ymax()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new >= d_ymin)
{
if(d_new == d_ymax)
return;
d_ymax = d_new;
f_cleanfield();
return;
}
}//1
this.value = d_ymax;
return;
}
////// zmin
function f_zmin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new <= d_zmax)
{
if(d_new == d_zmin)
return;
d_zmin = d_new;
f_cleanfield();
return;
}
}//1
this.value = d_zmin;
return;
}
////// zmax
function f_zmax()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new >= d_zmin)
{
if(d_new == d_zmax)
return;
d_zmax = d_new;
f_cleanfield();
return;
}
}//1
this.value = d_zmax;
return;
}
////// showfield
function f_showfield()
{
var d_left,d_top;
var d_point;
if(p_objects == null)
return;
var d_div = d_field.firstChild;
var d_object = p_objects;
var d_xextent = d_xmax — d_xmin;
var d_yextent = d_ymax — d_ymin;
var d_zextent = d_zmax — d_zmin;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{//2
if(d_viewdir == 0)//y right,z down
{
if(d_yextent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sy — d_ymin) / d_yextent) * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
if(d_zextent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sz — d_zmin) / d_zextent) * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
}
else
{//3
if(d_viewdir == 1)//z right,x down
{
if(d_zextent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sz — d_zmin) / d_zextent) * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
if(d_xextent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sx — d_xmin) / d_xextent) * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
}
else
{
//d_viewdir = 2,x right,y down
if(d_xextent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sx — d_xmin) / d_xextent) * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
if(d_yextent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sy — d_ymin) / d_yextent) * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
}
}//3
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
d_div = d_div.nextSibling;
}//2
d_object = d_object.d_nextobject;
if(d_object == null)
break;
d_div = d_div.nextSibling;
}//1
return;
}

computer
#54661 2023-01-22 16:40 GMT

////// viewdir
function f_viewdir()
{
var d_new = Number(this.value);
if(d_new == d_viewdir)
return;
d_viewdir = d_new;
f_showfield();
return;
}
////// minpos
function f_minpos()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_minpos = d_new;
return;
}
}//1
this.value = d_minpos;
return;
}
////// mindist
function f_mindist()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_mindist = d_new;
return;
}
}//1
this.value = d_mindist;
return;
}
////// velmul
function f_velmul()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_velmul = d_new;
return;
}
}//1
this.value = d_velmul;
return;
}
////// kinmul
function f_kinmul()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_kinmul = d_new;
return;
}
}//1
this.value = d_kinmul;
return;
}
////// octsize
function f_octsize()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_octsize = d_new;
return;
}
}//1
this.value = d_octsize;
return;
}
////// cubesize
function f_cubesize()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_cubesize = d_new;
return;
}
}//1
this.value = d_cubesize;
return;
}
////// ownrigid
function f_ownrigid()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_ownrigid = d_new;
return;
}
}//1
this.value = d_ownrigid;
return;
}
////// outrigid
function f_outrigid()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_outrigid = d_new;
return;
}
}//1
this.value = d_outrigid;
return;
}
////// xforce
function f_xforce()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{
d_xforce = d_new;
return;
}
this.value = d_xforce;
return;
}
////// yforce
function f_yforce()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{
d_yforce = d_new;
return;
}
this.value = d_yforce;
return;
}
////// zforce
function f_zforce()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{
d_zforce = d_new;
return;
}
this.value = d_zforce;
return;
}
////// pointsize
function f_pointsize()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == Math.round(d_new))
{//3
if(d_new == d_pointsize)
return;
d_pointsize = d_new;
var d_div = d_field.firstChild;
if(d_div == null)
return;
var d_lastdiv = d_field.lastChild;
if(d_lastdiv == null)
return;
for(;;)
{
d_div.style.width = d_pointsize + «px»;
d_div.style.height = d_pointsize + «px»;
if(d_div == d_lastdiv)
break;
d_div = d_div.nextSibling;
}
f_showfield();
return;
}//3
}//2
}//1
this.value = d_pointsize;
return;
}

computer
#54662 2023-01-22 16:41 GMT

////// octs
function f_octs()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new >= 0)
{//2
if(d_new == Math.round(d_new))
{
if(d_new == d_octs)
return;
d_octs = d_new;
f_cleanfield();
return;
}
}//2
}//1
this.value = d_octs;
return;
}
////// cubes
function f_cubes()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new >= 0)
{//2
if(d_new == Math.round(d_new))
{
if(d_new == d_cubes)
return;
d_cubes = d_new;
f_cleanfield();
return;
}
}//2
}//1
this.value = d_cubes;
return;
}
////// octmass
function f_octmass()
{
var d_point;
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == d_octmass)
return;
d_octmass = d_new;
if(p_objects == null)
return;
var d_object = p_objects;
for(;;)
{//3
if(d_oblect.d_type == 6)
{
for(d_point = d_oblect.p_points;d_point != null;d_point = d_point.d_nextpoint) d_point.d_mass = d_octmass;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//3
return;
}//2
}//1
this.value = d_octmass;
return;
}
////// cubemass
function f_cubemass()
{
var d_point;
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == d_cubemass)
return;
d_cubemass = d_new;
if(p_objects == null)
return;
var d_object = p_objects;
for(;;)
{//3
if(d_oblect.d_type == 8)
{
for(d_point = d_oblect.p_points;d_point != null;d_point = d_point.d_nextpoint) d_point.d_mass = d_cubemass;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//3
return;
}//2
}//1
this.value = d_cubemass;
return;
}
////// msecs
function f_msecs()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == Math.round(d_new))
{
d_msecs = d_new;
return;
}
}//2
}//1
this.value = d_msecs;
return;
}
////// timestep
function f_timestep()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
d_timestep = d_new;
return;
}
}//1
this.value = d_timestep;
return;
}
////// adjustpoint
function f_adjustpoint(d_div,d_point)
{
var d_sx,d_sy,d_sz;
var d_left,d_top;
var d_xextent = d_xmax — d_xmin;
var d_yextent = d_ymax — d_ymin;
var d_zextent = d_zmax — d_zmin;
if(d_viewdir == 0)//y right,z down
{
if(d_yextent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sy — d_ymin) / d_yextent) * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
if(d_zextent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sz — d_zmin) / d_zextent) * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
return;
}
if(d_viewdir == 1)//z right,x down
{
if(d_zextent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sz — d_zmin) / d_zextent) * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
if(d_xextent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sx — d_xmin) / d_xextent) * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
return;
}
//d_viewdir = 2,x right,y down
if(d_xextent <= d_minpos) d_left = Math.round((d_width / 2) — (d_pointsize / 2));
else d_left = Math.round((((d_point.d_sx — d_xmin) / d_xextent) * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
if(d_yextent <= d_minpos) d_top = Math.round((d_height / 2) — (d_pointsize / 2));
else d_top = Math.round((((d_point.d_sy — d_ymin) / d_yextent) * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
return;
}

computer
#54663 2023-01-22 16:41 GMT

////// impekin
function f_impekin()
{
var d_point,d_pointmass;
if(p_objects == null)
return;
var d_mass = 0;
var d_mvx = 0;
var d_mvy = 0;
var d_mvz = 0;
var d_oldekin = 0;
var d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_pointmass = d_point.d_mass;
d_mass += d_pointmass;
d_mvx += d_point.d_vx * d_pointmass;
d_mvy += d_point.d_vy * d_pointmass;
d_mvz += d_point.d_vz * d_pointmass;
d_oldekin += (d_pointmass / 2) * ((d_point.d_vx * d_point.d_vx) + ((d_point.d_vy * d_point.d_vy) + (d_point.d_vz * d_point.d_vz)));
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
if(Number.isFinite(d_oldekin) == 0)
return;
if(d_oldekin < d_minpos)
return;
d_mvx /= d_mass;
d_mvy /= d_mass;
d_mvz /= d_mass;
var d_newekin = 0;
d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_point.d_vx -= d_mvx;
d_point.d_vy -= d_mvy;
d_point.d_vz -= d_mvz;
d_newekin += (d_point.d_mass / 2) * ((d_point.d_vx * d_point.d_vx) + ((d_point.d_vy * d_point.d_vy) + (d_point.d_vz * d_point.d_vz)));
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
if(Number.isFinite(d_newekin) == 0)
return;
if(d_newekin < d_minpos)
return;
var d_rootmul = Math.sqrt(d_oldekin / d_newekin);
if(Number.isFinite(d_rootmul) == 0)
return;
d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_point.d_vx *= d_rootmul;
d_point.d_vy *= d_rootmul;
d_point.d_vz *= d_rootmul;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
return;
}
////// ownforce
function f_ownforce(d_dist,d_dist0)
{
return (2 * d_ownrigid) * ((((d_dist0 * d_dist0) * d_dist0) / (d_dist * d_dist)) — d_dist);
}
////// ownupot
function f_ownupot(d_dist,d_dist0)
{
var d_dist02 = d_dist0 * d_dist0;
return d_ownrigid * (((2 / d_dist) * (d_dist02 * d_dist0)) + ((d_dist * d_dist) — (3 * d_dist02)));
}
////// outforce
function f_outforce(d_dist)
{
if(d_dist >= d_mindist)
return 0;
return d_outrigid / (d_dist * d_dist);
}
////// outupot
function f_outupot(d_dist)
{
if(d_dist >= d_mindist)
return 0;
return d_outrigid * ((1 / d_dist) — (1 / d_mindist));
}
////// addownfu
function f_addownfu(d_x,d_y,d_z,d_point,d_dist0)
{
var d_sign,d_cosx,d_cosy,d_cosz;
var d_dx = d_point.d_sx — d_x;
var d_dy = d_point.d_sy — d_y;
var d_dz = d_point.d_sz — d_z;
var d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist < d_minpos)
{//1
if(Math.random() >= 0.5) d_sign = 1;
else d_sign = -1;
if(d_colldir == 0) { d_cosx = d_sign; d_cosy = 0; d_cosz = 0; }
else
{
if(d_colldir == 1) { d_cosx = 0; d_cosy = d_sign; d_cosz = 0; }
else { d_cosx = 0; d_cosy = 0; d_cosz = d_sign; }
}
d_colldir++;
if(d_colldir > 2) d_colldir = 0;
d_dist = d_minpos;
}//1
else
{
d_cosx = d_dx / d_dist;
d_cosy = d_dy / d_dist;
d_cosz = d_dz / d_dist;
}
var d_f = f_ownforce(d_dist,d_dist0);
d_fx -= d_f * d_cosx;
d_fy -= d_f * d_cosy;
d_fz -= d_f * d_cosz;
return f_ownupot(d_dist,d_dist0);
}
////// addownupot
function f_addownupot(d_x,d_y,d_z,d_point,d_dist0)
{
var d_dx = d_point.d_sx — d_x;
var d_dy = d_point.d_sy — d_y;
var d_dz = d_point.d_sz — d_z;
var d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist < d_minpos) d_dist = d_minpos;
return f_ownupot(d_dist,d_dist0);
}
////// addoutfu
function f_addoutfu(d_x,d_y,d_z,d_object1)
{
var d_point;
var d_dx,d_dy,d_dz,d_dist;
var d_sign,d_cosx,d_cosy,d_cosz;
var d_f;
var d_object2 = p_objects;
var d_u = 0;
for(;;)
{//1
if(d_object2 != d_object1)
{//2
d_point = d_object2.p_points;
for(;;)
{//3
d_dx = d_point.d_sx — d_x;
d_dy = d_point.d_sy — d_y;
d_dz = d_point.d_sz — d_z;
d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist < d_minpos)
{//4
if(Math.random() >= 0.5) d_sign = 1;
else d_sign = -1;
if(d_colldir == 0) { d_cosx = d_sign; d_cosy = 0; d_cosz = 0; }
else
{
if(d_colldir == 1) { d_cosx = 0; d_cosy = d_sign; d_cosz = 0; }
else { d_cosx = 0; d_cosy = 0; d_cosz = d_sign; }
}
d_colldir++;
if(d_colldir > 2) d_colldir = 0;
d_dist = d_minpos;
}//4
else
{
d_cosx = d_dx / d_dist;
d_cosy = d_dy / d_dist;
d_cosz = d_dz / d_dist;
}
d_f = f_outforce(d_dist);
d_fx -= d_f * d_cosx;
d_fy -= d_f * d_cosy;
d_fz -= d_f * d_cosz;
d_u += f_outupot(d_dist);
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}//3
}//2
d_object2 = d_object2.d_nextobject;
if(d_object2 == null)
break;
}//1
return d_u;
}
////// addoutupot
function f_addoutupot(d_x,d_y,d_z,d_object1)
{
var d_point;
var d_dx,d_dy,d_dz,d_dist;
var d_object2 = p_objects;
var d_u = 0;
for(;;)
{//1
if(d_object2 != d_object1)
{//2
d_point = d_object2.p_points;
for(;;)
{
d_dx = d_point.d_sx — d_x;
d_dy = d_point.d_sy — d_y;
d_dz = d_point.d_sz — d_z;
d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist < d_minpos) d_dist = d_minpos;
d_u += f_outupot(d_dist);
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
}//2
d_object2 = d_object2.d_nextobject;
if(d_object2 == null)
break;
}//1
return d_u;
}

computer
#54664 2023-01-22 16:41 GMT

////// process
function f_process()
{
var d_object;
var d_point,d_point1,d_point2,d_point3,d_point4,d_point5,d_point6,d_point7,d_point8;
var d_mass,d_fmul,d_amul,d_vmul;
var d_sx0,d_sy0,d_sz0;
var d_sx,d_sy,d_sz;
var d_vx,d_vy,d_vz;
var d_vx2,d_vy2,d_vz2;
var d_u0,d_u,d_du;
var d_dx,d_dy,d_dz,d_dist;
var d_cosx,d_cosy,d_cosz;
var d_signx,d_signy,d_signz;
var d_dist0,d_diag;
if(p_objects == null)
return;
var d_div = d_field.firstChild;
var d_object = p_objects;
d_fmul = (d_timestep * d_timestep) / 2;
for(;;)
{//1
d_point1 = d_object.p_points;
d_point2 = d_point1.d_nextpoint;
d_point3 = d_point2.d_nextpoint;
d_point4 = d_point3.d_nextpoint;
d_point5 = d_point4.d_nextpoint;
d_point6 = d_point5.d_nextpoint;
if(d_object.d_type == 6) d_dist0 = d_octsize / Math.sqrt(2);
else
{
d_point7 = d_point6.d_nextpoint;
d_point8 = d_point7.d_nextpoint;
d_diag = d_cubesize * Math.sqrt(3);
}
d_point = d_object.p_points;
for(;;)
{//2
d_sx0 = d_point.d_sx;
d_sy0 = d_point.d_sy;
d_sz0 = d_point.d_sz;
d_fx = d_xforce;
d_fy = d_yforce;
d_fz = d_zforce;
d_u0 = 0;
for(;;)
{//3
if(d_object.d_type == 6)
{//4
if(d_point == d_point1)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_octsize);
break;
}
if(d_point == d_point2)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_octsize);
break;
}
if(d_point == d_point3)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_octsize);
break;
}
if(d_point == d_point4)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_octsize);
break;
}
if(d_point == d_point5)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_octsize);
break;
}
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_dist0);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_octsize);
break;
}//4
if(d_point == d_point1)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point7,d_diag);
break;
}
if(d_point == d_point2)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point8,d_diag);
break;
}
if(d_point == d_point3)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point7,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_diag);
break;
}
if(d_point == d_point4)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point8,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_diag);
break;
}
if(d_point == d_point5)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point8,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_diag);
break;
}
if(d_point == d_point6)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point7,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_diag);
break;
}
if(d_point == d_point7)
{
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point3,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point6,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point8,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point1,d_diag);
break;
}
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point4,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point7,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point5,d_cubesize);
d_u0 += f_addownfu(d_sx0,d_sy0,d_sz0,d_point2,d_diag);
break;
}//3
d_u0 += f_addoutfu(d_sx0,d_sy0,d_sz0,d_object);
d_mass = d_point.d_mass;
d_amul = d_fmul / d_mass;
d_vx = d_point.d_vx;
d_vy = d_point.d_vy;
d_vz = d_point.d_vz;
d_sx = (d_sx0 + (d_vx * d_timestep)) + (d_fx * d_amul);
d_sy = (d_sy0 + (d_vy * d_timestep)) + (d_fy * d_amul);
d_sz = (d_sz0 + (d_vz * d_timestep)) + (d_fz * d_amul);
if(d_sx < d_xmin) d_sx = d_xmin;
else
{
if(d_sx > d_xmax) d_sx = d_xmax;
}
if(d_sy < d_ymin) d_sy = d_ymin;
else
{
if(d_sy > d_ymax) d_sy = d_ymax;
}
if(d_sz < d_zmin) d_sz = d_zmin;
else
{
if(d_sz > d_zmax) d_sz = d_zmax;
}
d_dx = d_sx — d_sx0;
d_dy = d_sy — d_sy0;
d_dz = d_sz — d_sz0;
d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist < d_minpos)
{
d_point.d_vx = — d_vx;
d_point.d_vy = — d_vy;
d_point.d_vz = — d_vz;
}
else
{//3
d_u = 0;
for(;;)
{//4
if(d_object.d_type == 6)
{//5
if(d_point == d_point1)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_u += f_addownfu(d_sx,d_sy,d_sz,d_point6,d_octsize);
break;
}
if(d_point == d_point2)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_dist0);
d_u += f_addownfu(d_sx,d_sy,d_sz,d_point4,d_octsize);
break;
}
if(d_point == d_point3)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_dist0);
d_u += f_addownfu(d_sx,d_sy,d_sz,d_point5,d_octsize);
break;
}
if(d_point == d_point4)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_dist0);
d_u += f_addownfu(d_sx,d_sy,d_sz,d_point2,d_octsize);
break;
}
if(d_point == d_point5)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_dist0);
d_u += f_addownfu(d_sx,d_sy,d_sz,d_point3,d_octsize);
break;
}
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_dist0);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_u += f_addownfu(d_sx,d_sy,d_sz,d_point1,d_octsize);
break;
}//5
if(d_point == d_point1)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point7,d_diag);
break;
}
if(d_point == d_point2)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_diag);
break;
}
if(d_point == d_point3)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point7,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_diag);
break;
}
if(d_point == d_point4)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_diag);
break;
}
if(d_point == d_point5)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_diag);
break;
}
if(d_point == d_point6)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point7,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_diag);
break;
}
if(d_point == d_point7)
{
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_diag);
break;
}
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point7,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_cubesize);
d_u += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_diag);
break;
}//4
d_u += f_addoutupot(d_sx,d_sy,d_sz,d_object);
d_du = d_u — d_u0;
for(;;)
{//4
if(d_du != 0)
{//5
d_cosx = d_dx / d_dist;
d_cosy = d_dy / d_dist;
d_cosz = d_dz / d_dist;
if(d_du < 0)
{
d_vx2 = (d_vx * d_vx) — ((d_du * (d_cosx * d_cosx)) * (2 / d_mass));
d_vy2 = (d_vy * d_vy) — ((d_du * (d_cosy * d_cosy)) * (2 / d_mass));
d_vz2 = (d_vz * d_vz) — ((d_du * (d_cosz * d_cosz)) * (2 / d_mass));
}
else
{//6
d_vx2 = (d_vx * d_vx) — ((d_du * (d_cosx * d_cosx)) * (2 / d_mass));
if(d_vx2 < 0)
{
d_point.d_vx = — d_vx;
d_point.d_vy = — d_vy;
d_point.d_vz = — d_vz;
break;
}
d_vy2 = (d_vy * d_vy) — ((d_du * (d_cosy * d_cosy)) * (2 / d_mass));
if(d_vy2 < 0)
{
d_point.d_vx = — d_vx;
d_point.d_vy = — d_vy;
d_point.d_vz = — d_vz;
break;
}
d_vz2 = (d_vz * d_vz) — ((d_du * (d_cosz * d_cosz)) * (2 / d_mass));
if(d_vz2 < 0)
{
d_point.d_vx = — d_vx;
d_point.d_vy = — d_vy;
d_point.d_vz = — d_vz;
break;
}
}//6
d_vmul = d_timestep / d_mass;
d_vx += d_fx * d_vmul;
d_vy += d_fy * d_vmul;
d_vz += d_fz * d_vmul;
for(;;)
{//6
if(d_vx > 0)
{ d_signx = 1; break; }
if(d_vx < 0)
{ d_signx = -1; break; }
if(d_point.d_vx > 0)
{ d_signx = 1; break; }
if(d_point.d_vx < 0)
{ d_signx = -1; break; }
if(d_fx > 0)
{ d_signx = 1; break; }
if(d_fx < 0)
{ d_signx = -1; break; }
if(d_cosx > 0)
{ d_signx = 1; break; }
if(d_cosx < 0)
{ d_signx = -1; break; }
if(Math.random() >= 0.5)
{ d_signx = 1; break; }
d_signx = -1; break;
}//6
for(;;)
{//6
if(d_vy > 0)
{ d_signy = 1; break; }
if(d_vy < 0)
{ d_signy = -1; break; }
if(d_point.d_vy > 0)
{ d_signy = 1; break; }
if(d_point.d_vy < 0)
{ d_signy = -1; break; }
if(d_fy > 0)
{ d_signy = 1; break; }
if(d_fy < 0)
{ d_signy = -1; break; }
if(d_cosy > 0)
{ d_signy = 1; break; }
if(d_cosy < 0)
{ d_signy = -1; break; }
if(Math.random() >= 0.5)
{ d_signy = 1; break; }
d_signy = -1; break;
}//6
for(;;)
{//6
if(d_vz > 0)
{ d_signz = 1; break; }
if(d_vz < 0)
{ d_signz = -1; break; }
if(d_point.d_vz > 0)
{ d_signz = 1; break; }
if(d_point.d_vz < 0)
{ d_signz = -1; break; }
if(d_fz > 0)
{ d_signz = 1; break; }
if(d_fz < 0)
{ d_signz = -1; break; }
if(d_cosz > 0)
{ d_signz = 1; break; }
if(d_cosz < 0)
{ d_signz = -1; break; }
if(Math.random() >= 0.5)
{ d_signz = 1; break; }
d_signz = -1; break;
}//6
d_point.d_vx = d_signx * Math.sqrt(d_vx2);
d_point.d_vy = d_signy * Math.sqrt(d_vy2);
d_point.d_vz = d_signz * Math.sqrt(d_vz2);
}//5
if(d_sx <= d_xmin)
{
if(d_point.d_vx < 0) d_point.d_vx = — d_point.d_vx;
}
else
{//5
if(d_sx >= d_xmax)
{
if(d_point.d_vx > 0) d_point.d_vx = — d_point.d_vx;
}
}//5
if(d_sy <= d_ymin)
{
if(d_point.d_vy < 0) d_point.d_vy = — d_point.d_vy;
}
else
{//5
if(d_sy >= d_ymax)
{
if(d_point.d_vy > 0) d_point.d_vy = — d_point.d_vy;
}
}//5
if(d_sz <= d_zmin)
{
if(d_point.d_vz < 0) d_point.d_vz = — d_point.d_vz;
}
else
{//5
if(d_sz >= d_zmax)
{
if(d_point.d_vz > 0) d_point.d_vz = — d_point.d_vz;
}
}//5
d_point.d_sx = d_sx;
d_point.d_sy = d_sy;
d_point.d_sz = d_sz;
break;
}//4
}//3
f_adjustpoint(d_div,d_point);
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
d_div = d_div.nextSibling;
}//2
d_object = d_object.d_nextobject;
if(d_object == null)
break;
d_div = d_div.nextSibling;
}//1
//?f_impekin();
return;
}

computer
#54665 2023-01-22 16:42 GMT

////// step
function f_step()
{
f_process();
return;
}
////// run
function f_run()
{
d_timer = window.setInterval(f_step,d_msecs);
return;
}
////// pause
function f_pause()
{
window.clearInterval(d_timer);
return;
}
////// adddiv
function f_adddiv(d_point,d_type)
{
var d_w,d_h;
var d_left,d_top;
var d_div = document.createElement(«div»);
var d_dx = d_xmax — d_xmin;
var d_dy = d_ymax — d_ymin;
var d_dz = d_zmax — d_zmin;
if(d_viewdir == 2) { d_w = (d_point.d_sx — d_xmin) / d_dx; d_h = (d_point.d_sy — d_ymin) / d_dy; }//x right,y down
else
{
if(d_viewdir == 1) { d_w = (d_point.d_sz — d_zmin) / d_dz; d_h = (d_point.d_sx — d_xmin) / d_dx; }//z right,x down
else { d_w = (d_point.d_sy — d_ymin) / d_dy; d_h = (d_point.d_sz — d_zmin) / d_dz; }//d_viewdir = 0,y right,z down
}
d_left = Math.round((d_w * d_width) — (d_pointsize / 2));
if((d_left + d_pointsize) > d_width) d_left = d_width — d_pointsize;
if(d_left < 0) d_left = 0;
d_div.style.left = d_left + «px»;
d_top = Math.round((d_h * d_height) — (d_pointsize / 2));
if((d_top + d_pointsize) > d_height) d_top = d_height — d_pointsize;
if(d_top < 0) d_top = 0;
d_div.style.top = d_top + «px»;
d_div.style.width = d_pointsize + «px»;
d_div.style.height = d_pointsize + «px»;
d_div.style.position = «absolute»;
if(d_type == 6) d_div.style.backgroundColor = «red»;
else d_div.style.backgroundColor = «blue»;
d_field.appendChild(d_div);
return;
}
////// createobjects
function f_createobjects()
{
var d_size,d_type;
var d_index,d_limit;
var d_object,d_prevobject;
var d_point1,d_point2,d_point3,d_point4,d_point5,d_point6,d_point7,d_point8;
var d_sx,d_sy,d_sz;
var d_vx,d_vy,d_vz;
var d_dx = d_xmax — d_xmin;
var d_dy = d_ymax — d_ymin;
var d_dz = d_zmax — d_zmin;
var d_dxdiv2 = d_dx / 2;
var d_dydiv2 = d_dy / 2;
var d_dzdiv2 = d_dz / 2;
var d_size = d_dxdiv2;
if(d_size > d_dydiv2) d_size = d_dydiv2;
if(d_size > d_dzdiv2) d_size = d_dzdiv2;
if(d_size < d_minpos)
return;
if((d_octsize / 2) > d_size)
return;
if((d_cubesize / 2) > d_size)
return;
f_cleanfield();
if(d_octs > 0)
{
d_type = 6;
d_limit = d_octs;
d_size = d_octsize / 2;
}
else
{
d_type = 8;
d_limit = d_cubes;
d_size = d_cubesize / 2;
}
d_index = 0;
for(;;)
{//1
d_object = new Object();//?
d_object.d_nextobject = null;
if(p_objects == null) p_objects = d_object;
else d_prevobject.d_nextobject = d_object;
d_prevobject = d_object;
d_object.d_type = d_type;
d_point1 = new Object();//?
d_point2 = new Object();//?
d_point3 = new Object();//?
d_point4 = new Object();//?
d_point5 = new Object();//?
d_point6 = new Object();//?
d_object.p_points = d_point1;
d_point1.d_nextpoint = d_point2;
d_point2.d_nextpoint = d_point3;
d_point3.d_nextpoint = d_point4;
d_point4.d_nextpoint = d_point5;
d_point5.d_nextpoint = d_point6;
if(d_type == 6) d_point6.d_nextpoint = null;
else
{
d_point7 = new Object();//?
d_point8 = new Object();//?
d_point6.d_nextpoint = d_point7;
d_point7.d_nextpoint = d_point8;
d_point8.d_nextpoint = null;
delete d_point7;//?
delete d_point8;//?
}
delete d_object;//?
delete d_point1;//?
delete d_point2;//?
delete d_point3;//?
delete d_point4;//?
delete d_point5;//?
delete d_point6;//?
d_sx = d_xmin + (Math.random() * d_dx);
d_sy = d_ymin + (Math.random() * d_dy);
d_sz = d_zmin + (Math.random() * d_dz);
if((d_sx — d_size) < d_xmin) d_sx = d_xmin + d_size;
else
{
if((d_sx + d_size) > d_xmax) d_sx = d_xmax — d_size;
}
if((d_sy — d_size) < d_ymin) d_sy = d_ymin + d_size;
else
{
if((d_sy + d_size) > d_ymax) d_sy = d_ymax — d_size;
}
if((d_sz — d_size) < d_zmin) d_sz = d_zmin + d_size;
else
{
if((d_sz + d_size) > d_zmax) d_sz = d_zmax — d_size;
}
d_vx = ((Math.random() * 2) — 1) * d_velmul;
d_vy = ((Math.random() * 2) — 1) * d_velmul;
d_vz = ((Math.random() * 2) — 1) * d_velmul;
d_point1.d_vx = d_vx;
d_point1.d_vy = d_vy;
d_point1.d_vz = d_vz;
d_point2.d_vx = d_vx;
d_point2.d_vy = d_vy;
d_point2.d_vz = d_vz;
d_point3.d_vx = d_vx;
d_point3.d_vy = d_vy;
d_point3.d_vz = d_vz;
d_point4.d_vx = d_vx;
d_point4.d_vy = d_vy;
d_point4.d_vz = d_vz;
d_point5.d_vx = d_vx;
d_point5.d_vy = d_vy;
d_point5.d_vz = d_vz;
d_point6.d_vx = d_vx;
d_point6.d_vy = d_vy;
d_point6.d_vz = d_vz;
if(d_type == 6)
{
d_point1.d_sx = d_sx;
d_point1.d_sy = d_sy;
d_point1.d_sz = d_sz — d_size;
d_point2.d_sx = d_sx + d_size;
d_point2.d_sy = d_sy;
d_point2.d_sz = d_sz;
d_point3.d_sx = d_sx;
d_point3.d_sy = d_sy + d_size;
d_point3.d_sz = d_sz;
d_point4.d_sx = d_sx — d_size;
d_point4.d_sy = d_sy;
d_point4.d_sz = d_sz;
d_point5.d_sx = d_sx;
d_point5.d_sy = d_sy — d_size;
d_point5.d_sz = d_sz;
d_point6.d_sx = d_sx;
d_point6.d_sy = d_sy;
d_point6.d_sz = d_sz + d_size;
d_point1.d_mass = d_octmass;
d_point2.d_mass = d_octmass;
d_point3.d_mass = d_octmass;
d_point4.d_mass = d_octmass;
d_point5.d_mass = d_octmass;
d_point6.d_mass = d_octmass;
}
else
{
d_point7.d_vx = d_vx;
d_point7.d_vy = d_vy;
d_point7.d_vz = d_vz;
d_point8.d_vx = d_vx;
d_point8.d_vy = d_vy;
d_point8.d_vz = d_vz;
d_point1.d_sx = d_sx + d_size;
d_point1.d_sy = d_sy + d_size;
d_point1.d_sz = d_sz — d_size;
d_point2.d_sx = d_sx — d_size;
d_point2.d_sy = d_sy + d_size;
d_point2.d_sz = d_sz — d_size;
d_point3.d_sx = d_sx — d_size;
d_point3.d_sy = d_sy — d_size;
d_point3.d_sz = d_sz — d_size;
d_point4.d_sx = d_sx + d_size;
d_point4.d_sy = d_sy — d_size;
d_point4.d_sz = d_sz — d_size;
d_point5.d_sx = d_sx + d_size;
d_point5.d_sy = d_sy + d_size;
d_point5.d_sz = d_sz + d_size;
d_point6.d_sx = d_sx — d_size;
d_point6.d_sy = d_sy + d_size;
d_point6.d_sz = d_sz + d_size;
d_point7.d_sx = d_sx — d_size;
d_point7.d_sy = d_sy — d_size;
d_point7.d_sz = d_sz + d_size;
d_point8.d_sx = d_sx + d_size;
d_point8.d_sy = d_sy — d_size;
d_point8.d_sz = d_sz + d_size;
d_point1.d_mass = d_cubemass;
d_point2.d_mass = d_cubemass;
d_point3.d_mass = d_cubemass;
d_point4.d_mass = d_cubemass;
d_point5.d_mass = d_cubemass;
d_point6.d_mass = d_cubemass;
d_point7.d_mass = d_cubemass;
d_point8.d_mass = d_cubemass;
}
f_adddiv(d_point1,d_type);
f_adddiv(d_point2,d_type);
f_adddiv(d_point3,d_type);
f_adddiv(d_point4,d_type);
f_adddiv(d_point5,d_type);
f_adddiv(d_point6,d_type);
if(d_type == 8)
{
f_adddiv(d_point7,d_type);
f_adddiv(d_point8,d_type);
}
d_index++;
if(d_index < d_limit)
continue;
if(d_type == 8)
break;
if(d_cubes <= 0)
break;
d_type = 8;
d_limit = d_cubes;
d_size = d_cubesize / 2;
d_index = 0;
}//1
return;
}

computer
#54666 2023-01-22 16:43 GMT

////// testwsc
function f_testwsc(d_char)
{
if(d_char != ' ')
{//1
if(d_char != '\t')
{//2
if(d_char != '\r')
{
if(d_char != '\n')
return 0;
}
}//2
}//1
return 1;
}
////// loadpoint
function f_loadpoint(d_str,d_index,d_limit,d_point)
{
var d_char,d_numstr,d_num;
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}
d_numstr = String(d_char);//?String
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
return 0;
if(d_num < d_xmin) d_num = d_xmin;
else
{
if(d_num > d_xmax) d_num = d_xmax;
}
d_point.d_sx = Number(d_num);//?Number
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}
d_numstr = String(d_char);//?String
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
return 0;
if(d_num < d_ymin) d_num = d_ymin;
else
{
if(d_num > d_ymax) d_num = d_ymax;
}
d_point.d_sy = Number(d_num);//?Number
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}
d_numstr = String(d_char);//?String
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
return 0;
if(d_num < d_zmin) d_num = d_zmin;
else
{
if(d_num > d_zmax) d_num = d_zmax;
}
d_point.d_sz = Number(d_num);//?Number
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}
d_numstr = String(d_char);//?String
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
return 0;
d_point.d_vx = Number(d_num);//?Number
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}
d_numstr = String(d_char);//?String
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
return 0;
d_point.d_vy = Number(d_num);//?Number
for(;;)
{
d_index++;
if(d_index >= d_limit)
return 0;
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}
d_numstr = String(d_char);//?String
for(;;)
{//1
d_index++;
if(d_index >= d_limit)
{
d_index--;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}//1
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
return 0;
d_point.d_vz = Number(d_num);//?Number
return d_index;
}
////// load
function f_load()
{
var d_div;
var d_object,d_prevobject;
var d_point,d_prevpoint,d_pointindex;
var d_char;
var d_type;
var d_area = document.getElementById(«d_modelarea»);
var d_str = d_area.value;
if(d_str.length < 1)
return;
f_cleanfield();
var d_charindex = 0;
var d_charlimit = d_str.length;
var d_error = 0;
for(;d_charindex < d_charlimit;d_charindex++)
{//1
d_char = d_str.charAt(d_charindex);
if(f_testwsc(d_char) != 0)
continue;
d_error = 1;
if(d_char == '6') d_type = 6;
else
{
if(d_char != '8')
break;
d_type = 8;
}
d_charindex++;
if(d_charindex >= d_charlimit)
break;
d_char = d_str.charAt(d_charindex);
if(f_testwsc(d_char) == 0)
break;
d_object = new Object();//?
d_object.d_nextobject = null;
if(p_objects == null) p_objects = d_object;
else d_prevobject.d_nextobject = d_object;
d_prevobject = d_object;
d_object.p_points = null;
d_object.d_type = d_type;
delete d_object;//?
d_pointindex = 0;
for(;;)
{//2
d_point = new Object();//?
d_point.d_nextpoint = null;
if(d_object.p_points == null) d_object.p_points = d_point;
else d_prevpoint.d_nextpoint = d_point;
d_prevpoint = d_point;
delete d_point;//?
d_charindex = f_loadpoint(d_str,d_charindex,d_charlimit,d_point);
if(d_charindex == 0)
break;
d_div = document.createElement(«div»);
d_field.appendChild(d_div);
d_div.style.width = d_pointsize + «px»;
d_div.style.height = d_pointsize + «px»;
d_div.style.position = «absolute»;
if(d_type == 6)
{
d_div.style.backgroundColor = «red»;
d_point.d_mass = d_octmass;
}
else
{
d_div.style.backgroundColor = «blue»;
d_point.d_mass = d_cubemass;
}
d_pointindex++;
if(d_pointindex < d_type)
continue;
d_error = 0;
break;
}//2
if(d_error != 0)
break;
}//1
if(d_error == 0)
{
f_showfield();
return;
}
f_cleanfield();
return;
}
////// save
function f_save()
{
var d_point;
if(p_objects == null)
return;
var d_str = "";
var d_object = p_objects;
var d_error = 1;
for(;;)
{//1
if(d_object.d_type == 6) d_str += «6 »;
else
{
if(d_object.d_type != 8)
break;
d_str += «8 »;
}
d_point = d_object.p_points;
for(;;)
{
d_str += d_point.d_sx + " " + d_point.d_sy + " " + d_point.d_sz + "\r\n  ";
d_str += d_point.d_vx + " " + d_point.d_vy + " " + d_point.d_vz + "\r\n";
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object != null)
continue;
d_error = 0;
break;
}//1
if(d_error != 0) d_str = «error»;
var d_area = document.getElementById(«d_modelarea»);
d_area.value = d_str;
return;
}

computer
#54667 2023-01-22 16:43 GMT

////// zeroimp
function f_zeroimp()
{
var d_point,d_pointmass;
if(p_objects == null)
return;
var d_mass = 0;
var d_mvx = 0;
var d_mvy = 0;
var d_mvz = 0;
var d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_pointmass = d_point.d_mass;
d_mass += d_pointmass;
d_mvx += d_point.d_vx * d_pointmass;
d_mvy += d_point.d_vy * d_pointmass;
d_mvz += d_point.d_vz * d_pointmass;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
d_mvx /= d_mass;
d_mvy /= d_mass;
d_mvz /= d_mass;
d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_point.d_vx -= d_mvx;
d_point.d_vy -= d_mvy;
d_point.d_vz -= d_mvz;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
return;
}
////// mulekin
function f_mulekin()
{
var d_point;
if(p_objects == null)
return;
var d_rootmul = Math.sqrt(d_kinmul);
var d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_point.d_vx *= d_rootmul;
d_point.d_vy *= d_rootmul;
d_point.d_vz *= d_rootmul;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
return;
}
////// getekin
function f_getekin()
{
var d_point;
if(p_objects == null)
return 0;
var d_newekin = 0;
var d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_newekin += (d_point.d_mass / 2) * ((d_point.d_vx * d_point.d_vx) + ((d_point.d_vy * d_point.d_vy) + (d_point.d_vz * d_point.d_vz)));
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
var d_area = document.getElementById(«d_ekinarea»);
if(Number.isFinite(d_newekin) != 0)
{
d_area.value = d_newekin;
return d_newekin;
}
d_area.value = «infinity»;
return 0;
}
////// setekin
function f_setekin()
{
var d_point;
if(p_objects == null)
return;
var d_area = document.getElementById(«d_ekinarea»);
var d_newekin = Number(d_area.value);
if(Number.isFinite(d_newekin) == 0)
return;
if(d_newekin < 0)
return;
var d_oldekin = 0;
var d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_oldekin += (d_point.d_mass / 2) * ((d_point.d_vx * d_point.d_vx) + ((d_point.d_vy * d_point.d_vy) + (d_point.d_vz * d_point.d_vz)));
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
if(Number.isFinite(d_oldekin) == 0)
return;
if(d_oldekin < d_minpos)
return;
var d_rootmul = Math.sqrt(d_newekin / d_oldekin);
if(Number.isFinite(d_rootmul) == 0)
return;
d_object = p_objects;
for(;;)
{//1
d_point = d_object.p_points;
for(;;)
{
d_point.d_vx *= d_rootmul;
d_point.d_vy *= d_rootmul;
d_point.d_vz *= d_rootmul;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
d_object = d_object.d_nextobject;
if(d_object == null)
break;
}//1
return;
}
////// getepot
function f_getepot()
{
var d_object2;
var d_point1,d_point2,d_point3,d_point4,d_point5,d_point6,d_point7,d_point8;
var d_sx,d_sy,d_sz;
var d_dx,d_dy,d_dz,d_dist;
var d_dist0,d_diag;
var d_area = document.getElementById(«d_epotarea»);
if(p_objects == null)
{
d_area.value = 0;
return 0;
}
var d_upot = 0;
var d_object1 = p_objects;
for(;;)
{//1
d_point1 = d_object1.p_points;
d_point2 = d_point1.d_nextpoint;
d_point3 = d_point2.d_nextpoint;
d_point4 = d_point3.d_nextpoint;
d_point5 = d_point4.d_nextpoint;
d_point6 = d_point5.d_nextpoint;
d_sx = d_point1.d_sx;
d_sy = d_point1.d_sy;
d_sz = d_point1.d_sz;
if(d_object1.d_type == 6)
{
d_dist0 = d_octsize / Math.sqrt(2);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_octsize);
d_sx = d_point6.d_sx;
d_sy = d_point6.d_sy;
d_sz = d_point6.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_sx = d_point2.d_sx;
d_sy = d_point2.d_sy;
d_sz = d_point2.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_octsize);
d_sx = d_point4.d_sx;
d_sy = d_point4.d_sy;
d_sz = d_point4.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_dist0);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_dist0);
d_upot += f_addownupot(d_point3.d_sx,d_point3.d_sy,d_point3.d_sz,d_point5,d_octsize);
}
else
{
d_point7 = d_point6.d_nextpoint;
d_point8 = d_point7.d_nextpoint;
d_diag = d_cubesize * Math.sqrt(3);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point2,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point7,d_diag);
d_sx = d_point2.d_sx;
d_sy = d_point2.d_sy;
d_sz = d_point2.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point3,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_diag);
d_sx = d_point3.d_sx;
d_sy = d_point3.d_sy;
d_sz = d_point3.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point4,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point7,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point5,d_diag);
d_sx = d_point4.d_sx;
d_sy = d_point4.d_sy;
d_sz = d_point4.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point1,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_diag);
d_sx = d_point5.d_sx;
d_sy = d_point5.d_sy;
d_sz = d_point5.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_cubesize);
d_sx = d_point7.d_sx;
d_sy = d_point7.d_sy;
d_sz = d_point7.d_sz;
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point6,d_cubesize);
d_upot += f_addownupot(d_sx,d_sy,d_sz,d_point8,d_cubesize);
}
d_object1 = d_object1.d_nextobject;
if(d_object1 == null)
break;
}//1
d_object1 = p_objects;
for(;;)
{//1
for(d_object2 = d_object1.d_nextobject;d_object2 != null;d_object2 = d_object2.d_nextobject)
{//2
d_point1 = d_object1.p_points;
for(;;)
{//3
d_sx = d_point1.d_sx;
d_sy = d_point1.d_sy;
d_sz = d_point1.d_sz;
d_point2 = d_object2.p_points;
for(;;)
{
d_dx = d_point2.d_sx — d_sx;
d_dy = d_point2.d_sy — d_sy;
d_dz = d_point2.d_sz — d_sz;
d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist < d_minpos) d_dist = d_minpos;
d_upot += f_outupot(d_dist);
d_point2 = d_point2.d_nextpoint;
if(d_point2 == null)
break;
}
d_point1 = d_point1.d_nextpoint;
if(d_point1 == null)
break;
}//3
}//2
d_object1 = d_object1.d_nextobject;
if(d_object1 == null)
break;
}//1
if(Number.isFinite(d_upot) != 0)
{
d_area.value = d_upot;
return d_upot;
}
d_area.value = «undefined»;
return 0;
}
////// getenergy
function f_getenergy()
{
var d_ukin = f_getekin();
var d_upot = f_getepot();
var d_area = document.getElementById(«d_energyarea»);
d_area.value = d_ukin + d_upot;
return;
}

computer
#54668 2023-01-22 16:44 GMT

////// create
function f_create()
{
var d_area;
var d_left,d_top;
d_field = document.createElement(«div»);
d_field.style.left = 0 + «px»;
d_field.style.top = 0 + «px»;
d_field.style.width = d_width + «px»;
d_field.style.height = d_height + «px»;
d_field.style.position = «absolute»;
d_field.style.backgroundColor = «white»;
d_field.style.color = «black»;
document.body.appendChild(d_field);
d_panel = document.createElement(«div»);
d_panel.style.left = d_width + «px»;
d_panel.style.top = 0 + «px»;
d_panel.style.width = (d_xspace + d_xsize + d_xspace + d_xsize + d_xspace + 20) + «px»;
d_panel.style.height = 600 + «px»;
d_panel.style.position = «absolute»;
d_panel.style.backgroundColor = «whiteSmoke»;
d_panel.style.color = «black»;
document.body.appendChild(d_panel);
d_top = d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_widthlabel»,«width»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_widtharea»,d_width,d_left,d_top).onchange = f_width;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_heightlabel»,«height»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_heightarea»,d_height,d_left,d_top).onchange = f_height;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_xminlabel»,«x minimum»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_xminarea»,d_xmin,d_left,d_top).onchange = f_xmin;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_xmaxlabel»,«x maximum»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_xmaxarea»,d_xmax,d_left,d_top).onchange = f_xmax;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_yminlabel»,«y minimum»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_yminarea»,d_ymin,d_left,d_top).onchange = f_ymin;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_ymaxlabel»,«y maximum»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_ymaxarea»,d_ymax,d_left,d_top).onchange = f_ymax;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_zminlabel»,«z minimum»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_zminarea»,d_zmin,d_left,d_top).onchange = f_zmin;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_zmaxlabel»,«z maximum»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_zmaxarea»,d_zmax,d_left,d_top).onchange = f_zmax;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_label(d_panel,«d_viewdirlabel»,«view along x,y,z»,d_left,d_top);
d_left += d_xsize + d_xspace;
f_radio(d_panel,«d_xviewdirradio»,«d_viewdir»,0,d_viewdir,d_left,d_top).onclick = f_viewdir;//?onchange
d_left += d_ysize + d_xspace;
f_radio(d_panel,«d_yviewdirradio»,«d_viewdir»,1,d_viewdir,d_left,d_top).onclick = f_viewdir;//?onchange
d_left += d_ysize + d_xspace;
f_radio(d_panel,«d_zviewdirradio»,«d_viewdir»,2,d_viewdir,d_left,d_top).onclick = f_viewdir;//?onchange
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_minposlabel»,«min positive»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_minposarea»,d_minpos,d_left,d_top).onchange = f_minpos;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_mindistlabel»,«min distance»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_mindistarea»,d_mindist,d_left,d_top).onchange = f_mindist;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_velmullabel»,«velocity mul»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_velmularea»,d_velmul,d_left,d_top).onchange = f_velmul;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_kinmullabel»,«kinetic mul»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_kinmularea»,d_kinmul,d_left,d_top).onchange = f_kinmul;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_octsizelabel»,«octahedron size»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_octsizearea»,d_octsize,d_left,d_top).onchange = f_octsize;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_cubesizelabel»,«cube size»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_cubesizearea»,d_cubesize,d_left,d_top).onchange = f_cubesize;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_ownrigidlabel»,«own rigidity»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_ownrigidarea»,d_ownrigid,d_left,d_top).onchange = f_ownrigid;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_outrigidlabel»,«out rigidity»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_outrigidarea»,d_outrigid,d_left,d_top).onchange = f_outrigid;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_xforcelabel»,«force along x»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_xforcearea»,d_xforce,d_left,d_top).onchange = f_xforce;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_yforcelabel»,«force along y»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_yforcearea»,d_yforce,d_left,d_top).onchange = f_yforce;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_zforcelabel»,«force along z»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_zforcearea»,d_zforce,d_left,d_top).onchange = f_zforce;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_pointsizelabel»,«point size»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_pointsizearea»,d_pointsize,d_left,d_top).onchange = f_pointsize;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_octslabel»,«octahedrons»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_octsarea»,d_octs,d_left,d_top).onchange = f_octs;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_cubeslabel»,«cubes»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_cubesarea»,d_cubes,d_left,d_top).onchange = f_cubes;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_octmasslabel»,«oct point mass»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_octmassarea»,d_octmass,d_left,d_top).onchange = f_octmass;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_cubemasslabel»,«cub point mass»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_cubemassarea»,d_cubemass,d_left,d_top).onchange = f_cubemass;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,«d_msecslabel»,«msecs»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_msecsarea»,d_msecs,d_left,d_top).onchange = f_msecs;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,«d_timesteplabel»,«time step»,d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,«d_timesteparea»,d_timestep,d_left,d_top).onchange = f_timestep;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halfbutton(d_panel,«d_stepbutton»,«one step»,d_left,d_top).onclick = f_step;
d_left += (d_xsize / 2) + d_xspace;
f_halfbutton(d_panel,«d_runbutton»,«run model»,d_left,d_top).onclick = f_run;
d_left += (d_xsize / 2) + d_xspace;
f_halfbutton(d_panel,«d_pausebutton»,«pause»,d_left,d_top).onclick = f_pause;
d_left += (d_xsize / 2) + d_xspace;
f_halfbutton(d_panel,«d_createbutton»,«create»,d_left,d_top).onclick = f_createobjects;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halfbutton(d_panel,«d_loadbutton»,«load»,d_left,d_top).onclick = f_load;
d_left += (d_xsize / 2) + d_xspace;
f_halfbutton(d_panel,«d_savebutton»,«save»,d_left,d_top).onclick = f_save;
d_left += (d_xsize / 2) + d_xspace;
f_halfbutton(d_panel,«d_zeroimpbutton»,«0 impulse»,d_left,d_top).onclick = f_zeroimp;
d_left += (d_xsize / 2) + d_xspace;
f_halfbutton(d_panel,«d_mulekinbutton»,«mul Ekin»,d_left,d_top).onclick = f_mulekin;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halfbutton(d_panel,«d_getekinbutton»,«get Ekin»,d_left,d_top).onclick = f_getekin;
d_left += (d_xsize / 2) + d_xspace;
f_area(d_panel,«d_ekinarea»,0,d_left,d_top);
d_left += d_xsize + d_xspace;
f_halfbutton(d_panel,«d_setekinbutton»,«set Ekin»,d_left,d_top).onclick = f_setekin;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halfbutton(d_panel,«d_getepotbutton»,«get Epot»,d_left,d_top).onclick = f_getepot;
d_left += (d_xsize / 2) + d_xspace;
f_area(d_panel,«d_epotarea»,0,d_left,d_top);
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halfbutton(d_panel,«d_getenergybutton»,«get energy»,d_left,d_top).onclick = f_getenergy;
d_left += (d_xsize / 2) + d_xspace;
f_area(d_panel,«d_energyarea»,0,d_left,d_top);
d_top += d_ysize + d_yspace;
d_left = d_xspace;
d_area = document.createElement(«textarea»);
d_area.id = «d_modelarea»;
d_area.value = "";
d_area.style.left = d_xspace + «px»;
d_area.style.top = d_top + «px»;
d_area.style.width = (d_xsize * 2) + «px»;
d_area.style.height = (d_ysize * 6) + «px»;
d_area.style.position = «absolute»;
d_area.style.backgroundColor = «white»;
d_area.style.color = «black»;
d_area.style.FontSize = 16;
d_area.style.textAlign = «left»;
d_panel.appendChild(d_area);
return;
}
 

Evalmer
#56632 2023-06-02 10:56 GMT

А теперь то же самое, по-русски.