У меня есть начальная точка в трехмерном пространстве (x, y, z), которая соответствует центру круга, и конечная точка (x2, y2, z2), которая соответствует поверхности сферы. У меня также есть много других конечных точек на поверхности сферы (например, x3, y3, z3), каждая из которых имеет одинаковую длину радиуса (rr).
Я хочу рассчитать угол перемещения от центральной точки (начало) до конечной точки и для всех остальных моих конечных точек. В конце концов, учитывая, скажем, 100 сфер, я хочу посмотреть, все ли конечные точки движутся с одинаковой направленностью / углами от центра. Для этой цели мне понадобится направление 0 и 360, чтобы «выглядеть одинаково», поэтому я думаю, что мне нужно использовать определенный тип конкретной плоскости.
Комментарий в конце этого поста (https://math.stackexchange.com/questions/707673/find-angle-in-degrees-from-one-point-to-another-in-2d-space) имеет хороший рисунок и ответ с использованием функции atan2, но это только для 2D-пространства.
Этот пост ( Угол между двумя трехмерными векторами с одним и тем же началом в одной плоскости ) и этот Угол между 3 точками в трехмерном пространстве заставил меня начать.
Это ( Угол X между двумя трехмерными векторами? ) также полезно, но вычисляет неправильный тип угла (я думаю) на основе горизонтальной системы.
Учитывая все это, вот что я придумала до сих пор. Вот несколько моментов:
a = c(-0.0684486861, 0.0125857380, 0.0201056441) #start/center of sphere
b = c(-0.0650557851, 0.0175286346, -0.0228805516) #end point
v1 = c( (a[1] - b[1]), (a[2] - b[2]), (a[3] - b[3]) ) #vector
Тогда я думаю, что мне нужно вычислить скалярное произведение между v1 и, возможно, вектором, параллельным плоскости на 90 градусов от 2 точек? Чтобы потом взять косинус между углами? Но если радиус всегда один и тот же, не проще ли?
Я не знаю достаточно математики, чтобы понять это даже для набора из двух пунктов, и гораздо меньше, чтобы разработать код для этого для всех моих сфер / точек.
Руководство с благодарностью.