Я считаю, что есть два подходящих способа решения этой проблемы.
Первое упомянутое другими авторами - найти наименьшую ограничивающую рамку, которая заключает в себя прямоугольник, затем генерировать точки в этой рамке, пока вы не найдете точку, лежащую внутри прямоугольника.
Find Bounding box (x,y,width, height)
Pick Random Point x1,y1 with ranges [x to x+width] and [y to y+height]
while (x1 or y1 is no inside the quadrangle){
Select new x1,y1
}
Если предположить, что ваша область четырехугольника равна Q, а ограничивающая рамка - A, то вероятность того, что вам понадобится сгенерировать N пар точек, равна 1- (Q / A) ^ N, что в геометрической прогрессии приближается к 0.
Я бы рекомендовал вышеупомянутый подход, особенно в двух измерениях. Очень быстро генерировать очки и тестировать.
Если вы хотели получить гарантию завершения, вы можете создать алгоритм, который генерирует только точки в четырехугольнике (легко), но вы должны обеспечить распределение вероятностей точек даже в пределах четырехугольника.
http://mathworld.wolfram.com/TrianglePointPicking.html
Дает очень хорошее объяснение