Получение положения координаты на поверхности сферы
Есть объект 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π
ОБНОВИТЬ: