|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.05.2014, 22:07 | #1 |
Новичок
Джуниор
Регистрация: 29.05.2014
Сообщений: 2
|
Windows Forms C++ Хаотичное движение частицы
Помогите решить задачу:
Частица (от заданной начальной точки) совершает хаотичное движение, двигаясь в случайном направлении на случайное расстояние (в пределах экрана). Получить на экране траекторию движения частицы до прерывания с клавиатуры (трением и потере энергии при ударах о границы пренебречь) |
29.05.2014, 23:12 | #2 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
В чем проблема то? Давайте то что наработали
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
30.05.2014, 09:41 | #3 |
Новичок
Джуниор
Регистрация: 29.05.2014
Сообщений: 2
|
вот, все что есть
в панельке указываешь координаты где она находиться будет расчитывается угол и вроде такойже на который от удара об стенку дожна она переместится private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventA rgs^ e) { Graphics ^g = panel1->CreateGraphics(); g->FillEllipse(Brushes::White, myPoint.X, myPoint.Y, 5, 5); } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Graphics ^g = panel1->CreateGraphics(); g->Clear(Color::Green); myPoint = Point(Convert::ToInt32(textBox1->Text), Convert::ToInt32(textBox2->Text)); g->FillEllipse(Brushes::White, myPoint.X, myPoint.Y, 5, 5); } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Graphics ^g = panel1->CreateGraphics(); g->Clear(Color::Green); g->FillEllipse(Brushes::White, myPoint.X, myPoint.Y, 5, 5); timer1->Enabled = true; } private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { Random ^rand = gcnew Random(); int distance = rand->Next(1000); int angle = rand->Next(360); Graphics ^g = panel1->CreateGraphics(); SolidBrush ^point = gcnew SolidBrush(Color::Black); while(distance > 0) { int a1,a2,a3,a4; a1 = Math::Atan2(myPoint.Y, panel1->Width - myPoint.X); a2 = Math::PI + Math::Atan2(myPoint.Y, myPoint.X); a3 = Math::PI + Math::Atan2(panel1->Height - myPoint.Y, myPoint.X); a4 = 2 * Math::PI + Math::Atan2(panel1->Height - myPoint.Y,panel1->Width - myPoint.X); if (a1 < angle && a2 > angle) { //1 int dy = myPoint.Y; int dx = dy / Math::Tan(angle); int d = Math::Sqrt(dx * dx + dy * dy); distance = distance - d; angle = 1 / 2 * Math::PI + angle; } else if (a2 < angle && a3 > angle) { //2 int dx = myPoint.X; int dy = dx * Math::Tan(angle); int d = Math::Sqrt(dx * dx + dy * dy); distance = distance - d; angle = 1 / 2 * Math::PI + angle; } else if (a3 < angle && a4 > angle) { //3 int dy = panel1->Height - myPoint.Y; int dx = dy / Math::Tan(angle); int d = Math::Sqrt(dx * dx + dy * dy); distance = distance - d; angle = 1 / 2 * Math::PI + angle; } else { //4 int dx = panel1->Width - myPoint.X; int dy = dx * Math::Tan(angle); int d = Math::Sqrt(dx * dx + dy * dy); distance = distance - d; angle = 1 / 2 * Math::PI + angle; } } } private: System::Void Form1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEve ntArgs^ e) { timer1->Enabled = false; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
с# windows forms | Илья2014 | Windows Forms | 2 | 15.02.2014 22:38 |
Windows Forms С++ | Aleks1994 | Помощь студентам | 2 | 04.04.2013 18:40 |
Хаотичное расположение картинок | Putin-mode | Общие вопросы Delphi | 4 | 02.09.2012 10:52 |
Windows Forms | masashama | Windows Forms | 12 | 14.02.2011 16:14 |
windows.forms | *stRong* | Помощь студентам | 0 | 04.06.2010 04:39 |