Если сфера1 является сферой ((0,0,0), 1), то есть сфера радиуса 1 с центром в начале координат, то вы фактически запрашиваете способ преобразования любого местоположения (x, y, z) в 3D к соответствующему месту (x ', y', z ') на единичной сфере. Это эквивалентно перенормировке вектора: (x ', y', z ') = (x, y, z) / sqrt (x ^ 2 + y ^ 2 + z ^ 2).
Если сфера1 - это не единичная сфера, а, скажем, сфера ((a, b, c), R), вы можете сделать в основном то же самое:
(x ', y', z ') = R * (x-a, y-b, z-c) / sqrt ((x-a) ^ 2 + (y-b) ^ 2 + (z-c) ^ 2) + (a, b, c). Это эквивалентно изменению координат, поэтому первая сфера - это единичная сфера, решающая задачу, а затем меняющая координаты обратно.
Как отмечали люди, эти функции являются нелинейными, поэтому проекцию нельзя назвать «матрицей». Но если вы по какой-то причине предпочитаете начинать с матрицы проекции, вы можете проецировать сначала из 3D в плоскость, а затем из плоскости в сферу. Я не уверен, что так будет лучше.
Наконец, позвольте мне указать, что линейные карты не дают ошибок деления на ноль, но если вы внимательно посмотрите на формулы выше, вы увидите, что эта карта может. Геометрически это потому, что трудно спроецировать центральную точку сферы на ее границу.