Тема: Вопросы
Показать сообщение отдельно
Старый 10.02.2010, 01:22   #1128
ZloyPetrushkO
Местный
 
Регистрация: 31.05.2008
Сообщений: 1,159
По умолчанию

да не вопрос)

начну с того что уже выкладывал и что переделал для атмосферного мода
а именно- ето скольжение с большими углами. неадыкват идет полнейший.

начнем вот с етого, со стабилика вертикального
вот тута значит код( в первых строчках кст мы видим тот самый скос потока от винта. это кстати нелпохо сделано имхо )
f1 = CT.getRudder() * (Sq.squareRudders >= 0.05F ? 28F : 0.0F);
float f11;
/* 707*/ if (EI.engines[0].getType() < 2) {
/* 708*/ f11 = -FMMath.RAD2DEG((float)Math.atan2(Vn.y - 0.5D * d4 * (double)EI.getPropDirSign(), Vn.x)) + SensYaw * rudderInfluence * f1;
} else {
/* 712*/ f11 = -FMMath.RAD2DEG((float)Math.atan2(Vn.y, Vn.x)) + SensYaw * rudderInfluence * f1;
}
/* 716*/ Cv.x = -d15 * (double)Tail.new_Cx(f11);
/* 717*/ Cv.y = d15 * (double)Tail.new_Cy(f11);
/* 718*/ Cv.z = 0.0D;
/* 720*/ if (!Realism.Stalls_N_Spins) {
/* 720*/ Cv.y += Cv.y;

}
/* 722*/ Vn.set(Vflow);


ну а подчеркнутым выделено то что нас интересует, собсна коэф-сопротивления на стабилике по углу скольжения.
если снять его показания на всех углах, выясниться что он растет постоянно, и его макс приходиться на 90 градусов.
короче на стабилике тупо нет отрыва
критический угол атаки есть, а критического угла сокльжения нет...

едем дальше)
фюзюляж у нас в дефолте не выделен в отдельное тело:
Cwl.y = -d * (double)Fusel.new_Cy(AOS);
/* 563*/ Cwl.x -= d * (double)Fusel.new_Cx(AOS);
/* 565*/ Cwr.y = -d * (double)Fusel.new_Cy(AOS);
/* 566*/ Cwr.x -= d * (double)Fusel.new_Cx(AOS);

силы с него беруться но плюсуються к крылу. имхо, ето делать низя, т.к. фокус крыла и фюзеляжа не совпадает по углу атаки и числу М
в итоге на углах атаки саомлет ведет ся странновато, т.к. появляються лишние моменты.

в дефолте какая то хренотня ( я не совсем вогнал ка кработает етот опертор) с воздушной и ветровой скоростью:
if (Realism.Wind_N_Turbulence) {
/* 442*/ World.wind().getVector(Loc, Vwind);
} else {
/* 443*/ Vwind.set(0.0D, 0.0D, 0.0D);
}
/* 444*/ Vair.sub(Vwld, Vwind);
/* 445*/ Or.transformInv(Vair, Vflow);

но ветер они планировали изначально...по ветру вообще заготовки были, там чтобы сделать постоянный ветер нужно всего 1-2 строчки дописать кода

еще по сокльжению...опять же, плечо растет по закону синуса. такого нам не надо, ибо на угле скольжения 90 град момента разворачивающего нет =)
double d22 = (double)Arms.GCENTER + (double)Arms.GC_FLAPS_SHIFT * d18 * (1.0D - d20) + (double)Arms.GC_AOA_SHIFT * d20;
/* 824*/ TmpV.set(-d22, (double)Arms.WING_MIDDLE * (1.3D + 1.0D * Math.sin(FMMath.DEG2RAD(AOS))), -Arms.GCENTER_Z);


немного не понял как там с весом, который распределяеться по шасси...но тут уж мб я затупил...
вообще, с трением скольжения покая-косячокс. или недоработка. грубочато сделано
вот они граничные условия
if (Gears.gearsChanged) {
/* 952*/ dryFriction = 1.0F;
}
/* 953*/ if (Gears.nOfPoiOnGr > 0) {
/* 953*/ dryFriction += 0.02F;
}
/* 954*/ if (dryFriction < 1.0F) {
/* 954*/ dryFriction = 1.0F;
}
/* 955*/ if (dryFriction > 32F) {
/* 955*/ dryFriction = 32F;
}
/* 956*/ float f18 = 4F * (0.25F - EI.getPowerOutput());
/* 957*/ if (f18 < 0.0F) {
/* 957*/ f18 = 0.0F;
}
/* 958*/ f18 *= f18;
/* 959*/ f18 *= dryFriction;
/* 960*/ float f19 = f18 * M.mass * M.mass;
/* 961*/ if (!brakeShoe && (Gears.nOfPoiOnGr == 0 && Gears.nOfGearsOnGr < 3 || f18 == 0.0F || SummM.lengthSquared() > (double)(2.0F * f19) || SummF.lengthSquared() > (double)(80F * f19) || W.lengthSquared() > (double)(0.00014F * f18) || Vwld.lengthSquared() > (double)(0.09F * f18))) {
в общем то привязка к скорости...т.е. едет там саомлет или нет...и на границе езды\стояния выходит бредовато...но ет мелочи =)


еще для всех самолетов одинаковая разрушающая перегрузка:

if (getOverload() > 13.5F && !Gears.onGround() && World.Rnd().nextInt(0, 100) > 98) {
/* 756*/ cutWing();
}
да и вообще, самолеты взрываються все на 1 скорости, на 1 скорости всем ломает шасси и т.п.


вот взрыв на 310 м\с
if (indSpeed > 310F) {
/* 792*/ if (World.cur().isDebugFM()) {
/* 792*/ System.out.println("*** Sonic overspeed....");
}
/* 793*/ flutter();
}


if (indSpeed > 180F) {
/* 765*/ if (World.Rnd().nextInt(0, 100) > 76) {
/* 766*/ ((Aircraft)actor).msgCollision(actor, "GearR2_D0", "GearR2_D0");
}
/* 767*/ if (World.Rnd().nextInt(0, 100) > 76) {
/* 768*/ ((Aircraft)actor).msgCollision(actor, "GearL2_D0", "GearL2_D0");
}

а вот заклинивание закрылок
if (indSpeed > 81F && CT.bHasFlapsControl && CT.FlapsControl > 0.21F && (indSpeed - 81F) * CT.getFlap() > 8F) {
/* 780*/ if (World.getPlayerAircraft() == actor && CT.bHasFlapsControl) {
/* 781*/ HUD.log("FailedFlaps");


но вот ети крайние пункты кст поправимы) мб займусь в будущем

в общем на 1 раз хватит...
скажу токо еще вот что. не все так плохо в иле. я бы сказал что много чего очень и очень хорошего. ето обнаруживалось с удивлением)))
и в большинстве своем сделано прально)
что интересует то, а то я так долго могу?
ZloyPetrushkO вне форума   Ответить с цитированием