По существу, для вашей задачи:
- Рассчитайте ограничивающий прямоугольник, который соответствует заданным точкам.
- Создайте случайную точку в ограничивающем прямоугольнике.
- Если случайная точка не находится в выпуклой оболочке данных точек, go до шага 1.
Для двумерных случаев, если вы знаете, что все формы, которые вас интересуют, являются выпуклыми, то это является относительно тривиальным: разделите фигуру на треугольники, выберите один из них случайным образом на основе их площади и создайте случайную точку в этом треугольнике. Но для более высоких измерений это далеко не тривиально. Фактически, выпуклая оболочка, вероятно, будет намного меньше, чем ограничивающая рамка с более высокими размерами, поэтому многие точки могут быть отклонены. И вычисление самой выпуклой оболочки может быть сложным. Ответы на этот вопрос есть некоторые идеи о том, как найти, находится ли точка внутри выпуклой оболочки.
Если вы можете принимать приближения, вы также можете предварительно рассчитать количество точек, которые находятся в выпуклой затем, корпус, каждый раз, когда вам нужна случайная точка:
- Выберите одну из предварительно рассчитанных точек случайным образом.
- Вычислите случайную точку, которая "близка" к выбранной точке (например, точка, сдвинутая на нормально распределенное расстояние в каждом измерении).
- Зажим случайной точки ограничивающей рамкой.
Недостатком является то, что случайные точки будут иметь вид плотные, как предварительно рассчитанные точки, и не обязательно равномерно распределенные.