Интерполировать координаты x, y, z на сфере с использованием точек из двух векторов вращения?

Я хочу построить трехмерные точки в реальном времени, которые лежат на поверхности единичной сферы (r = 1).

Здесь работают два вектора вращения. Один вектор вращается вокруг оси Y, его значения X и Z вычисляются с использованием cos () и sin () круга, который полностью лежит в плоскости X / Z, причем все значения Y равны 0. Другой вращается вокруг Ось X, это значения Z и Y, вычисленные с использованием cos () и sin () круга, который полностью лежит в плоскости Z / Y со всеми значениями X, равными 0. Момент импульса двух векторов обычно не является такой же. Однако концы векторов лежат на поверхности общей сферы с радиусом, равным 1. Следовательно, они имеют равную величину и оба исходят из одной и той же точки 0, 0, 0.

Скажем, у первого вектора есть член углового момента, называемый angXZ, а у второго - angZY. Это означает, что в любой момент я могу вычислить две точки, по одной для каждого вектора вращения, используя angXY и angZY. С этими двумя трехмерными точками, какова формула для расчета третьей точки, которая также будет лежать на поверхности единичной сферы и будет правильной интерполяцией между двумя точками, рассчитанными по angXZ и angZY?

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

Есть ли простая формула, которая берет две трехмерные точки, лежащие на поверхности единичной сферы, для вычисления третьей точки, которая также будет лежать на этой поверхности и будет правильной интерполяцией между первыми двумя точками?

Если это важно, я использую Delphi Pro 6.

ПОСЛЕДУЮЩИЕ ДЕЙСТВИЯ: интуитивно кажется, что я смогу взять линейную среднюю точку двух точек, вычисленных из пары векторов вращения, и спроецировать эту точку обратно на единичную сферу. Например, формула по приведенной ниже ссылке дает уравнения для расчета средней точки между любыми двумя трехмерными точками. Разве я не могу взять эту трехмерную точку и, используя некоторую формулу, настроить ее координаты XYZ таким образом, чтобы проецировать ее обратно на поверхность единичной сферы?

Поиск координат точки между двумя точками?


person Robert Oschler    schedule 05.10.2010    source источник
comment
Одно небольшое примечание - если две точки находятся прямо напротив друг друга (не уверен, что это происходит в вашем сценарии), то есть бесконечное количество кругов с радиусом = радиусом сферы, которые проходят через их обе.   -  person Philip Rieck    schedule 05.10.2010


Ответы (1)


Пусть M и N будут вашими двумя точками, а O - началом координат. Мы найдем P, середину сегмента MN: OP = OM + ON / 2. Вы вычисляете величину OP: | OP |. Ваша нужная точка будет R с OR = OP / | OP | = ОМ + ВКЛ / 2 | ОП |.

Удачи в вычислении этого. Я не знаю Delphi, но, возможно, он позволяет прямые векторные операции. Если не сделайте это с аналитической геометрией.

Координаты средней точки - это средние арифметические координаты точек M и N (вы сказали, что можете их вычислить). Чтобы получить величину | OP | вы извлекаете квадратный корень из x ^ 2 + y ^ 2 + z ^ 2. Чтобы получить R, вы просто разделите координаты P на величину, рассчитанную только что.

Вы обрабатываете отдельно, когда M и N противостоят (P == O).

person Alin Purcaru    schedule 05.10.2010
comment
После добавления продолжения к моему исходному сообщению и перечитывания вашего ответа, я считаю, что просто повторил то, что вы уже сказали в своем комментарии. Однако именно вычисление / экстраполяция этой средней точки обратно на единичную сферу - вот что мне нужно. - person Robert Oschler; 05.10.2010
comment
Просто нормализуйте свой вектор средней точки (OP), чтобы вернуть его на единичную сферу. Также будьте осторожны с особенностями, когда ваши векторы антипараллельны. - person Ron Warholic; 05.10.2010
comment
Привет, Рон. Спасибо. Чтобы сэкономить время, можете ли вы узнать, правильны ли уравнения, показанные в следующем URL-адресе, для правильной нормализации трехмерного вектора ?: wikihow.com/Normalize-a-Vector - person Robert Oschler; 05.10.2010