При использовании next.js необходимо учитывать, что перенаправления должны выполняться в методе getInitialProps
, чтобы избежать ненужных компонентов рендеринга.
например
const MyComponent = ()=>{
return <tag> {/* ... */} </tag>
}
MyComponent.getInitialProps = ({res}) => {
if (res) {
/* serve-side */
res.writeHead(302, {
Location: 'http://example.com'
})
res.end()
} else {
/* client-side */
Router.push('http://example.com')
}
return {}
}
Деревья квадрантов , кажется, решают определенную проблему, которую я спросил. Kd-деревья являются более общей формой для любого количества размеров, а не всего два.
R-деревья могут также быть полезными, если хранившие объекты имеют ограничительный прямоугольник, вместо того, чтобы быть только что простой точкой.
общий термин для подобных структур Пространственный Индекс .
, Там реализация Java Дерево квадрантов и R-дерево .
дерево квадрантов А структура , который обычно используется для этого.
Общий термин Пространственный Индекс . Я предполагаю, что необходимо выбрать согласно существующие реализации .
Вы могли поместить все x провода в карту и y провода в другой карте, и иметь точку значений карты к объекту.
TreeMap<Integer, TreeMap<Integer, Point>> xMap = new TreeMap<Integer, TreeMap<Integer, Point>>();
for (int x = 1; x < 100; x += 2)
for (int y = 0; y < 100; y += 2)
{
Point p = new Point(x, y);
TreeMap<Integer, Point> tempx = xMap.get(x);
if (tempx == null)
{
tempx = new TreeMap<Integer, Point>();
xMap.put(x, tempx);
}
tempx.put(y, p);
}
SortedMap<Integer, TreeMap<Integer, Point>> tempq = xMap.subMap(5, 8);
Collection<Point> result = new HashSet<Point>();
for (TreeMap<Integer, Point> smaller : tempq.values())
{
SortedMap<Integer, Point> smallerYet = smaller.subMap(6, 12);
result.addAll(smallerYet.values());
}
for (Point q : result)
{
System.out.println(q);
}
}
Простая реализация QuadTree на C # (легко перевести на java) http://www.codeproject.com/KB/recipes/QuadTree.aspx