//==========================================================================* // Create a smooth lane //--------------------------------------------------------------------------* void TClothoidLane::MakeSmoothPath( TTrackDescription* Track, TParam& Param, const TOptions& Opts) { TCarParam* CarParam = &Param.oCarParam; if (Opts.Side) CarParam = &Param.oCarParam2; TLane::Initialise(Track, Param.Fix, *CarParam, Opts.MaxL, Opts.MaxR); oCount = Track->Count(); //const int Count = Track->Count(); int FwdRange = 110; CalcFwdAbsCrv(FwdRange); const int Delta = 25; const int L = 8; int Step = 1; // Initialize step width while (Step * 16 < oCount) // Find largest step width Step *= 2; while (Step > 0) { for (int I = 0; I < L; I++) OptimisePath(Step, Delta, 0); Step >>= 1; } if (Opts.BumpMod) { AnalyseBumps(false); Step = 1; Step <<= ANALYSE_STEPS; while (Step > 0) { for (int I = 0; I < L; I++) { OptimisePath(Step, Delta, Opts.BumpMod); CalcCurvaturesZ(); CalcFwdAbsCrv(FwdRange); CalcMaxSpeeds(Step); PropagateBreaking(Step); PropagateAcceleration(Step); } Step >>= 1; } }
//==========================================================================* // Create a smooth lane //--------------------------------------------------------------------------* void TClothoidLane::MakeSmoothPath( TTrackDescription* Track, TParam& Param, const TOptions& Opts) { TCarParam& CarParam = Param.oCarParam; oBase = Opts.Base; oBaseFactor = Opts.BaseFactor; if (Opts.MaxR < FLT_MAX) LaneType = ltLeft; else if (Opts.MaxL < FLT_MAX) LaneType = ltRight; else LaneType = ltFree; if (Opts.Side) { LogSimplix.debug("Switch to CarParam2\n"); CarParam = Param.oCarParam2; } TLane::Initialise(Track, Param.Fix, CarParam, Opts.MaxL, Opts.MaxR); const int Count = Track->Count(); int FwdRange = 110; CalcFwdAbsCrv(FwdRange); const int Delta = 25; int L = 8; int Step = 1; // Initialize step width while (Step * 16 < Count) // Find largest step width Step *= 2; LogSimplix.debug("OptimisePath:\n"); while (Step > 0) { LogSimplix.debug("Step: %d\n",Step); for (int I = 0; I < L; I++) { OptimisePath(Step, Delta, 0, Param.oCarParam.oUglyCrvZ); } Step >>= 1; } if (Opts.BumpMod) { LogSimplix.debug("AnalyseBumps:\n"); AnalyseBumps(false); //AnalyseBumps(true); Step = 1; Step <<= ANALYSE_STEPS; while (Step > 0) { LogSimplix.debug("Step: %d\n",Step); for (int I = 0; I < L; I++) { OptimisePath(Step, Delta, Opts.BumpMod, Param.oCarParam.oUglyCrvZ); CalcCurvaturesZ(); CalcFwdAbsCrv(FwdRange); CalcMaxSpeeds(Step); PropagateBreaking(Step); PropagateAcceleration(Step); } Step >>= 1; } }