Алгоритм маскирования для расчета излучения

Я работаю над программным обеспечением (Ruby - Sketchup) для расчета радиации (солнца, неба и окружающих зданий) в пределах городской застройки на уровне пешеходов. Конечная цель - создать контурную карту, которая показывает уровень общего излучения. Под полным излучением я имею в виду коротковолновую (свет) и длинноволновую (тепло). (Чтобы дать вам идею:http://www.iaacblog.com/maa2011-2012-digitaltools/files/2012/01/Insolation-Analysis-All-Year.jpg)

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

(Очевидный) псевдокод выглядит следующим образом:

Select and mesh surface for analysis
From each point of the mesh
  Cast n (see below) rays in the upper hemisphere (precalculated)
    For each ray check whether it is in shade
      If in shade => Extract properties from intersected surface
      If not in shade => Flag it
    loop
  loop
loop   

Подход выше - грубая сила, но это единственное, что я могу придумать. Время расчета увеличивается с четвертой степенью точности (Dx, Dy, Dazimth, Dtilt). Я знаю, что такие программы, как яркость, используют подход Монте-Карло для уменьшения количества лучей.

Как вы можете себе представить, точность расчета для конкретной точки сетки сильно зависит от точности подразделения skydome. Точно так же точность на поверхности зависит от грубости сетки.

Я думал о другом подходе, используя адаптивное уточнение, основанное на результатах расчетов. Уточнение может работать для анализируемой поверхности и skydome. Если результаты между двумя смежными точками отличаются больше порогового значения, то уточнение будет выполнено. Обычно это делается в симуляции жидкости, но я ничего не мог найти в симуляции света.

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

Мне не нужна предельная точность, потому что я не делаю рендеринг. В данный момент мой приоритет - скорость.

Любое предложение о подходе?

Спасибо

н лучи В данный момент я делю небо на постоянные шаги азимута и наклона; это вызывает нерегулярные телесные углы. Существуют и другие подразделения (например, Tregenza), которые поддерживают постоянный телесный угол.

РЕДАКТИРОВАТЬ: Ответ на большие вопросы от Спектре

Временное ограничение. Я запускаю одну симуляцию для каждого часа года. Данные о погоде извлекаются из файла погоды epw. Он содержит для каждого часа высоту Солнца и азимут, прямое излучение, рассеянное излучение, облачность (для атмосферных длинноволновых диффузий). Мой алгоритм вычисляет теневую маску отдельно, а затем использует эту теневую маску для расчета излучения на поверхности (и на типичном пешеходе) для каждого часа года. Именно на этом втором шаге я добавляю фактическое излучение. На первом этапе я просто собираю информацию о геометрии и свойствах различных поверхностей.

Солнечные дорожки. Нет, не знаю Смотри пункт 1

Включить отражение от зданий? Не в данный момент, но я планирую включить его в качестве общего диффузного коротковолнового отражения, основанного на факторе обзора неба. Сейчас я рассматриваю только коротковолновое отражение от земли.

Включить теплоотдачу от зданий? Абсолютно да. Вот почему я сам написал этот код. Здесь, в Дубае, это имеет ключевое значение, так как поверхности зданий сильно нагреваются

Поверхности альбедо? Да. В Skethcup я связал словарь с каждой поверхностью, и в этот словарь я включил все свойства поверхности: температуру, излучательную способность и т. Д. В настоящее время температуры фиксированы (температура окружающей среды, если не назначена), но я планирую в будущем , чтобы объединить это с результатами динамического теплового моделирования здания, которое уже рассчитывает все температуры поверхностей.

Разрешение карты. Разрешение выбирается пользователем, а сетка генерируется алгоритмом. С точки зрения масштаба, я использую это для генеральных планов. Масштаб варьируется от 100 х 100 м до 2000 х 2000 м. Я обычно склонен использовать минимальное разрешение 2м. Ограничение - память и время симуляции. У меня также есть возможность уточнить определенные области с более тонкой сеткой: например, области, где есть рестораны или другие удобства.

Частота кадров. Мне не нужно делать анимацию. Результаты экспортируются в файл VTK, визуализируются в Paraview и анимируются там для демонстрации во время презентаций :-)

Тепло и свет. Да. Коротковолновое и длинноволновое обрабатываются отдельно. См. Пункт 4. Геолокация используется только для выбора правильного файла погоды. Я не рассчитываю все компоненты излучения. В погодных файлах мне нужны данные измерений. Они не велики, но пока достаточно хороши.https://www.lucidchart.com/documents/view/5ca88b92-9a21-40a8-aa3a-0ff7a5968142/0

Ответы на вопрос(1)

Ваш ответ на вопрос