random Points In Polygon С#?(Unity)

133
28 ноября 2021, 16:10

Я знаю о последовательности Хэлтона . Но пока я не могу найти формулы, по которым генерируются точки. Также беспокоит вопрос, последовательность Халтона генерирует точки только в прямоугольнике? Или я могу генерировать точки в любом многоугольнике, используя последовательность Хэлтона? Если последовательность Хэлтона генерирует точки только в прямоугольнике, каким другим способом можно создать точки в многоугольнике?

Я так же попытался вытащить из JTS Test Builder(написанном на java). Методы генерирующие случайные точки в полигоне:

  public static Geometry randomPointsInPolygon(Geometry g, int nPts) {
    RandomPointsBuilder shapeBuilder = new RandomPointsBuilder(FunctionsUtil.getFactoryOrDefault(g));
    shapeBuilder.setExtent(g);
    shapeBuilder.setNumPoints(nPts);
    return shapeBuilder.getGeometry();
  }
  public void setNumPoints(int numPts) { this.numPts = numPts; }
  public static GeometryFactory getFactoryOrDefault(Geometry g)
  {
    if (g == null) return JTSTestBuilder.getGeometryFactory();
    return g.getFactory();
  }
  public static GeometryFactory getGeometryFactory() 
  { 
    /**
     * Allow this to work even if TestBuilder is not initialized
     */
    if (instance() == null) 
      return new GeometryFactory();
    return model().getGeometryFactory();
  }
  public void setExtent(Geometry mask)
  {
    if (! (mask instanceof Polygonal))
        throw new IllegalArgumentException("Only polygonal extents are supported");
    this.maskPoly = mask;
    setExtent(mask.getEnvelopeInternal());
    extentLocator = new IndexedPointInAreaLocator(mask);
  }
  public Geometry getGeometry()
  {
    Coordinate[] pts = new Coordinate[numPts];
    int i = 0;
    while (i < numPts) {
        Coordinate p = createRandomCoord(getExtent());
        if (extentLocator != null && ! isInExtent(p))
            continue;
        pts[i++] = p;
    }
    return geomFactory.createMultiPointFromCoords(pts);
  }

И нашёл похожий вопрос на форуме.

Мне нужен быстрый алгоритм на C# для генерации точек в полигоне. Так как эта операция будет вызываться много раз.

READ ALSO
Как отобразить данные из List&lt;&gt; в xaml?

Как отобразить данные из List<> в xaml?

Как я могу вывести данные из List<> в xaml файле?

161
Не работает свойство Children.Clear() C# WPF

Не работает свойство Children.Clear() C# WPF

в ходе разработки приложения понадобилась генерация элементов управления кодом, но дилемма в том, что после этого невозможно очистить контролДанную...

122
Как открыть .cs файл как Windows Form Constructor (Visual Studio c#) 2019

Как открыть .cs файл как Windows Form Constructor (Visual Studio c#) 2019

Я создал пустой проект windows formsВ гайдах написано что вместе с файлом открывается и Windows Form constructor

193