Как-то так
Ну, а теперь мое решение. (Зарание извиняюсь за красоту рисунка, художник из меня еще тот (: )

1.(рис. 1). Вокруг координат объекта находится рандомальная точка, лежащая на рандомальной сфере с рандомальным радиусом 0 < rаnd < 2500. (формула все та же

)
x1 = x0 + rаnd × sin(α) × cos(β)
y1 = y0 + rаnd × sin(α) × sin(β)
z1 = z0 + rаnd × cos(α)
2. к этой точке строится вектор от места отварпа(рис. 2). Жирными линиями на рисунке показан конус с радиусом основания rand, в котором будут лежать все возможные векторы.
3. Ищется точка пересечения построенного вектора со сферой диаметром R = R1+R2+rand (R1 - радиус сферы объекта, R2 - радиус шипа ). Это и есть "абсолютная" точка приварпа(синим цветом на рис. 3). Красным показаны все возможные точки пересечения с этой сферой.
Как легко заметить, к большому объекту всегда приварп будет с одной и той же стороны (чем меньше объект, тем больше разброс, в силу геометрических причин), а вот к точечному - с разных, т.к. точки пересечения со сферой радиусом 0 нет, то приварп будет в точку из пункта 1.
Вот как-то так. Абсолютно универсально, и включает в себя объект и шип любого размера.
П.С. да, действительно, во второй строчке должен быть синус. Исправил.
Сообщение отредактировал СтарыйПепелац: 30 March 2012 - 12:10