Получение положения координаты на поверхности сферы

Есть объект A. Я хочу создать объект B. Я стараюсь избегать того, чтобы A покрывал B:

A прячет B от камеры

Я думаю, как этого добиться. Посмотрите на следующий рисунок:

A не скрывает B от камеры

Я подумал о решении математически-геометрического подхода, прежде чем искать какую-то функцию Unity3D для решения проблемы. Я понимаю, что A и B будут на одной поверхности, если камера находится в сфере с радиусом cA. Поэтому я думаю, что решение может быть связано с получением точки в точке B на расстоянии AB от точки A на поверхности сферы с радиусом cA. Есть ли в этом смысл? Любая другая идея? Как это сделать с математикой и Unity?

1 ответ

То, что вы описываете, это кольцо на поверхности сферы, плоскость которого перпендикулярна направлению c-A,

Это довольно просто вычислить. Сначала нам нужно найти 2 перпендикулярных вектора для c-A (мы назовем это d):

  • Назови вектор "c-A" = dрадиус сферы R = abs(d) и расстояние "A-B" = D,
  • Если d.X / R < 0.5установить временный вектор w = Xеще установить w = Y,
  • Вычислить первый перпендикулярный вектор u = normalize(cross(w, d)),
  • Вычислить второй v = normalize(cross(d, u)),

Центральная точка этого кольца определяется c + d * cos(D / R), Отсюда мы можем генерировать любую точку на кольце с

p(t) = c + d * cos(D / R) + u * cos(t) + v * sin(t)   ,   0 ≤ t ≤ 2π

ОБНОВИТЬ:

Другие вопросы по тегам