Какой формат многоугольника требуется для самого большого прямоугольника D3plus?

Я нашел интересную демонстрацию того, как найти самый большой прямоугольник в многоугольнике неправильной формы здесь с помощью D3plus.

Я пытаюсь воссоздать это для многоугольника, над которым я работаю, но в настоящее время код не работает. Кажется, что он работает бесконечно. Код, который я использую, выглядит следующим образом:

d3.csv("data/polyPoints.csv", function(error, polyPoints) {
  if (error) return console.error(error);
  
  // coerce string values to numbers
  polyPoints.forEach(function(d) {
  	d3.keys(d).forEach(function(k) {
  		d[k] = +d[k]
  	})
  });
  
  // settings for geom.largestRect
  var rectOptions = {
  	angle: 0,
  	maxAspectRatio: 5,
  	nTries: 1

  };
  
  console.log(rectOptions);
  console.log(polyPoints);

   var lRect = d3plus.geom.largestRect(polyPoints, rectOptions);
  console.log(lRect); 
  
});

Я подозреваю, что мой многоугольник имеет неправильный формат.

Обновить

Я делаю успехи. Мой исходный полигональный объект был взят из CSV и создал массив массивов пар ключ-значение (например, {"x": 0 "y": 1}, {"x": 2, "y": 1}... .)

Я преобразовал это в массив массивов (например, [[1,0],[2,0]....])

Теперь код работает, но на выходе определяются прямоугольники, пересекающие границу исходного многоугольника.


person Oliver Burdekin    schedule 05.06.2018    source источник


Ответы (1)


Для всех, кто с этим работает. Самые большие документы в формате Rect — это https://d3plus.org/docs/#largestRect, и их можно запускать с следующий код.

const d3p = require('d3plus');
const polygon = [[x,y],[x,y],[x,y]...]

const rectOptions = {
    maxAspectRatio: 5,
    nTries: 20
};

let lRect = d3p.largestRect(rdp, rectOptions);

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

Значение options.tolerance также может повлиять на это, но я не очень много с ним играл. Это довольно старый вопрос, но, надеюсь, он кому-то поможет.

person 7pixels    schedule 24.02.2021