2015-07-10 1 views
5

У меня в трехмерном пространстве фиксированный луч света Lr и зеркало M, которое может вращаться вокруг неподвижной точки Mrot, эта точка находится не на одной плоскости зеркала, другими словами, зеркальная плоскость касается шара с центром в Mrot с фиксированным радиусом d. С этой конфигурацией я хочу найти уравнение, которое получает точку P в качестве параметра и приводит к вращению зеркала в трехмерном пространстве.Аналитический метод расчета угла зеркала

Мы можем считать, что зеркальная плоскость не имеет границ (бесконечная плоскость), и ее вращение не имеет пределов. Кроме того, зеркало отражается только на противоположной стороне его точки вращения.

В картине два случая с другой точки входа P1 и P2, с углами alpha1 и alpha2 их соответствующее решение. Изображения находятся в 2D, чтобы упростить чертежи, реальный случай находится в 3D. fsd

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

Очевидно, что это перебор, но я не могу понять, как его кодировать аналитическим способом.

Любые мысли?

Примечание: Я заметил, что если зеркало вращается вокруг точки (Mrot), содержащейся в ее плоскости, и луч света достигает этой точки (Mrot), я могу легко вычислить угол зеркала, но, к сожалению, это не мой случай ,

+0

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

+0

@SebastianCabot Зеркало вращается относительно точки «Mrot», и все возможные вращения происходят от расстояния до зеркала от поверхности зеркала до точки «Mrot». Также как и @Spektre. И поверхность отражения - это противоположная сторона зеркала, которая обращена к «Mrot», подобному @Spektre. – zaccaro

ответ

4

Прежде всего заметим, что существует только один параметр здесь, то есть расстояние t вдоль луча при котором он попадает в зеркало.

Для любого тестового значения t, вычислить в порядке

  1. Точка, в которой происходит отражение.
  2. Векторы инцидента и отраженных лучей.
  3. Нормальный вектор зеркала, который определяется путем принятия среднего нормализованного инцидентного и отраженного векторов. Вместе с 1 вы теперь знаете плоскость зеркала.
  4. Расстояние d зеркала к точке поворота.

Проблема заключается в выборе t, чтобы сделать d. Это сводится к октическому полиному в t, поэтому нет аналитической формулы [1] и единственным решением является итерация. [2]

Вот пример кода:

vec3 r; // Ray start position 
vec3 v; // Ray direction 
vec3 p; // Target point 
vec3 m; // Mirror rotation point 

double calc_d_from_t(double t) 
{ 
    vec3 reflection_point = r + t * v; 
    vec3 incident   = normalize(-v); 
    vec3 reflected  = normalize(p - reflection_point); 
    vec3 mirror_normal = normalize(incident + reflected); 
    return dot(reflection_point - m, mirror_normal); 
} 

Теперь передайте calc_d_from_t(t) = d в ваш любимый корневой искатель, обеспечивая, чтобы найти корень с t > 0. Любой полупристойный корневой искатель (например, Newton-Raphson) должен быть намного быстрее, чем ваш текущий метод.


[1] I.e. формулу, включающую арифметические операции, n-ые корни и коэффициенты.
[2] Если неорганические факторы не идентичны, потенциально уменьшая проблему до квартили.

+0

Каким образом расстояние до точки вращения имеет значение. Ему действительно нужно найти точку пересечения и нормальную. Не могли бы вы объяснить дальше. Это очень интересно –

+0

@SebastianCabot: Насколько я понял вопрос, M ограничено на некоторое фиксированное расстояние от Mrot. Без этого ограничения вы можете расположить зеркало, чтобы отражать Lr до P в любой точке, поэтому проблема заключается в том, чтобы найти точку отражения для соответствия ограничению расстояния до поворота. – PBS

+0

Да, это правда. Но достаточно ли ограничений, чтобы вы могли найти решения? Я все еще пытаюсь понять это, и я хотел лучше понять ваши рассуждения. Независимо от ограничения, которое нам необходимо решить: Rvec = 2 * точка (Nvec, IVec) * NVec - Ivec. Поскольку Psource и Pdest известны, мы можем дополнительно уменьшить его до -Pdest = 2 * (точка (NVec, IVec)) * NVec -PSrc. Если мы используем нормированные векторы, я думаю, что мы можем написать: norm (PSrc) - norm (Pdst) = 2 * cos (ang (Nvec, IVec)) * norm (n) - Таким образом, нам все еще остается найти угол, основанный на вы указали, что я не понимаю, как вы предлагаете это делать? –

1

Я бы сделал это как две отдельные плоские проблемы (один в плоскости xy и второй в плоскости xz или yz).Первое, что поражает мой ум это итеративный процесс:

mirror iteration

  1. начало

    • зеркало вращается вокруг МРОТ в постоянном расстоянии создания круга (сфера в 3D)
    • так вычислить первое пересечение Lr и сферы
    • или найти ближайшую точку на сфере до Lr, если перекресток не найден
    • вычислить n0 нормальных как половина угла между Lr и красной линией от пересечения к P
    • этого зеркало начальной позиция
  2. место зеркала (аква) до n0 угла

    • вычислить отражение Lr
    • и вычислить половинный угол da0 Это шаг для новой итерации
  3. добавить da0 к n0 углу и место зеркала к этому новому положению угла

    • вычислений отражения Lr
    • и вычислить половину угла da1 это шаг для новой итерации
  4. петлевая пуля 3 до

    • da(i) достаточно мал
    • максимальное число итераций достигнуто

[Примечания]

  • Это должно сходиться в раствор более быстро, то случайное/линейное зондирование
  • чем более отдаленный P от зеркала (или меньшего радиуса вращения), тем быстрее сходится
  • Не уверен, что если аналитическое решение этой проблемы вообще существует, похоже, что это приведет к трансцендентной системе ...
+0

Является быстрой процедурой итерации, которую я бы предпочел использовать по моему фактическому методу, но я думаю, будет быстрее алгоритм без необходимости повторения. – zaccaro

+0

@zaccaro как я писал в заметках. Я не уверен, существует ли один из них, вы должны добавить дополнительную информацию и ограничения решения, например, зафиксирован радиус вращения? Какова позиция лучей относительно Морта? насколько велика Зеркало? Каковы углы углов поворота и оси, ... и т. Д. ... и эскиз был бы хорошей идеей, так что совершенно ясно, что есть (помните, что многие люди здесь не изначально говорят на английском языке, а терминология s не всегда одно и то же из страны в страну) – Spektre

+1

@zaccaro btw просто приходит мне в голову, что если луч не находится на одной оси, то это невозможно сделать как разделенные проблемы, и вам нужно повторить плоскость кабины (сначала xy, затем xz, то xy, затем xz, ...), потому что наклон по одной оси сдвинет другое отражение плоскости – Spektre

 Смежные вопросы

  • Нет связанных вопросов^_^