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

•  DeLiKaTeS Tetris (Тетрис)  1 762

•  TDictionary Custom Sort  4 316

•  Fast Watermark Sources  4 005

•  3D Designer  6 178

•  Sik Screen Capture  4 258

•  Patch Maker  4 802

•  Айболит (remote control)  4 728

•  ListBox Drag & Drop  3 832

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

•  Графические эффекты  5 038

•  Рисование по маске  4 081

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

•  Canvas Drawing  3 728

•  Рисование Луны  3 504

•  Поворот изображения  3 043

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

•  Paint on Shape  2 038

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

•  Головоломка Paletto  2 230

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

 

 

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

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

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

 

Delphi Sources

Delphi Sources

 




 

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

 

. : Где моя тень : .

 

Delphi - Программа отображает отбрасываемые тени, когда солнце находится на заданном азимуте и высоте

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

Можно изменять точку обзора, регулируя азимут, высоту и расстояние от основания стержня.

Немного позднее была добавлена возможность построить «аналемму» - фигуру, представляющую путь солнца, наблюдаемый из фиксированного места и времени суток в течение всего года. Поскольку земля наклонена относительно пути вокруг Солнца, и поскольку его путь немного эллиптический, аналемма или ее теневая версия отображает кривую фигуру 8. Точки азимута и высоты можно вводить индивидуально и нажимать кнопку «Построить точку тени». Лучшим методом является создание текстового файла значений азимута и высоты, по одной паре на строку, и использование кнопки «Загрузить аналемму» для загрузки и построения данных. Файл «Образец Analemma.txt», включенный в загрузку, содержит 24 значения полудня 1 и 15 числа каждого месяца для моего родного города.

Заметки для программистов

Я хотел бы дать вам краткий анализ математики, лежащей в основе рисования трехмерного теневого вида, но факт в том, что для рисования изображений было много проб и ошибок. Всего существует шесть параметров: азимут и высота определяют направление солнца от определенного места на земной поверхности в «горизонтальной системе координат». Азимут - это угол по часовой стрелке от севера, а высота - это угол над горизонтом. Третий параметр, влияющий на истинное положение кончика тени вертикального стержня (или человека) - это высота стержня. Для заданной высоты и высоты стержня (R) длину тени (L) можно получить, рассматривая прямоугольный треугольник, образованный стержнем, его тенью и солнечным лучом. Касательная (высота) = R / L, по которой мы можем определить круг с радиусом L, на котором будет лежать кончик тени. Азимутальный угол определяет, где именно на окружности лежит точка. Процедура RecalcBaseCircle делает это каждый раз, когда изменяется один из трех параметров позиции.

Базовый круг представляет точки кончика тени, как если бы мы стояли прямо над стержнем и смотрели прямо вниз. Когда мы удаляемся от стержня в заданном направлении на заданное расстояние с нашим глазом на заданной высоте, видимое положение тени изменяется. Эти три параметра «Глаз» определяют видимое расположение кончика тени на эллипсе. Этот набор точек рассчитывается процедурой RecalcVisualCircle. Он вызывается при изменении положения глаз или при изменении базовой окружности.

Третий набор тригонометрических вычислений явился результатом моего, возможно, глупого решения отображать буквы направления N, E, W, S, обозначающие положение нашего глаза по пеленгу (направлению) от стержня. Поскольку на самом деле мы не можем повернуть экран монитора, когда мы обходим стержень, мы должны вращать круг обзора и эти буквы на экране. Чтобы буквы выглядели так, как если бы они были нарисованы на земле, я решил вращать их, когда они движутся по кругу, концентрическому с кругом обзора, так, чтобы основание буквы всегда было обращено к стержню. Это выполняется процедурой SetFontAngle. Код для рисования букв содержится в процедуре PaintFigure, которая перерисовывает все изображение.

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

 

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

 

© 2004-2024 "DS"

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