Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

А вообще идея такая: есть линия ("земля"), есть два квадрата - каждый описывается 4-мя парами чисел (координаты углов). Соединяющие их отрезки тоже понадобятся, например между (x1,y1) и (x2,y2) получится (y-y1)/(y2-y1)=(x-x1)/(x2-x1). Будут еще две точки - соприкосновения нижнего квадрата с землей и квадратов между собой (например r1 и r2).  
Теперь примерный алгоритм действий:  
Задаем начальное положение квадратов, задав координаты вершин.  
Затем в цикле:  
1. Поворачиваем нижний квадрат на малый угол вокруг r1 - пересчитываем координаты его углов, а также точки r2. Переписываем соединяющие их отрезки.  
2. Определяем, на сколько сдвинулась точка r2 по x и у (назовем dx и dy).  
3. Для координат вершин верхнего квадрата делаем параллельный перенос на (dx,dy) и поворот на малый угол вокруг r2.  
4. Самое трудоемкое и вычислительнозатратное - проверяем, не уперся ли какой квадрат каким-нибудь своим углом в сторону другого квадрата или в землю (для этого и надо знать уравнения сторон квадратов). Если вдруг уперся - вычисляем новые r1 и/или r2 для следующей итерации.  
5. Затираем картинку на экране и рисуем новую. В win32 процесс небыстрый (стандартный graph в FPC притормаживает и заметно мерцает, а openGL в TP7 нет). Может, если скомпилировать TP и запустить под чистым дос, будет быстрее? Достать TP7 и попробовать на dosbox, что ли...  
 
Повторяем цикл, пока не надоест. Как-то так...  
 
P.S. перенос делается просто:  
x'=x+dx, y'=y+dy  
поворот на угол w вокруг точки (x0,y0) посложнее:  
x'=(x-x0)*cos(w)-(y-y0)*sin(w)+x0, y'=(x-x0)*sin(w)+(y-y0)*cos(w)+y0  

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 18:37 22-12-2011 | Исправлено: dimitriy7, 18:42 22-12-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru