Я пытаюсь генерировать векторы на равном расстоянии от точки в центре экрана.
Ранее я следовал нижеприведенному подходу
1. Генерация случайных чисел Random (0-400, 0 + 400) для x, y и z
2. Нормализовать векторы
3. Масштабируйте их до желаемого расстояния
Тем не менее, это было, когда мое происхождение было в 0. Теперь, когда я должен сделать что-то вроде этого из центра экрана. Я попытался придерживаться следующего подхода, и это по какой-то причине дает мне х и у только в положительном квадранте (z получается хорошо)
//Origin (midpointX of screen, midPointY of screen, z=0)
//vector<Vec3f> positions;
//positions.push_back(getPoint().scale(300);
getPoint{
Vec3f rVector;
rVector.set( Random(midPointX-100,midPointX+100), Random(midPointY-100,midPointY+100), Random(0-100,0+100) );
}
Предположим, что все эти точки лежат на поверхности сферы некоторого радиуса. Следовательно, они равноудалены от центра (x, y, z). Было бы здорово узнать о лучшем подходе к получению этих очков.
Я в порядке только с алгоритмом.
Вы заботитесь о pdf (вероятностное распределение) углов? Генерируя равномерно распределенные случайные точки в кубе, вы будете склоняться к направлениям углов куба. Это явно отличается от выборки случайных точек на поверхности сферы.
Если вы хотите равномерное распределение на поверхности сферы, попробуйте, например, Выбор сферы (в основном, генерируйте углы независимо, вместо координат x-y-z)
Что касается перемещения сферы из начала координат в другую точку, то это просто вопрос добавления констант в конечный результат (координаты x-y-z, вычисленные из полярных координат), как указали другие.
Других решений пока нет …