improve airresistance
This commit is contained in:
parent
7ece405b8b
commit
0b1c282921
|
@ -17,7 +17,7 @@ long lastRoutineUpdate=0;
|
|||
#define ROUTINEUPDATETIME 20
|
||||
long lastCheckspawn=0;
|
||||
#define CHECKSPAWNDELAY 4000 //delay in ms to check random spawn
|
||||
#define SPAWNCHANCE 30 //1 out of x times wagon will spawn
|
||||
#define SPAWNCHANCE 20 //1 out of x times wagon will spawn
|
||||
#define SPAWNCHANCEDOUBLE 5 //change of spawning a two trains simultaneously
|
||||
|
||||
long loopmillis=0;
|
||||
|
|
17
wagon.cpp
17
wagon.cpp
|
@ -15,7 +15,7 @@ Wagon::Wagon(int id,int numpixels, Adafruit_NeoPixel *strip,uint8_t *height,floa
|
|||
_height=height;
|
||||
_vel=startvel;
|
||||
_acc=startacc;
|
||||
_wagonmass=wagonmass;
|
||||
_wagonmass=wagonmass; //mass of whole train
|
||||
_spawntime=millis();
|
||||
_lasttimefast=millis();
|
||||
_wagoncolor=wagoncolor;
|
||||
|
@ -46,7 +46,9 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
#define CONST_G 9.81
|
||||
#define PIXELDISTANCE 1.6666667 // 1/60.0 * 100
|
||||
#define C_ROLL 0.001 // = Croll * G https://de.wikipedia.org/wiki/Rollwiderstand 0.001
|
||||
#define AIRRES 0.18 //C_w*A*0.5*rho Air resistance: C_w * A * 0.5 * rho (.... *v^2)
|
||||
#define AIRRESFIRST 0.18 //C_w*A*0.5*rho Air resistance: C_w * A * 0.5 * rho (.... *v^2)
|
||||
#define AIRRES 0.01 //for slipstream at second wagon
|
||||
#define AIRRESMUL 0.7 //how much of air resistance the next wagon has
|
||||
//http://www.kfz-tech.de/Biblio/Formelsammlung/Luftwiderstand.htm C_w 0.6
|
||||
//rho Massendichte luft 1,2041
|
||||
//A = 1m^2
|
||||
|
@ -55,6 +57,7 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
|
||||
_acc=0;
|
||||
int cpos=(int)_pos;
|
||||
uint8_t wagonnumber=0;
|
||||
for (int cpos=(int)_pos;cpos>(int)(_pos-_trainlength);cpos--){ //for each wagon
|
||||
|
||||
float hdiff=getHeight((int) (cpos-0.5)) - getHeight((int)(cpos+0.5));
|
||||
|
@ -74,7 +77,13 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
if (_vel<0){
|
||||
bb*=-1;
|
||||
}
|
||||
float cc=AIRRES/m*pow(_vel,2); //air resistance
|
||||
float cc=0;
|
||||
if (wagonnumber==0){ //first wagon
|
||||
cc=AIRRESFIRST/m*pow(_vel,2); //air resistance for first wagon
|
||||
}else{
|
||||
cc=AIRRES/m*pow(_vel,2) *pow(AIRRESMUL,wagonnumber-1); //air resistance
|
||||
|
||||
}
|
||||
if (_vel<0){
|
||||
cc*=-1;
|
||||
}
|
||||
|
@ -86,7 +95,7 @@ void Wagon::updatePhysics(float updatedelayms)
|
|||
|
||||
_acc += aa - bb - cc;
|
||||
|
||||
|
||||
wagonnumber++;
|
||||
}
|
||||
|
||||
_acc*=updatedelayms/1000;
|
||||
|
|
Loading…
Reference in New Issue