Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2012, 13:32   #1
РоманБ
Новичок
Джуниор
 
Регистрация: 21.03.2012
Сообщений: 4
Сообщение

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

з.ы. я в программинге вообще чайник, но по роду деятельности (наука) необходимо создать вот такую модель

пример кода:

21 тысяча знаков (
весь код не буду добавлять


Последний раз редактировалось ACE Valery; 22.03.2012 в 23:54.
РоманБ вне форума Ответить с цитированием
Старый 22.03.2012, 13:37   #2
РоманБ
Новичок
Джуниор
 
Регистрация: 21.03.2012
Сообщений: 4
По умолчанию

далее и далее
Тут рисуем сам трек


Код:
void TUser:: Draw(void)
{
  double X,Y,PHI;

  Clear();
  SetPenColor(Schwarz);
    //View(40,40,400,300);
  Scale (-450.,850.,0.0);

    SetBrushColor(Hellgrau);
    SetPenColor(Grau);
  //  Rectangle(0.,0.,800.,600.);

    //Aussenkreis

  // Дорожное покрытие
//  SetPenSize(0);
//  SetBrushColor(Gruen);
//  Rectangle(10,0,GetMaxW(),GetMaxH()/2);

    ClearPoints();
    PolyKurve(614.,436.,0.,90.,155.);       //Kurve rechts oben

    SetPoint(614.,531.);
    //<==Ausschnitt oben==
    PolyKurve(166.,436.,90.,180.,95.);
    PolyKurve(121.,425.,180.,225.,50.);
    PolyKurve(213.,272.,45.,0.,41.,29.);
    PolyKurve(273.,168.,180.,320.,19.);
    PolyKurve(320.,253.,-30.,20.,25.);
    PolyKurve(305.,270.,35.,75.,25.);
    PolyKurve(316.,394.,240.,70.,90.,20);
    PolyKurve(670.,429.,250.,360.,39.);
    PolyKurve(614.,436.,0.,90.,95.);
    //==Ausschnitt oben==>
    SetPoint(614.,591.);

    PolyKurve(166.,436.,90.,180.,155.);     //Kurve links oben
    PolyKurve(159.,157.,180.,270.,148.);    //Kurve links unten

    SetPoint(159.,69.);
    //<==Ausschnitt unten==
    PolyKurve(637.,141.,270.,360.,72.);
    PolyKurve(692.,153.,0.,120.,17.);
    PolyKurve(540.,164.,315.,200.,110.,61.);
    PolyKurve(386.,175.,45.,145.,23.);
    PolyKurve(278.,143.,315.,240.,50.);
    PolyKurve(135.,188.,240.,180.,18.);
    PolyKurve(87.,288.,0.,45.,30.);
    SetPoint(71.,334.);
    PolyKurve(159.,157.,180.,270.,88.);
    //==Ausschnitt unten==>
    SetPoint(159.,9.);

    PolyKurve(637.,141.,270.,360.,132.);    //Kurve rechts unten

    SetPoint(769.,309.);
    //<==Ausschnitt rechts==
    PolyKurve(691.,309.,0.,180.,19.);

    SetPoint(672.,309.);
    SetPoint(612.,309.);
    //<==Ausschnitt mitte==
    PolyKurve(592.,320.,0.,70.,20.);
    PolyKurve(316.,394.,70.,240.,30.);
    PolyKurve(326.,260.,55.,35.,80.);
    PolyKurve(510.,210.,210.,240.,40.,35.);
    PolyKurve(540.,216.,240.,360.,72.,50.);
    //==Ausschnitt mitte==>
    SetPoint(612.,309.);
    SetPoint(672.,309.);

    PolyKurve(691.,254.,180.,360.,19.);
    //==Ausschnitt rechts==>
    SetPoint(710.,309.);
    SetPoint(769.,309.);

    SetPenColor(Grau);
    SetBrushColor(Grau);
    Poly();


  //Strassenanfang
  SetPenSize(4);
  MoveTo(x0-sin(phi0)*2,y0+cos(phi0)*2);
  LineTo(x0+sin(phi0)*2,y0-cos(phi0)*2);

  SetPenColor(Hellgrau);
  SetPenSize(15);

 //Strassenstьck
  strasse *S;


void TUser::PolyKurve (double x, double y, double anfgrad, double endgrad, double r1, int schritte) {
    PolyKurve(x,y,anfgrad,endgrad,r1,r1,schritte);
}

void TUser::PolyKurve (double x, double y, double anfgrad, double endgrad, double r1, double r2, int schritte) {
    double i;
    for (i=anfgrad; abs(i-anfgrad)<=abs(endgrad-anfgrad); i+=(endgrad-anfgrad)/schritte)
        SetPoint(x+r1*cos(GradToRad(i)),y+r2*sin(GradToRad(i)));
}

Последний раз редактировалось ACE Valery; 22.03.2012 в 23:53.
РоманБ вне форума Ответить с цитированием
Старый 22.03.2012, 13:39   #3
РоманБ
Новичок
Джуниор
 
Регистрация: 21.03.2012
Сообщений: 4
По умолчанию

а тут указываем маршрут движения авто


Код:
void TUser::BildMouseDown(int x, int y)
{
	double KoX_End=IntToX(x);
	double KoY_End=IntToY(y);

	double phi_,x_,y_;
	double M1 = x0;
	double M2 = y0;
	double M3 = phi0;


	strasse *S;
	S = anfang->next;

	while (S!=NULL)
	{
		if (S->R!=0)
		{
			phi_=M3-S->L/S->R;
			x_ = M1+sin(M3)*S->R+cos(M3+M_PI/2.0-S->L/S->R)*S->R;
			y_ = M2-cos(M3)*S->R+sin(M3+M_PI/2.0-S->L/S->R)*S->R;
		}
		else
		{
			x_ = M1 + cos(M3)*S->L;
			y_ = M2 + sin(M3)*S->L;
			phi_ = M3;
		}

         printf("x=%4f, y=%4f :: x0=%f y0=%f phi0=%f \n", KoX_End, KoY_End, x0, y0, phi0);
         printf("S->L=%f, S->R=%f :: x_=%f y_=%f phi_=%f \n", S->L, S->R, x_, y_, phi_);

	 M1 = x_;
	 M2 = y_;
         M3 = phi_;

	 S = S->next;
	}
	double D=sqrt((KoX_End-M1)*(KoX_End-M1)+(KoY_End-M2)*(KoY_End-M2));
	double alpha= atan2(KoY_End-M2,KoX_End-M1);
        printf("alpha=%f\n", alpha);
	double R=-D/(2*sin(alpha-M3));
	double L=-2*R*2*atan(tan((alpha-M3)/2));

        new_street(R, L);
	Draw();
}




//---------------------------------------------------------------------------
void TUser:: Finish(void){
    ResetStrassen();
}

Последний раз редактировалось ACE Valery; 22.03.2012 в 23:54.
РоманБ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
движение автомобиля - проблемы с условием завершения цикла repeat в Delphi Artem_host Помощь студентам 6 08.02.2012 07:59
продажа автомобиля ольгару Помощь студентам 2 29.01.2011 14:39
Проектирование Тренажера Автомобиля в DELPHI Sergeo_89 Помощь студентам 0 13.01.2010 22:26
Покупка автомобиля - как вложение денег Alar Свободное общение 28 07.04.2008 13:37