Интерполировать координаты 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 таким образом, чтобы она проецировалась обратно на поверхность сферы юнита?
1 ответ
Пусть M и N будут вашими двумя точками, а O - началом. Мы найдем P, середину сегмента MN: OP = OM + ON / 2. Вы вычислите величину OP: |OP|. Ваша точка будет R с OR = OP / |OP| = OM + ON / 2|OP|.
Удачи в вычислении этого. Я не знаю Delphi, но, возможно, он разрешает прямые векторные операции. Если нет, сделайте это с аналитической геометрией.
Координаты для средней точки - это средние арифметические значения координат M и N (вы сказали, что можете их вычислить). Чтобы получить величину | ОП | Вы извлекаете квадратный корень из x^2+y^2+z^2. Чтобы получить R, просто разделите координаты P на величину, рассчитанную только сейчас.
Вы обрабатываете отдельно, когда M и N противостоят (P==O).