Автор Тема: Точечная модель газов и жидкостей  (Прочитано 996 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #40 : 11 Январь 2023, 13:16:15 »
////// cleanpoints
function f_cleanpoints()
{
var d_nextdiv;
var d_nextpoint;
if(p_points == null)
return;
var d_div = d_field.firstChild;
var d_point = 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;
}
p_points = 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_cleanpoints();
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_cleanpoints();
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_cleanpoints();
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_cleanpoints();
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_cleanpoints();
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_cleanpoints();
return;
}
}//1
this.value = d_zmax;
return;
}

Большой Форум

Re: Точечная модель газов и жидкостей
« Ответ #40 : 11 Январь 2023, 13:16:15 »
Загрузка...

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #41 : 11 Январь 2023, 13:16:49 »
////// showpoints
function f_showpoints()
{
var d_left,d_top;
if(p_points == null)
return;
var d_div = d_field.firstChild;
var d_point = p_points;
var d_xextent = d_xmax - d_xmin;
var d_yextent = d_ymax - d_ymin;
var d_zextent = d_zmax - d_zmin;
for(;;)
{//1
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
{//2
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";
}
}//2
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
d_div = d_div.nextSibling;
}//1
return;
}
////// viewdir
function f_viewdir()
{
var d_new = Number(this.value);
if(d_new == d_viewdir)
return;
d_viewdir = d_new;
f_showpoints();
return;
}
////// methods
function f_methods()
{
if(d_methods.style.visibility == "visible")
{
d_methods.style.visibility = "hidden";
return;
}
d_methods.style.visibility = "visible";
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #42 : 11 Январь 2023, 13:17:20 »
////// minpos
function f_minpos()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_minpos) 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)
{
if(d_new != d_mindist) d_mindist = d_new;
return;
}
}//1
this.value = d_mindist;
return;
}
////// xforce
function f_xforce()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{
if(d_new != d_xforce) 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)
{
if(d_new != d_yforce) 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)
{
if(d_new != d_zforce) 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_newpointsize == 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_showpoints();
return;
}//3
}//2
}//1
this.value = d_pointsize;
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #43 : 11 Январь 2023, 13:17:51 »
////// reds
function f_reds()
{
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_reds)
return;
d_reds = d_new;
f_cleanpoints();
return;
}
}//2
}//1
this.value = d_reds;
return;
}
////// blues
function f_blues()
{
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_blues)
return;
d_blues = d_new;
f_cleanpoints();
return;
}
}//2
}//1
this.value = d_blues;
return;
}
////// redmass
function f_redmass()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == d_redmass)
return;
d_redmass = d_new;
if(p_points == null)
return;
var d_point = p_points;
for(;;)
{
if(d_point.d_type == 1) d_point.d_mass = d_redmass;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
return;
}//2
}//1
this.value = d_redmass;
return;
}
////// bluemass
function f_bluemass()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{//2
if(d_new == d_bluemass)
return;
d_bluemass = d_new;
if(p_points == null)
return;
var d_point = p_points;
for(;;)
{
if(d_point.d_type == 2) d_point.d_mass = d_bluemass;
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}
return;
}//2
}//1
this.value = d_bluemass;
return;
}
////// velmul
function f_velmul()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_velmul) 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)
{
if(d_new != d_kinmul) d_kinmul = d_new;
return;
}
}//1
this.value = d_kinmul;
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))
{
if(d_new != d_msecs) 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)
{
if(d_new != d_timestep) d_timestep = d_new;
return;
}
}//1
this.value = d_timestep;
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #44 : 11 Январь 2023, 13:18:20 »
////// adjustpoint
function f_adjustpoint(d_div,d_point)
{
var d_sx,d_sy,d_sz;
var d_dx,d_dy,d_dz;
var d_left,d_top;
var d_xextent = d_xmax - d_xmin;
if(d_xextent <= d_minpos) d_point.d_sx = (d_xmin + d_xmax) / 2;
else
{//1
d_sx = d_point.d_sx;
if(d_sx < d_xmin)
{//2
d_dx = d_xmin - d_sx;
d_dx -= Math.floor(d_dx / d_xextent) * d_xextent;
if(d_xclose != 0) d_sx = d_xmax - d_dx;
else
{
d_sx = d_xmin + d_dx;
if(d_point.d_vx < 0) d_point.d_vx = - d_point.d_vx;
}
d_point.d_sx = d_sx;
}//2
else
{//2
if(d_sx > d_xmax)
{//3
d_dx = d_sx - d_xmax;
d_dx -= Math.floor(d_dx / d_xextent) * d_xextent;
if(d_xclose != 0) d_sx = d_xmin + d_dx;
else
{
d_sx = d_xmax - d_dx;
if(d_point.d_vx > 0) d_point.d_vx = - d_point.d_vx;
}
d_point.d_sx = d_sx;
}//3
}//2
}//1
var d_yextent = d_ymax - d_ymin;
if(d_yextent <= d_minpos) d_point.d_sy = (d_ymin + d_ymax) / 2;
else
{//1
d_sy = d_point.d_sy;
if(d_sy < d_ymin)
{//2
d_dy = d_ymin - d_sy;
d_dy -= Math.floor(d_dy / d_yextent) * d_yextent;
if(d_yclose != 0) d_sy = d_ymax - d_dy;
else
{
d_sy = d_ymin + d_dy;
if(d_point.d_vy < 0) d_point.d_vy = - d_point.d_vy;
}
d_point.d_sy = d_sy;
}//2
else
{//2
if(d_sy > d_ymax)
{//3
d_dy = d_sy - d_ymax;
d_dy -= Math.floor(d_dy / d_yextent) * d_yextent;
if(d_yclose != 0) d_sy = d_ymin + d_dy;
else
{
d_sy = d_ymax - d_dy;
if(d_point.d_vy > 0) d_point.d_vy = - d_point.d_vy;
}
d_point.d_sy = d_sy;
}//3
}//2
}//1
var d_zextent = d_zmax - d_zmin;
if(d_zextent <= d_minpos) d_point.d_sz = (d_zmin + d_zmax) / 2;
else
{//1
d_sz = d_point.d_sz;
if(d_sz < d_zmin)
{//2
d_dz = d_zmin - d_sz;
d_dz -= Math.floor(d_dz / d_zextent) * d_zextent;
if(d_zclose != 0) d_sz = d_zmax - d_dz;
else
{
d_sz = d_zmin + d_dz;
if(d_point.d_vz < 0) d_point.d_vz = - d_point.d_vz;
}
d_point.d_sz = d_sz;
}//2
else
{//2
if(d_sz > d_zmax)
{//3
d_dz = d_sz - d_zmax;
d_dz -= Math.floor(d_dz / d_zextent) * d_zextent;
if(d_zclose != 0) d_sz = d_zmin + d_dz;
else
{
d_sz = d_zmax - d_dz;
if(d_point.d_vz > 0) d_point.d_vz = - d_point.d_vz;
}
d_point.d_sz = d_sz;
}//3
}//2
}//1
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_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_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_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_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_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_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;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #45 : 11 Январь 2023, 13:18:48 »
////// elastic
//interaction axis is drawen from first point to second
//v1 - v2 always > 0, collision force F > 0
//v1'(new) = v1(old) - dt * F / m1, v2'(new) = v2(old) + dt * F / m2
//kinetic energy (/2): m1 * v1'^2 + m2 * v2'^2 = m1 * v1^2 + m2 * v2^2
//F * dt = m1 * m2 * 2 * (v1 - v2) / (m1 + m2)
function f_elastic(d_point1,d_point2)
{
var d_sign,d_cosx,d_cosy,d_cosz;
var d_dx = d_point2.d_sx - d_point1.d_sx;
var d_dy = d_point2.d_sy - d_point1.d_sy;
var d_dz = d_point2.d_sz - d_point1.d_sz;
var d_dist = Math.sqrt((d_dx * d_dx) + ((d_dy * d_dy) + (d_dz * d_dz)));
if(d_dist > d_mindist)
return;
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;
}//1
else
{
d_cosx = d_dx / d_dist;
d_cosy = d_dy / d_dist;
d_cosz = d_dz / d_dist;
}
var d_v1 = (d_point1.d_vx * d_cosx) + ((d_point1.d_vy * d_cosy) + (d_point1.d_vz * d_cosz));
var d_v2 = (d_point2.d_vx * d_cosx) + ((d_point2.d_vy * d_cosy) + (d_point2.d_vz * d_cosz));
if(d_v1 <= d_v2)
return;
var d_m1 = d_point1.d_mass;
var d_m2 = d_point2.d_mass;
var d_vmul = (2 * (d_v1 - d_v2)) / (d_m1 + d_m2);
var d_vmul1 = d_m2 * d_vmul;
var d_vmul2 = d_m1 * d_vmul;
d_point1.d_vx -= d_vmul1 * d_cosx;
d_point1.d_vy -= d_vmul1 * d_cosy;
d_point1.d_vz -= d_vmul1 * d_cosz;
d_point2.d_vx += d_vmul2 * d_cosx;
d_point2.d_vy += d_vmul2 * d_cosy;
d_point2.d_vz += d_vmul2 * d_cosz;
return;
}
////// force12
function f_force12(d_dist)
{
var d_rc,d_rmindivrpow6;
if(d_action == 4)//morse
{
var d_exp = Math.exp(- (d_morseexp * (d_dist - d_morsermin)));
return (d_morseemin * (2 * d_morseexp)) * (d_exp * (d_exp - 1));
}
if(d_action == 3)//buckingham
{
var d_num1 = d_bucka * Math.exp(- (d_buckb * d_dist));
var d_num2 = d_buckc / Math.pow(d_dist,6);
return (d_buckb * d_num1) - ((6 / d_dist) * d_num2);
}
if(d_action != 2)
return 0;
//lennard-johns
if(d_johnscut != 0)
{
d_rc = d_johnsrmin * (2.5 / Math.pow(2,1/6));
if(d_dist > d_rc)
return 0;
d_rmindivrpow6 = Math.pow(d_johnsrmin / d_dist,6);
return (d_johnsemin * (12 / d_dist)) * (d_rmindivrpow6 * (d_rmindivrpow6 - 1));
}
if(d_johnssplines != 0)
{//1
var d_rs = d_johnsrmin * Math.pow(13/7,1/6);
d_rc = d_rs * (67/48);
if(d_dist > d_rc)
return 0;
if(d_dist > d_rs)
{
var d_rs2 = d_rs * d_rs;
var d_k3 = - ((387072/61009) / (d_rs2 * d_rs));
var d_k2 = - ((24192/3211) / d_rs2);
var d_dif = d_dist - d_rc;
var d_dif2 = d_dif * d_dif;
return (- d_johnsemin) * (((3 * d_k3) * d_dif2) + ((2 * d_k2) * d_dif));
}
}//1
d_rmindivrpow6 = Math.pow(d_johnsrmin / d_dist,6);
return (d_johnsemin * (12 / d_dist)) * (d_rmindivrpow6 * (d_rmindivrpow6 - 1));
}
////// upot12
function f_upot12(d_dist)
{
var d_rc,d_rmindivrpow6;
if(d_action == 4)//morse
{
var d_exp = Math.exp(- (d_morseexp * (d_dist - d_morsermin)));
return (d_morseemin * d_exp) * (d_exp - 2);
}
if(d_action == 3)//buckingham
return (d_bucka * Math.exp(- (d_buckb * d_dist))) - (d_buckc / Math.pow(d_dist,6));
if(d_action != 2)
return;
//lennard-johns
if(d_johnscut != 0)
{
d_rc = d_johnsrmin * (2.5 / Math.pow(2,1/6));
if(d_dist > d_rc)
return 0;
d_rmindivrpow6 = Math.pow(d_johnsrmin / d_dist,6);
var d_04pow6 = Math.pow(0.4,6);
return d_johnsemin * ((d_rmindivrpow6 * (d_rmindivrpow6 - 2)) - (4 * (d_04pow6 * (d_04pow6 - 1))));
}
if(d_johnssplines != 0)
{//1
var d_rs = d_johnsrmin * Math.pow(13/7,1/6);
d_rc = d_rs * (67/48);
if(d_dist > d_rc)
return 0;
if(d_dist > d_rs)
{
var d_rs2 = d_rs * d_rs;
var d_k3 = - ((387072/61009) / (d_rs2 * d_rs));
var d_k2 = - ((24192/3211) / d_rs2);
var d_dif = d_dist - d_rc;
var d_dif2 = d_dif * d_dif;
return d_johnsemin * ((d_k3 * (d_dif2 * d_dif)) + (d_k2 * d_dif2));
}
}//1
d_rmindivrpow6 = Math.pow(d_johnsrmin / d_dist,6);
return d_johnsemin * (d_rmindivrpow6 * (d_rmindivrpow6 - 2));
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #46 : 11 Январь 2023, 13:19:34 »
////// impekin
function f_impekin()
{
var d_pointmass;
if(p_points == null)
return;
var d_mass = 0;
var d_mvx = 0;
var d_mvy = 0;
var d_mvz = 0;
var d_oldekin = 0;
var d_point = 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;
}
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_point = 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;
}
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_point = 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;
}
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #47 : 11 Январь 2023, 13:20:38 »
////// process
function f_process()
{
var d_div;
var d_point1,d_point2;
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_fx,d_fy,d_fz;
var d_f,d_u1,d_u2,d_du;
var d_dx,d_dy,d_dz,d_dist;
var d_sign,d_cosx,d_cosy,d_cosz;
var d_signx,d_signy,d_signz;
if(p_points == null)
return;
var d_firstdiv = d_field.firstChild;
if(d_action == 1)//elastic
{//1
//interactions between points
d_point1 = p_points;
for(;;)
{
//no interaction twice
for(d_point2 = d_point1.d_nextpoint;d_point2 != null;d_point2 = d_point2.d_nextpoint) f_elastic(d_point1,d_point2);
d_point1 = d_point1.d_nextpoint;
if(d_point1 == null)
break;
}
d_div = d_firstdiv;
d_point1 = p_points;
d_fmul = (d_timestep * d_timestep) / 2;
for(;;)
{
d_point1.d_sx += d_point1.d_vx * d_timestep;
d_point1.d_sy += d_point1.d_vy * d_timestep;
d_point1.d_sz += d_point1.d_vz * d_timestep;
d_mass = d_point1.d_mass;
d_amul = d_fmul / d_mass;
d_point1.d_sx += d_xforce * d_amul;
d_point1.d_sy += d_yforce * d_amul;
d_point1.d_sz += d_zforce * d_amul;
d_vmul = d_timestep / d_mass;
d_point1.d_vx += d_xforce * d_vmul;
d_point1.d_vy += d_yforce * d_vmul;
d_point1.d_vz += d_zforce * d_vmul;
f_adjustpoint(d_div,d_point1);
d_point1 = d_point1.d_nextpoint;
if(d_point1 == null)
break;
d_div = d_div.nextSibling;
}
return;
}//1

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #48 : 11 Январь 2023, 13:21:38 »
d_div = d_firstdiv;
d_point1 = p_points;
d_fmul = (d_timestep * d_timestep) / 2;
for(;;)
{//1
d_sx0 = d_point1.d_sx;
d_sy0 = d_point1.d_sy;
d_sz0 = d_point1.d_sz;
d_fx = d_xforce;
d_fy = d_yforce;
d_fz = d_zforce;
d_u1 = 0;
for(d_point2 = p_points;d_point2 != null;d_point2 = d_point2.d_nextpoint)
{//2
if(d_point2 == d_point1)
continue;
d_dx = d_point2.d_sx - d_sx0;
d_dy = d_point2.d_sy - d_sy0;
d_dz = d_point2.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)
{//3
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;
}//3
else
{
d_cosx = d_dx / d_dist;
d_cosy = d_dy / d_dist;
d_cosz = d_dz / d_dist;
}
d_f = f_force12(d_dist);
d_fx -= d_f * d_cosx;
d_fy -= d_f * d_cosy;
d_fz -= d_f * d_cosz;
d_u1 += f_upot12(d_dist);
}//2
d_mass = d_point1.d_mass;
d_amul = d_fmul / d_mass;
d_vx = d_point1.d_vx;
d_vy = d_point1.d_vy;
d_vz = d_point1.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)
{//2
d_cosx = d_dx / d_dist;
d_cosy = d_dy / d_dist;
d_cosx = d_dx / d_dist;
d_u2 = 0;
for(d_point2 = p_points;d_point2 != null;d_point2 = d_point2.d_nextpoint)
{
if(d_point2 == d_point1)
continue;
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_u2 += f_upot12(d_dist);
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #49 : 11 Январь 2023, 13:22:01 »
d_du = d_u2 - d_u1;
for(;;)
{//3
if(d_du != 0)
{//4
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
{//5
d_vx2 = (d_vx * d_vx) - ((d_du * (d_cosx * d_cosx)) * (2 / d_mass));
if(d_vx2 < 0)
{
d_point1.d_vx = - d_vx;
d_point1.d_vy = - d_vy;
d_point1.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_point1.d_vx = - d_vx;
d_point1.d_vy = - d_vy;
d_point1.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_point1.d_vx = - d_vx;
d_point1.d_vy = - d_vy;
d_point1.d_vz = - d_vz;
break;
}
}//5
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(;;)
{//5
if(d_vx > 0)
{ d_signx = 1; break; }
if(d_vx < 0)
{ d_signx = -1; break; }
if(d_point1.d_vx > 0)
{ d_signx = 1; break; }
if(d_point1.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;
}//5
for(;;)
{//5
if(d_vy > 0)
{ d_signy = 1; break; }
if(d_vy < 0)
{ d_signy = -1; break; }
if(d_point1.d_vy > 0)
{ d_signy = 1; break; }
if(d_point1.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;
}//5
for(;;)
{//5
if(d_vz > 0)
{ d_signz = 1; break; }
if(d_vz < 0)
{ d_signz = -1; break; }
if(d_point1.d_vz > 0)
{ d_signz = 1; break; }
if(d_point1.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;
}//5
d_point1.d_vx = d_signx * Math.sqrt(d_vx2);
d_point1.d_vy = d_signy * Math.sqrt(d_vy2);
d_point1.d_vz = d_signz * Math.sqrt(d_vz2);
}//4
if(d_sx <= d_xmin)
{
if(d_point1.d_vx < 0) d_point1.d_vx = - d_point1.d_vx;
}
else
{//4
if(d_sx >= d_xmax)
{
if(d_point1.d_vx > 0) d_point1.d_vx = - d_point1.d_vx;
}
}//4
if(d_sy <= d_ymin)
{
if(d_point1.d_vy < 0) d_point1.d_vy = - d_point1.d_vy;
}
else
{//4
if(d_sy >= d_ymax)
{
if(d_point1.d_vy > 0) d_point1.d_vy = - d_point1.d_vy;
}
}//4
if(d_sz <= d_zmin)
{
if(d_point1.d_vz < 0) d_point1.d_vz = - d_point1.d_vz;
}
else
{//4
if(d_sz >= d_zmax)
{
if(d_point1.d_vz > 0) d_point1.d_vz = - d_point1.d_vz;
}
}//4
d_point1.d_sx = d_sx;
d_point1.d_sy = d_sy;
d_point1.d_sz = d_sz;
break;
}//3
}//2
f_adjustpoint(d_div,d_point1);
d_point1 = d_point1.d_nextpoint;
if(d_point1 == null)
break;
d_div = d_div.nextSibling;
}//1
f_impekin();
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #50 : 11 Январь 2023, 13:22:31 »
////// 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;
}
////// createpoints
function f_createpoints()
{
var d_index,d_limit;
var d_div;
var d_point,d_prevpoint;
var d_x,d_y,d_z;
var d_w,d_h
var d_left,d_top;
f_cleanpoints();
var d_dx = d_xmax - d_xmin;
var d_dy = d_ymax - d_ymin;
var d_dz = d_zmax - d_zmin;
d_limit = d_reds;
for(d_index = 0;d_index < d_limit;d_index++)
{//1
d_point = new Object();//?
d_x = Math.random();
d_y = Math.random();
d_z = Math.random();
d_point.d_sx = d_xmin + (d_x * d_dx);
d_point.d_sy = d_ymin + (d_y * d_dy);
d_point.d_sz = d_zmin + (d_z * d_dz);
d_point.d_vx = ((Math.random() * 2) - 1) * d_velmul;
d_point.d_vy = ((Math.random() * 2) - 1) * d_velmul;
d_point.d_vz = ((Math.random() * 2) - 1) * d_velmul;
d_point.d_mass = d_redmass;
d_point.d_type = 1;
d_point.d_nextpoint = null;
if(p_points == null) p_points = d_point;
else d_prevpoint.d_nextpoint = d_point;
d_prevpoint = d_point;
delete d_point;//?
d_div = document.createElement("div");
if(d_viewdir == 2) { d_w = d_x; d_h = d_y; }//x right,y down
else
{
if(d_viewdir == 1) { d_w = d_z; d_h = d_x; }//z right,x down
else { d_w = d_y; d_h = d_z; }//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";
d_div.style.backgroundColor = "red";
d_field.appendChild(d_div);
}//1
d_limit = d_blues;
for(d_index = 0;d_index < d_limit;d_index++)
{//1
d_point = new Object();//?
d_x = Math.random();
d_y = Math.random();
d_z = Math.random();
d_point.d_sx = d_xmin + (d_x * d_dx);
d_point.d_sy = d_ymin + (d_y * d_dy);
d_point.d_sz = d_zmin + (d_z * d_dz);
d_point.d_vx = ((Math.random() * 2) - 1) * d_velmul;
d_point.d_vy = ((Math.random() * 2) - 1) * d_velmul;
d_point.d_vz = ((Math.random() * 2) - 1) * d_velmul;
d_point.d_mass = d_bluemass;
d_point.d_type = 2;
d_point.d_nextpoint = null;
if(p_points == null) p_points = d_point;
else d_prevpoint.d_nextpoint = d_point;
d_prevpoint = d_point;
delete d_point;//?
d_div = document.createElement("div");
if(d_viewdir == 2) { d_w = d_x; d_h = d_y; }//x right,y down
else
{
if(d_viewdir == 1) { d_w = d_z; d_h = d_x; }//z right,x down
else { d_w = d_y; d_h = d_z; }//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";
d_div.style.backgroundColor = "blue";
d_field.appendChild(d_div);
}//1
return;
}
////// 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;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #51 : 11 Январь 2023, 13:23:09 »
////// load
function f_load()
{
var d_char,d_num,d_numstr;
var d_div;
var d_point,d_prevpoint;
var d_area = document.getElementById("d_modelarea");
var d_str = d_area.value;
if(d_str.length < 1)
return;
f_cleanpoints();
var d_index = 0;
var d_limit = d_str.length;
var d_error = 0;
for(;d_index < d_limit;d_index++)
{//1
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
continue;
d_div = document.createElement("div");
d_field.appendChild(d_div);
d_point = new Object();//?
d_point.d_nextpoint = null;
if(p_points == null) p_points = d_point;
else d_prevpoint.d_nextpoint = d_point;
d_prevpoint = d_point;
if(d_char == 'r')
{
d_div.style.backgroundColor = "red";
d_point.d_mass = d_redmass;
d_point.d_type = 1;
}
else
{//2
if(d_char != 'b')
{
d_area.value = "unexpected char: " + d_char;
d_error = 1;
break;
}
d_div.style.backgroundColor = "blue";
d_point.d_mass = d_bluemass;
d_point.d_type = 2;
}//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
{
d_area.value = "wsc expected, not this char: " + d_char;
d_error = 1;
break;
}
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}//2
if(d_error != 0)
break;
d_numstr = String(d_char);//?String
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}//2
if(d_error != 0)
break;
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
{
d_area.value = "sx is incorrect";
d_error = 1;
break;
}
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

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #52 : 11 Январь 2023, 13:23:38 »
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}//2
if(d_error != 0)
break;
d_numstr = String(d_char);//?String
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}//2
if(d_error != 0)
break;
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
{
d_area.value = "sy is incorrect";
d_error = 1;
break;
}
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(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}//2
if(d_error != 0)
break;
d_numstr = String(d_char);//?String
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}//2
if(d_error != 0)
break;
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
{
d_area.value = "sz is incorrect";
d_error = 1;
break;
}
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

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #53 : 11 Январь 2023, 13:24:08 »
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}//2
if(d_error != 0)
break;
d_numstr = String(d_char);//?String
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}//2
if(d_error != 0)
break;
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
{
d_area.value = "vx is incorrect";
d_error = 1;
break;
}
d_point.d_vx = Number(d_num);//?Number
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}//2
if(d_error != 0)
break;
d_numstr = String(d_char);//?String
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) != 0)
break;
d_numstr += d_char;
}//2
if(d_error != 0)
break;
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
{
d_area.value = "vy is incorrect";
d_error = 1;
break;
}
d_point.d_vy = Number(d_num);//?Number
for(;;)
{//2
d_index++;
if(d_index >= d_limit)
{
d_area.value = "unexpected end";
d_error = 1;
break;
}
d_char = d_str.charAt(d_index);
if(f_testwsc(d_char) == 0)
break;
}//2
if(d_error != 0)
break;
d_numstr = String(d_char);//?String
for(;;)
{//2
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;
}//2
if(d_error != 0)
break;
d_num = Number(d_numstr);
if(Number.isFinite(d_num) == 0)
{
d_area.value = "vz is incorrect";
d_error = 1;
break;
}
d_point.d_vz = Number(d_num);//?Number
delete d_point;//?
d_div.style.width = d_pointsize + "px";
d_div.style.height = d_pointsize + "px";
d_div.style.position = "absolute";
}//1
if(d_error == 0)
{
f_showpoints();
return;
}
f_cleanpoints();
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #54 : 11 Январь 2023, 13:24:35 »
////// save
function f_save()
{
if(p_points == null)
return;
var d_point = p_points;
var d_str = "";
for(;;)
{//1
for(;;)
{//2
if(d_point.d_type == 1) d_str += "r ";
else
{
if(d_point.d_type != 2)
break;
d_str += "b ";
}
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";
break;
}//2
d_point = d_point.d_nextpoint;
if(d_point == null)
break;
}//1
var d_area = document.getElementById("d_modelarea");
d_area.value = d_str;
return;
}
////// zeroimp
function f_zeroimp()
{
var d_pointmass;
if(p_points == null)
return;
var d_mass = 0;
var d_mvx = 0;
var d_mvy = 0;
var d_mvz = 0;
var d_point = 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_mvx /= d_mass;
d_mvy /= d_mass;
d_mvz /= d_mass;
d_point = 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;
}
return;
}
////// mulekin
function f_mulekin()
{
if(p_points == null)
return;
var d_point = p_points;
var d_rootmul = Math.sqrt(d_kinmul);
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;
}
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #55 : 11 Январь 2023, 13:25:02 »
////// getekin
function f_getekin()
{
if(p_points == null)
return;
var d_point = p_points;
var d_newekin = 0;
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;
}
var d_area = document.getElementById("d_ekinarea");
if(Number.isFinite(d_newekin) == 0)
{
d_area.value = "infinity";
return;
}
d_area.value = d_newekin;
return;
}
////// setekin
function f_setekin()
{
if(p_points == 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 < d_minpos)
return;
var d_point = p_points;
var d_oldekin = 0;
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;
}
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_point = 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;
}
return;
}
////// getepot
function f_getepot()
{
var d_point2;
var d_dx,d_dy,d_dz,d_dist;
var d_area = document.getElementById("d_epotarea");
if(p_points == null)
{
d_area.value = 0;
return;
}
var d_upot = 0;
var d_point1 = p_points;
for(;;)
{//1
//no interaction twice
for(d_point2 = d_point1.d_nextpoint;d_point2 != null;d_point2 = d_point2.d_nextpoint)
{
d_dx = d_point2.d_sx - d_point1.d_sx;
d_dy = d_point2.d_sy - d_point1.d_sy;
d_dz = d_point2.d_sz - d_point1.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_upot12(d_dist);
}
d_point1 = d_point1.d_nextpoint;
if(d_point1 == null)
break;
}//1
if(Number.isFinite(d_upot) != 0)
{
d_area.value = d_upot;
return;
}
d_area.value = "undefined";
return;
}
////// getenergy
function f_getenergy()
{
var d_point2;
var d_dx,d_dy,d_dz,d_dist;
var d_area = document.getElementById("d_energyarea");
if(p_points == null)
{
d_area.value = 0;
return;
}
var d_ukin = 0;
var d_upot = 0;
var d_point1 = p_points;
for(;;)
{//1
d_ukin += (d_point1.d_mass / 2) * ((d_point1.d_vx * d_point1.d_vx) + ((d_point1.d_vy * d_point1.d_vy) + (d_point1.d_vz * d_point1.d_vz)));
//no interaction twice
for(d_point2 = d_point1.d_nextpoint;d_point2 != null;d_point2 = d_point2.d_nextpoint)
{
d_dx = d_point2.d_sx - d_point1.d_sx;
d_dy = d_point2.d_sy - d_point1.d_sy;
d_dz = d_point2.d_sz - d_point1.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_upot12(d_dist);
}
d_point1 = d_point1.d_nextpoint;
if(d_point1 == null)
break;
}//1
if(Number.isFinite(d_upot) != 0)
{//1
if(Number.isFinite(d_ukin) != 0)
{//2
var d_energy = d_ukin + d_upot;
if(Number.isFinite(d_energy) != 0)
{
d_area.value = d_energy;
return;
}
}//2
}//1
d_area.value = "undefined";
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #56 : 11 Январь 2023, 13:25:29 »
////// action
function f_action()
{
var d_new = Number(this.value);
if(d_new != d_action) d_action = d_new;
return;
}
////// johnsemin
function f_johnsemin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_johnsemin) d_johnsemin = d_new;
return;
}
}//1
this.value = d_johnsemin;
return;
}
////// johnsrmin
function f_johnsrmin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_johnsrmin) d_johnsrmin = d_new;
return;
}
}//1
this.value = d_johnsrmin;
return;
}
////// bucka
function f_bucka()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_bucka) d_bucka = d_new;
return;
}
}//1
this.value = d_bucka;
return;
}
////// buckb
function f_buckb()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_buckb) d_buckb = d_new;
return;
}
}//1
this.value = d_buckb;
return;
}
////// buckc
function f_buckc()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_buckc) d_buckc = d_new;
return;
}
}//1
this.value = d_buckc;
return;
}
////// morseemin
function f_morseemin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_morseemin) d_morseemin = d_new;
return;
}
}//1
this.value = d_morseemin;
return;
}
////// morsermin
function f_morsermin()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_morsermin) d_morsermin = d_new;
return;
}
}//1
this.value = d_morsermin;
return;
}
////// morseexp
function f_morseexp()
{
var d_new = Number(this.value);
if(Number.isFinite(d_new) != 0)
{//1
if(d_new > 0)
{
if(d_new != d_morseexp) d_morseexp = d_new;
return;
}
}//1
this.value = d_morseexp;
return;
}

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #57 : 11 Январь 2023, 13:25:55 »
////// 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;

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #58 : 11 Январь 2023, 13:26:22 »
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,"d_xcloselabel","x closed",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_check(d_panel,"d_xclosecheck",d_xclose,d_left,d_top).onchange = function()
{ if(this.checked == false) { d_xclose = 0; return; } d_xclose = 1; return; }//?onclick
d_left += d_ysize + d_xspace;
f_halflabel(d_panel,"d_ycloselabel","y closed",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_check(d_panel,"d_yclosecheck",d_yclose,d_left,d_top).onchange = function()
{ if(this.checked == false) { d_yclose = 0; return; } d_yclose = 1; return; }//?onclick
d_left += d_ysize + d_xspace;
f_halflabel(d_panel,"d_zcloselabel","z closed",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_check(d_panel,"d_zclosecheck",d_zclose,d_left,d_top).onchange = function()
{ if(this.checked == false) { d_zclose = 0; return; } d_zclose = 1; return; }//?onclick
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_left += (d_ysize * 2) + d_xspace;
f_halfbutton(d_panel,"d_methodsbutton","methods",d_left,d_top).onclick = f_methods;
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_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;

Оффлайн computAI

  • Прирождённый оратор
  • ***
  • Сообщений: 179
  • Страна: ua
  • Рейтинг: +3/-0
Re: Точечная модель газов и жидкостей
« Ответ #59 : 11 Январь 2023, 13:26:55 »
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,"d_redslabel","red points",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,"d_redsarea",d_reds,d_left,d_top).onchange = f_reds;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,"d_blueslabel","blue points",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,"d_bluesarea",d_blues,d_left,d_top).onchange = f_blues;
d_top += d_ysize + d_yspace;
d_left = d_xspace;
f_halflabel(d_panel,"d_redmasslabel","red mass",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,"d_redmassarea",d_redmass,d_left,d_top).onchange = f_redmass;
d_left += (d_xsize / 2) + d_xspace;
f_halflabel(d_panel,"d_bluemasslabel","blue mass",d_left,d_top);
d_left += (d_xsize / 2) + d_xspace;
f_halfarea(d_panel,"d_bluemassarea",d_bluemass,d_left,d_top).onchange = f_bluemass;
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_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_createpoints;
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);

Большой Форум

Re: Точечная модель газов и жидкостей
« Ответ #59 : 11 Январь 2023, 13:26:55 »
Loading...