Существует ли эффективный алгоритм для генерации 2D вогнутой оболочки?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

60
задан Fabio Ceconello 18 August 2010 в 21:57
поделиться

5 ответов

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

http://www.cis.rit.edu/people/faculty/kerekes/pdfs/AIPR_2007_Gurram.pdf

, Что бумага дает некоторые дальнейшие ссылки, за которыми можно следовать.

10
ответ дан nsanders 24 November 2019 в 17:55
поделиться

Парни здесь требование разработать k самые близкие соседи приближаются к определению вогнутой оболочки ряда точек, который ведет себя "почти линейно на числе очков". Печально их статью, кажется, очень хорошо охраняют, и необходимо будет спросить их для нее.

Вот хороший набор ссылок , который включает вышеупомянутое и мог бы привести Вас находить лучший подход.

2
ответ дан Vinko Vrsalovic 24 November 2019 в 17:55
поделиться

Простое решение должно идти вокруг края полигона. Учитывая текущий край om граничные соединительные точки P0 и P1, следующий вопрос на граничном P2 будет точкой с самым маленьким A, где

H01 = bearing from P0 to P1
H12 = bearing from P1 to P2
A = fmod( H12-H01+360, 360 )
|P2-P1| <= MaxEdgeLength

Тогда Вы устанавливаете

P0 <- P1
P1 <- P2

и повторение, пока Вы не возвращаетесь, где Вы запустили.

Это все еще O (N^2), таким образом, Вы захотите отсортировать свой pointlist немного. Можно ограничить набор точек, который необходимо рассмотреть при каждом повторении при сортировке точек на, скажем, их переносе от центроида города.

1
ответ дан 24 November 2019 в 17:55
поделиться

Хороший вопрос! Я не испытал это вообще, но мой первый выстрел был бы этим повторяющимся методом:

  1. Создают набор N ("не содержавший") и добавляют все точки в Вашем наборе к N.
  2. Выбор 3 точки от N наугад для формирования начального полигона P. Удалите их из N.
  3. Использование некоторый алгоритм точки в полигоне и взгляд на точки в N. Для каждой точки в N, если это теперь содержится P, удалите его из N. Как только Вы находите точку в N, который все еще не содержится в P, продолжите к шагу 4. Если N становится пустым, Вы сделаны.
  4. Вызов точка Вы нашли A. Найдите строку в P самой близкой к A и добавьте посреди него.
  5. Возвращаются к шагу 3

, я думаю, что он работал бы, пока он работает, достаточно хорошо — хорошая эвристика для Ваших начальных 3 точек мог бы помочь.

Удачи!

1
ответ дан mattdm 24 November 2019 в 17:55
поделиться

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

На основе того, сколько детали Вы хотите, создайте фиксированный размерный массив верхних / нижних границ. Поскольку каждая точка вычисляет, в каком столбце E-W это находится, и затем обновите верхние / нижние границы для того столбца. После обработки всех точек, можно интерполировать верхние/ниже точки для тех столбцов, которые отсутствовали.

также стоит сделать быструю проверку заранее на очень длинные тонкие формы и решить ли к мусорному ведру NS или Ew.

1
ответ дан Martin Beckett 24 November 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: