Как проецировать точку на сферу - PullRequest
10 голосов
/ 07 марта 2012

Если у меня есть точка (x, y, z), как проецировать ее на сферу (x0, y0, z0, радиус) (на ее поверхности).Мой вход будет координаты точки и сферы.Выходные данные должны быть координатами спроецированной точки на сфере.

Просто преобразовать из декартовых в сферические координаты?

Ответы [ 3 ]

23 голосов
/ 07 марта 2012

Для простейшей проекции (вдоль линии, соединяющей точку с центром сферы):

  1. Запишите точку в системе координат с центром в центре сферы (x0, y0, z0):

    P = (x ', y', z ') = (x - x0, y - y0, z - z0)

  2. Вычислить длину этого вектора:

    | P | = sqrt (x '^ 2 + y' ^ 2 + z '^ 2)

  3. Масштабируйте вектор так, чтобы он имел длину, равную радиусу сферы:

    Q = (радиус / | P |) * P

  4. И вернитесь к исходной системе координат, чтобы получить проекцию:

    R = Q + (x0, y0, z0)

4 голосов
/ 07 марта 2012

По сути, вы хотите построить линию, проходящую через центр сфер и точку. Затем вы пересекаете эту линию со сферой, и у вас есть точка проекции.

Более подробно:

Пусть p будет точкой, s центром сферы и r радиусом, тогда x = s + r*(p-s)/(norm(p-s)), где x является точкой, которую вы ищете. Реализация остается за вами.

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

0 голосов
/ 07 марта 2012

Это работает, если вы установите координаты центра сферы в качестве источника системы (x0, y0, z0).Таким образом, вы получите координаты точки, относящейся к этому началу координат (Xp ', Yp', Zp '), и, преобразовав координаты в полярные, вы отбросите радиус (расстояние между центром сферы и точкой) и углыопределим проекцию.

...