Есть ли алгоритм получения точки внутри вогнутых или изогнутых контуров?

Автор Тема: Есть ли алгоритм получения точки внутри вогнутых или изогнутых контуров?  (Прочитано 3330 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Задача получения точки внутри контура, заданного полилинией. Если контур выпуклый, то решений есть несколько, в т.ч. лисп Евгения Елпанова.
Если же контур вогнутый (в форме "Г", "П", "С" и т.п.) или продолговатый извилистый, или "разветвляющийся", то точка (геометрический центр, центр масс, центроид) чаще оказывается вовне.
Наверное, есть и общее решение?
Map 3D, например, для своих целей это делает.
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Спасибо за напоминание о теме "Как определить, лежит ли точка внутри контура" - она сейчас в поисках что-то не попалась.
Задача, лежит ли уже полученная точка внутри контура, кажется решенной. Но мы не нашли в этой теме примера создания точки в площади вогнутых-изогнутых контуров. Не все перепробовали?

Вопрос здесь - получить точку внутри контура любой формы.

Уточню. Точка желательна в интуитивно ожидаемом месте - ближе к средней части площади контура. Чтобы трудозатраты на выискивание созданных точек не были сравнимы с их расстановкой вручную.  ;D
Я не знаю, есть ли математическое понятие для таких точек.
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
ИМХО "удобство" самая трудноалгоритмизируемая вещь. Так-то можно попытаться найти середину BoundingBox, от него найти самую удаленную точку, и по тому же вектору - наиболее приближенную. Что посередине - можно считать "удобным". Только не универсальным ((
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Отмечено как Решение АлексЮстасу 11-10-2024, 17:46:18

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Т.е. математического понятия таких точек нет - мы бы его использовали вместо интуитивного "удобства"...

Полчаса назад сам подумал о примерно такой же схеме.
Только начинать не с середины BoundingBox, а с центра масс - красная точка. (Вдруг окажется в площади).
И брать, наоборот, не самую удаленную точку, а ближайшую, продлевать линию до следующего пересечения, и брать между первой и второй середину. Желтые точки.
Проверить попадание средней в площадь.

Если не попала, то продолжить дальше. И т.д.
Если вдруг все точки пересечения с контуром окажутся на вершинах с сильным изломом (зеленые точки), то продолжить в противоположном направлении.

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