Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движения двух закрашенных окружностей 
:(
    Опции темы
werta
Дата 12.3.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.11.2006

Репутация: нет
Всего: нет




Доброе время суток!!!

 не могу сообразить как написать программу : 2 закрашенные окружности двигаться на форме. Отражается от всех его четырех сторон формы  и от препятствия в виде прямоугольника, расположенного точно в центре прямоугольника, под углом 45о Рис.1.
параметры: 
Система координат - Начало в левом верхнем углу экрана. 
Цвет окружности - Черный, желтый
Размеры  Scale - 180X100


user posted image


PM MAIL   Вверх
Naghual
Дата 12.3.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



У тебя ДВА прямоугольника:  1 - Форма, 2 - Препятствие.

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

Математика достаточно проста.   

Движение: Инкрементация Х и У в зависимости от траектории (начальная траектория задана).
После определения будущей точки, проверяеш на вхождение в один из прямоугольников. Если вышла за первый или влезла во второй, меняем соответственно траекторию.





--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Кирилл
Дата 12.3.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 7.11.2006
Где: Воронеж

Репутация: 1
Всего: 1



Примерно так:
Код

For i = 0 To 1
        Shp(i).Move Shp(i).Left + 50 * a(i), Shp(i).Top + 50 * b(i)
        If Shp(i).Left < 50 Or Shp(i).Left > Form1.Width - Shp(i).Width - 50 Then a(i) = a(i) * (-1)
        If Shp(i).Top < 50 Or Shp(i).Top > Form1.Height - Shp(i).Height - 50 Then b(i) = b(i) * (-1)
        If Shp(i).Left < Form1.Width / 2 + 550 And Shp(i).Left > Form1.Width / 2 - 550 And Shp(i).Top > Form1.Height / 2 - 500 And Shp(i).Top < Form1.Height / 2 + 500 Then
            a(i) = a(i) * (-1)
        End If
        If Shp(i).Left < Form1.Width / 2 + 500 And Shp(i).Left > Form1.Width / 2 - 500 And Shp(i).Top > Height / 2 - 550 And Shp(i).Top < Height / 2 - 550 Then b(i) = b(i) * (-1)
    Next i

Хотя с прямоугольником немного не так ;)
PM MAIL   Вверх
Akina
Дата 12.3.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



1) Считать надо движение центра.
2) Внешний контур надо заузить, а прямоугольник растянуть - и считать движение центра как точки.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Naghual
Дата 12.3.2007, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Akina, Исходя из этого я и писал.  smile

Это сообщение отредактировал(а) Naghual - 12.3.2007, 22:38


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
werta
Дата 14.3.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



Naghual, с пасибо!!!! я так и думала, но сомнилась. smile

Кирилл, smile спасибо!!!!!!! большое!!!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.