LINUX.ORG.RU

Симуляция и визуализация пути прохождения луча (два зеркала, одна линза)

 , , , ,


0

1

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

Кое-что нашёл, но не совсем то:

★★★★★

Странного ты хочешь. Без изучания уравнений и opengl использовать эти самые уравнения и opengl? На самом деле формул-то там полторы штуки, в википедии все наверняка есть. Ищёшь пересечение луча с ближайшим объектом, считаешь отражение/преломление, повторяешь для новых лучей. OpenGL можно заменять на любой удобный 3D движок.

slovazap ★★★★★
()
Ответ на: комментарий от deadplace

povray, кстати, будет похож на второй предложенный вариант

deadplace
()
Ответ на: комментарий от Bobby_

В такие детали не вдавался, т.к. на угол отражения, наверняка, не влияет.

gag ★★★★★
() автор топика
Ответ на: комментарий от slovazap

Без изучания уравнений и opengl использовать эти самые уравнения и opengl?

Ну, вот первый готовый пример практически то, что нужно, разве что не в 3D. Вдруг, кому-то попадалось это же в 3D.

На самом деле формул-то там полторы штуки, в википедии все наверняка есть.

Мне для верификации. Если сам буду формулы ваять, то придётся их верифицировать, а это делать будет некому. Ведь несмотря на банальность этих формул для специалистов, даже в этих тривиальностях находят ошибки: https://github.com/mrdoob/three.js/issues/4340

Hi, I'm the one who requested the Vector3.reflect(normal) method to be added to the Three.js math library over a year ago. Everything looked fine at the time, but I ran into issues when trying to actually use it in a simple Pong-style game.

А ещё эти формулы до сих пор являются предметом научных статей: Rotation about an arbitrary axis and reflection through an arbitrary plane (2012).

Ищёшь пересечение луча с ближайшим объектом, считаешь отражение/преломление, повторяешь для новых лучей.

Повозиться надо будет:

  • задать луч в центре координат, повернуть, переместить,
  • задать зеркало-поверхность, повернуть, переместить,
  • задать второе зеркало-поверхность, повернуть, переместить,
  • задать линзу-поверхность, повернуть, переместить,
  • задать цель экран-поверхность,
  • посчитать отражение луча от первого зеркала, получить второй луч,
  • посчитать отражение второго луча от второго зеркала, получить третий луч,
  • найти точку пересечение третьего луча с линзой-поверхностью,
  • найти угол отклонения и получить четвёртый луч,
  • найти точку пересечения четвёртого луча с экраном-поверхностью.

OpenGL можно заменять на любой удобный 3D движок.

Поглядываю на three.js.

gag ★★★★★
() автор топика
Ответ на: комментарий от deadplace

Не, мне медленный рендеринг не нужен. Или там можно задать нерасходящийся источник света (типа лазер), чтобы этот луч был виден (без добавления дыма или другого вспомогательного средства), зеркала, и так чтобы картинка считалась за миллисекунды?

gag ★★★★★
() автор топика
Ответ на: комментарий от Bobby_

Коэффицент отражения зеркала зависит от интенсивности лазерного луча?

Конечно зависит. Прикинь какой будет коэффициент отражения, если тех 10% потерь при отражении хватит чтобы прожечь дырку в зеркале?

anto215 ★★
()
Ответ на: комментарий от gag

за миллисекунды?

Не, там на CPU только за секунды-минуты

deadplace
()

Школьный курс физики «Оптика». Там всё очень доходчиво расписано.

iZEN ★★★★★
()

Если не стоит задача более-менее полного физического моделирования лазерного луча, то формул немного - уравнения прямой, тригонометрия и «угол падения равен углу отражения».

Makhno
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.