Я пытаюсь заняться следующим вариантом использования:
Ввод: Список координат x, y, которые образуют неправильный многоугольник (они гарантированно действительны и линии не будет пересекаться, однако может быть вогнутым). Формат ввода не имеет значения, поэтому в настоящее время я использую два свободных int-массива для x
и y
соответственно.
Вывод: A random x , координата y внутри этого многоугольника, который НЕ находится непосредственно над углом или краем.
Используя следующий код, я смог решить случайную x,y
-координату внутри многоугольника:
// Currying Function with two int-arrays as parameters and double-pair return-type
X->Y->{
// Create a Path2D object
java.awt.geom.Path2D path = new java.awt.geom.Path2D.Double();
// Start at the first coordinate given
path.moveTo(X[0], Y[0]);
// Loop over the remaining coordinates:
for(int i=1; i<X.length; i++)
// And draw lines from corner to corner
path.lineTo(X[i], Y[i]);
// After the loop, close the path to finish the polygon
path.closePath();
// Create a Rectangle that encapsulates the entire Path2D-polygon
java.awt.Rectangle rect = s.getBounds();
// The resulting x,y-coordinate, starting uninitialized
double x,y;
// Do-while the Path2D polygon does not contain the random x,y-coordinate:
do{
// Select a random x,y-coordinate within the Rectangle
x = rect.getX() + Math.random()*rect.getWidht();
y = rect.getY() + Math.random()*rect.getHeight();
}while(!path.contains(x,y));
// After which we return this random x,y-coordinate as result:
return new double[]{x,y};
}
Это все работает как задумано. Теперь я хочу убедиться, что случайная координата x, y не является одной из входных координат x, y (это довольно легко) И не находится на ребре / линии Path2D. Во второй части я не знаю, как справиться, и быстрый поиск в Google не дал никакой полезной информации, отсюда и этот вопрос.
ПРИМЕЧАНИЕ. Я знаю, что вероятность случайной точки равна точно на вершине ребра / угла астрономически малы, и их, вероятно, можно игнорировать, но это вызов, поэтому необходимо применять его независимо.