Exemple #1
0
//==========================================================================*
// 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;
	}
  }