А что, у многих локомотивов она уже убираемая ( любой лок, у которого есть дневная и ночная кабины)
А что, у многих локомотивов она уже убираемая ( любой лок, у которого есть дневная и ночная кабины)
Путь длиной в тысячу миль пройден на треть.
Попробовал я сам покататься на модифицированной качалке.
Изменения в том, что я в зависимости от интервала скорости ставил ту или иную величину поправки к амплитуде. В итоге небольшая умеренная качка появилась на малых скоростях (там, где ее раньше не было и машина ехала не естественно ровно), а на большой скорости качка не стала чрезмерно выколбашивать кабину. В итоге качка как бы уравнялась - на маленьких скоростях чуть увеличилась, на больших скоростях поубавилась. Все изменения в коде пометил красным.
Может кто-нибудь попробует на 2тэ116 или на каком нибудь другом локе, а потом отпишется тут как и что в итоге получилось?
thread void K_loop() // качание
{
Bogey[] bog_l= GetBogeyList();
float R_level=0;
float J_level=0;
float ampl_const = 0.00035; // амплитуду регулируем этой переменной.
while(1)
{
float veh_vel=Math.Fabs(GetVelocity())*3.6; // для расчета амплитуды берем скорость
if (veh_vel>30 and veh_vel<60) ampl_const = 0.00025;
if (veh_vel>60) ampl_const = 0.00015;
if(veh_vel>10) // с какой скорости начинаем качку
{
float maxAmpl=0.15*Math.Fmin(ampl_const*(veh_vel-20),0.045); //формула регулировки апмлитуды
R_level=R_level+Math.PI*Math.Rand(0.10,0.15);
int a= (int)(R_level/(2*Math.PI));
R_level=R_level-2*a*Math.PI;
float value1=maxAmpl* sin(R_level);
SetMeshOrientation("default",0,value1,0);
bog_l[0].SetMeshOrientation("default",0,-value1,0);
bog_l[1].SetMeshOrientation("default",0,-value1,0);
J_level=J_level+Math.PI*Math.Rand(0.11,0.13);
a= (int)(J_level/(2*Math.PI));
J_level=J_level-2*a*Math.PI;
maxAmpl=maxAmpl*1.2;
value1=maxAmpl*sin(J_level);
SetMeshTranslation("default",0,0,value1);
bog_l[0].SetMeshTranslation("default",0,0,-value1);
bog_l[1].SetMeshTranslation("default",0,0,-value1);
}
else
if(veh_vel<10)
{
SetMeshOrientation("default",0,0,0);
SetMeshTranslation("default",0,0,0);
}
Sleep(0.05);
}
}
Последний раз редактировалось proton2; 02.02.2013 в 17:20.
Сделано наспех - сделано на смех!
Боря, попробуй ввести увеличение амплитуды и частоты при проезде леверов. Как расширение можно создать маркеры состояния пути, в соответствии со значением которых выбиралась бы амплитуда и частота. Мысль - на деревянном пути ход мягче, поэтому амплитуда больше, а частота чуть меньше. На бетонных наоборот.
А какие виды перемещений в этом скрипте? Вертикальные, горизонтальные поперечные? А вращательные вдоль оси кузова?
[B]Уже давно не ищу чертежи и размеры кабины ТЭ10М[/B]
Спасибо за идею! Однако я не умею считывать информацию о том, какой объект пути мы проехали. Если тут кто-нибудь это покажет, тогда нам всем будет что попробовать.
Корпус, телеги и кабина вращаются на заданную величину вокруг оси У и одновременно подпрыгивают и опускаются по оси Z.
Величина смещения и ротации рассчитывается в зависимости от скорости и величины поправки.
Сделано наспех - сделано на смех!
proton2, попробуй вот такую настройку. Это настройка Вовиной конфигурации.
Код:float sin(float x) { int a= (int)(x/(2*Math.PI)); x=x-2*a*Math.PI; a=1; if(Math.PI<x and x<=2*Math.PI) { x=x-Math.PI; a=-a; } if(Math.PI/2<x and x<=Math.PI) { x=Math.PI-x; } return a*(x-x*x*x/6+x*x*x*x*x/120-x*x*x*x*x*x*x/5040+x*x*x*x*x*x*x*x*x/362880); } thread void K_loop() { Bogey[] bog_l= GetBogeyList(); float R_level=0; float J_level=0; bool IsNight=false; int j=0; Bogey[] bog=GetBogeyList(); while(1) { j++; bool j_work=false; bool TZ_work=false; float veh_vel=Math.Fabs(GetVelocity())*3.6; if(veh_vel>10) { float maxAmpl=0.33*Math.Fmin(0.00015*(veh_vel-20),0.045); //амплитуду менять тут R_level=R_level+Math.PI*Math.Rand(0.07,0.12); int a= (int)(R_level/(2*Math.PI)); R_level=R_level-2*a*Math.PI; float value1=maxAmpl* sin(R_level); SetMeshOrientation("default",0,value1,0); bog_l[0].SetMeshOrientation("default",0,-value1,0); bog_l[1].SetMeshOrientation("default",0,-value1,0); J_level=J_level+Math.PI*Math.Rand(0.06,0.11); a= (int)(J_level/(2*Math.PI)); J_level=J_level-2*a*Math.PI; maxAmpl=maxAmpl*2.18; value1=maxAmpl*sin(J_level); SetMeshTranslation("default",0,0,value1); bog_l[0].SetMeshTranslation("default",0,0,-value1); bog_l[1].SetMeshTranslation("default",0,0,-value1); } else if(veh_vel>19) { SetMeshOrientation("default",0,0,0); SetMeshTranslation("default",0,0,0); } if(j>300) j=0; Sleep(0.035); } }
Trainz 2012, T:ANE - AURAN Registered license. "Пилите, Шура, она золотая"
Думаю, нужны поперечные горизонтальные перемещения (ось Х, да?).
Кстати, я давно думал на одну тему. Огромный шаг в реалистичности был бы, если имитировать перемещения головы машиниста, вызванные ускорениями кабины по трём осям. Суть идеи в том, что на голову машиниста действуют две противоположные силы - ускорения перемещения кабины и обратного ускорения головы машиниста из-за инерции. Их результирует коэффициент упругости тела машиниста. Если бы оно было абсолютно упругим (жёстко связывало кабину и голову), то голова полностью повторяла бы ускорения кабины. Если бы оно было абсолютно неупругим (связь головы с кабиной отсутствовала), оно бы полностью подчинялось силе инерции и не повторяла бы перемещения кабины. Подбирая коэффициент, добиваемся оптимального соотношения сил.
[B]Уже давно не ищу чертежи и размеры кабины ТЭ10М[/B]
А в чём, получается, состоит чисто техническое отличие в способах задания качки, для того чтобы голова машиниста двигалась и не двигалась?
Ты имеешь в виду, почему сейчас кабина качается, а камера - нет?
[B]Уже давно не ищу чертежи и размеры кабины ТЭ10М[/B]
наклон камеры относительно горизонта не поддерживается. Но вот в 12ой версии кабина и камера качаются синхронно (если раскачивать кузов), в результате возникает "дрожание" (за счёт ошибок округления при рендеринге изменившегося положения камеры с положением камины). В 2010ой камера была неподвижной.
Так что да, в 12ке, если отвязать точку кабины от кузова, и написать алгоритм синхронизации кузова и кабины, можно раскачивать камеру (голову машиниста) отдельно от всего остального, двигая отвязанную точку привязки кабины.