Нахождение стабильного размещения неправильной (невыпуклой) формы

Учитывая изображение 2-мерной неправильной (невыпуклой) формы, как был бы я способный вычислить все пути, которыми это могло лечь стабильное на плоскую поверхность? Например, если форма будет прямоугольником полного квадрата, то она будет, конечно, иметь 4 пути, которыми это стабильно. Круг, с другой стороны, или не имеет никакой стабильной ориентации или каждой точки, стабильная ориентация.

Править: Существует эта миленькая игра под названием Разделитель (Остерегайтесь, захватывающая игра вперед), который кажется близко к тому, что я хочу. Замеченный, что Вы сокращаете кусок дерева, он упал бы на землю и положил бы стабильным способом.

Править: В конце подход, который я проявил, должен вычислить центр массы (формы) и вычислить выпуклую оболочку (использующий OpenCV), и затем цикл через каждую пару вершин. Если центр массовых падений сверху строки, сформированной этими 2 вершинами, это считают стабильным, еще, нет.

10
задан Hao Wooi Lim 20 June 2010 в 10:51
поделиться

3 ответа

Сначала найдите его центр масс (CM). Устойчивое положение - это положение, в котором CM будет выше , если вы сделаете небольшой поворот. Теперь посмотрите на корпус, наименьшую выпуклую область, которая окружает фигуру:

Convex Hull and Centre of Mass
(источник: walkytalky.net )

Если корпус представляет собой многоугольник, то стабильным положением считается положение, в котором форма опирается на одну из сторон, а CM находится прямо над этой стороной (не обязательно над серединой стороны, а где-то над ней.

Если у корпуса есть изгибы (то есть, если форма имеет изгибы, которые касаться корпуса), они должны быть обработаны особым образом. Форма будет стабильной, если опираться на изогнутую кромку, если только CM находится непосредственно над самой нижней точкой кривой, а радиус кривой в этой точке больше, чем высота CM.

Примеры:

  1. Прямоугольник.Корпус - это просто прямоугольник, а CM находится в центре. Форма устойчива с каждой из четырех сторон.
  2. Прямоугольник с полыми сторонами, но углы все еще нетронутыми. Корпус по-прежнему представляет собой исходный прямоугольник, а CM близок к тому, где он был раньше. Все четыре стороны корпуса по-прежнему устойчивы (то есть вы все еще можете опираться на любые два угла).
  3. Круг. КМ в центре, корпус - круг. Стабильных позиций нет, так как радиус кривой всегда равен высоте ЦМ. Слегка прикоснитесь к нему, и он покатится.
  4. Эллипс. CM находится в центре, корпус - это форма. Сейчас есть две устойчивые позиции.
  5. Полукруг. КМ находится где-то на оси симметрии, корпус - это форма. Две стабильные позиции.
  6. Узкий полукруглый полумесяц. Корпус представляет собой полукруг, КМ находится вне формы (но внутри корпуса). Две стабильные позиции.

Illustration of the examples
(источник: walkytalky.net )

(Положение эллипса, отмеченное знаком X, нестабильно, потому что кривизна меньше, чем расстояние до центра масс.)

9
ответ дан 4 December 2019 в 00:23
поделиться

примечание: этот ответ предполагает, что ваша форма является правильным многоугольником.

Для наших целей мы определим положение равновесия как положение, при котором Центр масс находится непосредственно над точкой, которая находится между крайней левой и крайней правой точками контакта с землей объекта (при условии, что земля плоская поверхность, перпендикулярная силе тяжести). Это будет работать во всех случаях для всех форм.

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

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

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

Затем вычислите свой Центр масс. Для многоугольника с известными вершинами и однородной плотностью эта задача сводится к нахождению Центроида ( соответствующий раздел ).

После этого напишите письмо из своего CoM; если точка пересечения CoM и земли находится между этими двумя значениями x, значит, она находится в состоянии равновесия.

Если ваша самая левая и самая правая точки совпадают (т. Е. В круглом объекте), это все равно останется; просто не забывайте быть осторожными с вашими сравнениями с плавающей запятой.

Обратите внимание, что это также можно использовать для измерения «устойчивости» объекта - эта мера представляет собой максимальное расстояние по оси Y, на которое Центр масс может переместиться, прежде чем он выйдет за пределы диапазона двух точек контакта.

РЕДАКТИРОВАТЬ: изящная диаграмма, сделанная наспех

Diagram

Итак, как вы можете использовать ее, чтобы найти все способы, которыми она может разместиться на столе? См .:


РЕДАКТИРОВАТЬ

Программируемый подход

Вместо дорогостоящей вычислительной задачи поворота формы попробуйте это.

Представление вашей формы в вашей программе, вероятно, должно иметь список всех вершин.

Найдите вершины выпуклой оболочки вашей фигуры (в основном, вашей формы, но со всеми вогнутыми вершинами - вершинами, которые "вдавлены" - удалены).

Затем выполните итерацию по каждой из пар соседних вершин выпуклой оболочки (т.е. если бы у меня были вершины A, B, C, D, я бы перебирал AB, BC, CD, DA).

Выполните этот тест :

  1. Проведите линию A через две тестируемые вершины
  2. Проведите линию, перпендикулярную A , проходящую через CoM C .
  3. Найдите пересечение двух прямых (простая алгебра)
  4. Если значение y пересечения находится между значениями y двух вершин, оно стабильно. Если значения y равны, сравните значения x.

Это должно помочь.

Вот пример теста, запущенного на одной паре вершин:

Example test

Если ваша фигура не представлена ​​своими вершинами в вашей структуре данных, вы должны попытаться преобразовать их.Если это что-то вроде круга или эллипса, вы можете использовать эвристику, чтобы угадать ответ (круг имеет бесконечные положения равновесия; эллипс 4, хотя и только две «устойчивые» точки). Если это изогнутая, шаткая неправильная форма, вам придется предоставить свою структуру данных, чтобы я мог помочь программным способом, вместо того, чтобы просто предоставлять эвристику для каждого конкретного случая.

3
ответ дан 4 December 2019 в 00:23
поделиться

Я уверен, что это не самый эффективный алгоритм, но это идея.

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

0
ответ дан 4 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

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