Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  173

•  TDictionary Custom Sort  3 344

•  Fast Watermark Sources  3 095

•  3D Designer  4 853

•  Sik Screen Capture  3 351

•  Patch Maker  3 556

•  Айболит (remote control)  3 665

•  ListBox Drag & Drop  3 020

•  Доска для игры Реверси  81 750

•  Графические эффекты  3 948

•  Рисование по маске  3 253

•  Перетаскивание изображений  2 633

•  Canvas Drawing  2 762

•  Рисование Луны  2 586

•  Поворот изображения  2 196

•  Рисование стержней  2 173

•  Paint on Shape  1 570

•  Генератор кроссвордов  2 242

•  Головоломка Paletto  1 771

•  Теорема Монжа об окружностях  2 238

 

 

Архив исходников

   
  Базы данных
  Графика & Мультимедиа
  Сети & Интернет
  Система
  Разное
   

Ссылки и Баннеры ...

 

Delphi Sources

Delphi Sources

 




 

ИСХОДНИК ПРОГРАММЫ

 

. : FlatLand Piano Movers : .

 

Delphi - Как переместить пианино, чтобы оно прошло по коридору

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

Это сложнее, чем может показаться, поскольку FlatLand - это двухмерный мир. Фортепиано FlatLand - это прямоугольники разных размеров. Строительные нормы FlatLand требуют, чтобы все повороты в коридорах были поворотами под прямым углом, и запрещают Т-образные пересечения. Можно предположить, что каждая часть коридора достаточно длинна, чтобы другие углы или двери в комнаты не влияли на движение за поворот. Вы также можете предположить, что пианино уже, чем ширина любого коридора.

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

Эмпирическое решение: поворачивайте пианино за угол небольшими шагами, прижимая 2 угла пианино к внешней стороне коридора, а затем проверьте, не пересекает ли другая сторона внутренний угол.

Функция Intersect применятеся для того, чтобы увидеть, пересекает ли линия от внешнего до внутреннего угла коридора (Line2) нижнюю длинную сторону пианино (Line1). Если да, то все хорошо. Если нет, значит, нижняя длинная сторона пианино попыталась прорезать угол, и пианино застряло. На диаграмме просто показано вычисление координат для Line1. Если A - это угол, на который пианино было повернуто от вертикали (и внешний угол коридоров находится на [0,0], то нижние углы пианино находятся на [ L * sin (A) + W * (cos (A), W * sin (A)] и [W * cos (A), L * cos (A) + W * sin (A)]. Для коридоров шириной CW1 и CW2, внутренний угол (другой конец отрезка Line2, находится в [CW1, CW2].

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

Просмотры: 702
Дата: 06.07.2021, Автор: Gary Darby
Скачивания: 6
Написать сообщение:

 

Скачать (5 Кб)     Регистрация >>

 

© 2004-2024 "DS"

Соглашение пользователя / Реклама / Карта сайта             Created by BrokenByte Software