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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2015, 19:56   #1
Yuliya1995
Новичок
Джуниор
 
Регистрация: 17.12.2015
Сообщений: 2
По умолчанию реализовать движение шарика по параболе на С++.Надо, чтобы шарик двигался внутри формы и отталкивался от стенок

Помогите, пожалуйста, реализовать движение шарика по параболе на С++.Надо, чтобы шарик двигался внутри формы и отталкивался от стенок.
Код:
pragma endregion
	public:

		
		   float Vx = 100;
		   float t = 0;
		   float a = 70 * 3.1415926536 / 180;
		   float l = 1;
		   float x;
		   float y;
		    float x1;
			float y1;
			float w1;
			float h1;
			float dy;
			float dx;
			int dt;
			//int da;


	private: System::Void MyForm_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
	{
			




	}
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
	{
				 x1 = 0;
				 y1 = 0;
				 w1 = 30;
				 h1 = 30;
	}
	private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
				

				 if (y1 > (this->Height - h1) || y1<(0))
					 //da = -da;
					 //dt = -dt;
					 dy = -dy;
				 if (x1>(this->Width - w1) || x1 < (0))
					 //t = -t;
					 //da = -da;
					 // = t + dt;
					 dx = -dx;
					 
					 //a = a + da;
					
				 y1 = dy + y1;
				 x1 = dx + x1;
				 t += 0.1f*l;
				 x1=Vx*t*cosf(a);
				 y1=Vx*t*sinf(a) - 9.8*t*t / 2;
				 //y1 = x1*tanf(a)+((9.8 / (2 * Vx*Vx*cosf(a)*cosf(a)))*x*x);

				
	             Graphics^ g = CreateGraphics();
				
				 
				 g->Clear(Color::Black);
				 Pen^mypen = gcnew Pen(Color::Blue, 2);
				 SolidBrush^mybrush = gcnew SolidBrush(Color::Yellow);
				 Rectangle rect = Rectangle(x1, y1, w1, h1);

				 g->DrawEllipse(mypen, rect);
				 g->FillEllipse(mybrush, rect);



	}
	private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {

				 //da = 1;
			     dt= 1;
				 dx = 0.05;
				 dy = 0.05;
				 if (timer1->Enabled)
				 {
					 timer1->Enabled = false;
					 button2->Text = "Start";
					



				 }
				 else{
					 timer1->Enabled = true;
					 button2->Text = "Stop";
					


				 }
	}
	};
}

Последний раз редактировалось Stilet; 17.12.2015 в 23:03.
Yuliya1995 вне форума Ответить с цитированием
Старый 17.12.2015, 20:39   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

И чего не получается то?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 18.12.2015, 14:38   #3
Yuliya1995
Новичок
Джуниор
 
Регистрация: 17.12.2015
Сообщений: 2
По умолчанию Другой код

это была не парабола. Вот переделала, но теперь не отражается от боковой стенки формы!
Код:
#pragma endregion
	public:
		//float Vx = 100;
		//float t = 0;
		//float a = 70 * 3.1415926536 / 180;
		//float l = 1;
		int x1;
		int y1;
		int w1 ;
		int h1 ;
		int a;
		int i;
	    double h ;
	
		int dx = 1;
		//int dt = 0;
		//int da;


	private: System::Void MyForm_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
	{
				 Graphics^ g = CreateGraphics();
				
				 Pen^mypen = gcnew Pen(Color::Blue, 2);
				 SolidBrush^mybrush = gcnew SolidBrush(Color::Yellow);
				 Rectangle rect = Rectangle(x1, y1, w1, h1);

				 g->DrawEllipse(mypen, rect);
				 g->FillEllipse(mybrush, rect);





	}
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
	{
				 x1 =0;
				 y1 = 0;
				 w1 = 20;
				 h1 = 20;
				 a = 1;
				 i = 0;
				 h = this->Height;
				 
	}
			 int h5 = 0;
	private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
				
				 if (y1 > this->Height - h1){

						 i = i + 2;

					 }
				

				 if (x1 > this->Width - w1 || x1 < 0)
					 {
						 dx = -dx;
						 i = i - 2;
						
					 }
				
				 
					
					
				 //t = -t;
				 //da = -da;
				 //t = t + dt;
				 //a = a + da;

				// t += 0.1f*l;
					 
						 x1 += dx;
						 y1 = a*(x1 - i*sqrt(h / a))*(x1 - i*sqrt(h / a));  //this->Height - h1 - 
                   (x1 - this->Width / 2) * (x1 - this->Width / 2) * 0.0005);
					 
				 //x1 = Vx*t*cosf(a);
				 //y1 = Vx*t*sinf(a) - 9.8*t*t / 2;
				 this->Refresh();


				



	}
	private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {

				 //da = 1;
				 //dt= 1;
				 //dx = 0.05;
				 //dy = 0.05;
				 if (timer1->Enabled)
				 {
					 timer1->Enabled = false;
					 button2->Text = "Start";




				 }
				 else{
					 timer1->Enabled = true;
					 button2->Text = "Stop";



				 }
	}
	};
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Stilet; 18.12.2015 в 15:42.
Yuliya1995 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста, надо сделать движение шарика под углом. Димоновичч Паскаль, Turbo Pascal, PascalABC.NET 7 22.12.2013 00:49
движение шарика и отскок от стенок legendary Помощь студентам 5 26.05.2012 14:44
Движение объекта по параболе revaldo666 Общие вопросы C/C++ 1 13.01.2012 08:04
ДВИЖЕНИЕ ШАРА ПО ПАРАБОЛЕ.КОСЯК С ТАЙМЕРОМ. azbin Помощь студентам 0 26.05.2011 23:36
движение изображения с зеркальным отображением от стенок nev Помощь студентам 6 11.06.2007 21:38