Как найти геометрический центр неправильной фигуры

Центроид треугольника — точка пересечения его медиан

В математике барице́нтр, или геометри́ческий центр, двумерной фигуры — это среднее арифметическое положений всех точек данной фигуры. Определение распространяется на любой объект в n-мерном пространстве. Радиус-вектор барицентра в трёхмерном случае вычисляется как

{displaystyle {vec {r}}_{b}=V^{-1}int _{V}{vec {r}}dV},

где интегрирование выполняется по объёму тела. Другое название барицентра в этом значении — центроид.

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

В физике термин «барицентр» — синоним понятия «центр масс», используемый, в основном, в задачах космической механики. Центр масс объекта является средним арифметическим всех его точек с учётом локальной плотности массы. Для физических объектов с постоянной плотностью центр масс совпадает с барицентром фигуры той же формы.

Ниже барицентр рассматривается в математическом (геометрическом) смысле, о барицентре в физике см. статью Центр масс.

Свойства[править | править код]

Геометрический барицентр выпуклого объекта всегда лежит внутри объекта. Невыпуклый объект может иметь барицентр, лежащий вне фигуры. Барицентр кольца или миски, например, лежат вне фигуры.

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

В частности, барицентром треугольника является точка пересечения его медиан (см. рисунок). Барицентром параллелограмма является точка пересечения его диагоналей, но это неверно для других четырёхугольников.

Барицентр объекта с трансляционной симметрией не определён (или лежит вне пространства фигуры), поскольку сдвиг не имеет фиксированной точки.

Центроид треугольника[править | править код]

  • Барицентр треугольника называется центроидом и лежит на пересечении трёх медиан, также лежит на прямой Эйлера (проходящей и через другие ключевые точки, включая ортоцентр и центр описанной окружности)[1][2].
  • Если в вершины треугольника поместить равные массы, то центр масс (барицентр) полученной системы будет совпадать с центроидом. Более того, центр масс треугольника с равномерно распределённой массой также находится в центроиде.
MA^{2}+MB^{2}+MC^{2}=GA^{2}+GB^{2}+GC^{2}+3MG^{2}[3].
  • Сумма квадратов сторон треугольника равна утроенной сумме квадратов расстояний от центроида до вершин треугольника:
AB^{2}+BC^{2}+CA^{2}=3(GA^{2}+GB^{2}+GC^{2})[3].
  • Центр масс сторон треугольника совпадает с центром вписанной окружности дополнительного треугольника (треугольника с вершинами, расположенными в серединах сторон данного треугольника). Эту точку называют центром Шпикера. Если стороны треугольника сделать из тонкой проволоки одинакового сечения, то центр масс (барицентр) полученной системы будет совпадать с инцентром дополнительного треугольника, или с центром Шпикера.
  • О других свойствах центроида треугольника смотрите ниже.

Минимаксные свойства центроида треугольника[править | править код]

  • Центроид или точка пресечения медиан треугольника является единственной точкой треугольника такой, что проведенные через неё три чевианы разделяют своими концами стороны треугольника на шесть отрезков. При этом произведение длин трёх из этих шести отрезков, не имеющих общих концов, максимально[4].
  • Центроид или точка пересечения трёх медиан является точкой, для которой сумма квадратов расстояний до вершин треугольника принимает наименьшее значение (теорема Лейбница).

Центроид четырёх точек (вершин четырёхугольника)[править | править код]

Центроид (барицентр или центр масс) вершин произвольного четырёхугольника лежит в точке пересечения 3-х отрезков: 1-й отрезок соединяет середины диагоналей, два другие — середины противолежащих сторон. Точка пересечения делит все три отрезка пополам.

Четыре отрезка, каждый из которых соединяет вершину четырёхугольника с центроидом треугольника, образованного оставшимися тремя вершинами, пересекаются в одной точке (центроиде вершин четырёхугольника) и делятся ею в отношении 3:1, считая от вершины.

Центр масс вершин четырёхугольника не обязан совпадать с центром масс самого четырёхугольника как плоской фигуры.

Определение местоположения барицентра[править | править код]

Определение местоположения барицентра однородной плоской фигуры методом отвеса[править | править код]

Барицентр однородной плоской фигуры, такой как фигура (a) на рисунке, можно найти экспериментально с использованием отвеса и булавки путём нахождения центра масс тонкой пластины однородной плотности, имеющей ту же форму. Пластина удерживается булавкой, вставленной ближе к периметру так, чтобы пластина могла свободно вращаться. Отмечаем на пластине прямую, которую образует отвес, прикреплённый к булавке (b). Проделываем то же самое с другим положением булавки. Пересечение двух прямых даст барицентр (c).

Этот метод можно распространить (в теории) на вогнутые фигуры, когда барицентр лежит вне их, а также тела (постоянной плотности), но положение линии отвеса придётся отмечать каким-то иным способом.

Определение местоположения барицентра выпуклой двумерной фигуры методом балансировки[править | править код]

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

Определение местоположения барицентра для конечного множества точек[править | править код]

Барицентр конечного множества из {k} точек {displaystyle mathbf {x} _{1},mathbf {x} _{2},ldots ,mathbf {x} _{k}} в mathbb {R} ^{n} находится по формуле

{displaystyle mathbf {G} ={frac {mathbf {x} _{1}+mathbf {x} _{2}+cdots +mathbf {x} _{k}}{k}}}[5].

Полученная точка {mathbf  {G}} такая, что сумма квадратов расстояний между ней и точками множества является минимальной.

Определение местоположения барицентра с помощью геометрического разложения[править | править код]

(b) Разложение фигуры на простые элементы

(c) Барицентры элементов объекта

Барицентр плоской фигуры X можно вычислить, разделив её на конечное число более простых фигур {displaystyle X_{1},X_{2},dots ,X_{n}}, найдя положение барицентров G_{i} и площадей A_{i} каждой части, а затем вычислив

{displaystyle G_{x}={frac {sum G_{i_{x}}A_{i}}{sum A_{i}}},G_{y}={frac {sum G_{i_{y}}A_{i}}{sum A_{i}}}.}

Дыры в фигуре X, наложения частей, или части, выступающие за фигуру, можно рассматривать как фигуры с отрицательной площадью A_{i}. А именно, знак площади A_{i} нужно выбирать так, чтобы сумма знаков A_{i} для всех частей, включающих точку p, была равна 1, если p принадлежит X, и 0 в противном случае.

Например, фигуру (a) на рисунке легко разделить на квадрат и треугольник с положительным знаком, круглое отверстие с отрицательным (b).

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

{displaystyle x={frac {5times 10^{2}+13.33times {frac {1}{2}}10^{2}-3times pi 2.5^{2}}{10^{2}+{frac {1}{2}}10^{2}-pi 2.5^{2}}}approx 8.5.}

Вертикальное положение вычисляется аналогично.

Та же формула применима для любого трёхмерного объекта, только A_{i} обозначают уже объёмы частей тела X_{i}, а не площади. Формула верна также для пространства mathbb {R} ^{d} любой размерности d при замене площади d-мерными мерами частей.

Определение местоположения барицентра интегрированием[править | править код]

Барицентр подмножества X пространства mathbb {R} ^{n} можно вычислить с помощью интеграла

{displaystyle G={frac {int xg(x);dx}{int g(x);dx}},}

где интегрирование ведётся по всему пространству mathbb {R} ^{n}, а g является характеристической функцией подмножества, принимающей 1 внутри X и 0 вне его[6]. Заметим, что знаменатель равен мере множества X. Формула неприменима к множеству нулевой меры, а также к множествам, для которых интеграл расходится.

Другая формула для вычисления координат барицентра:

{displaystyle G_{k}={frac {int zS_{k}(z);dz}{int S_{k}(z);dz}},}

где Gk является k-й координатой G, а Sk(z) — мера пересечения X с гиперплоскостью, определяемой уравнением xk = z. Снова знаменатель — это мера множества X.

Для плоской фигуры координатами барицентра будут

{displaystyle G_{mathrm {x} }={frac {int xS_{mathrm {y} }(x);dx}{A}};}
{displaystyle G_{mathrm {y} }={frac {int yS_{mathrm {x} }(y);dy}{A}},}

где A — площадь фигуры X, Sy(x) — длина пересечения[неизвестный термин] X с вертикальной прямой с абциссой x, Sx(y) — аналогичная величина при обмене осей.

Определение местоположения барицентра для области, ограниченной графиками непрерывных функций[править | править код]

Координаты барицентра {displaystyle ({bar {x}},;{bar {y}})} области, ограниченной графиками непрерывных функций f и g, таких что f(x)geq g(x) на интервале [a,b], aleq xleq b, задаются выражениями

{displaystyle {bar {x}}={frac {1}{A}}int _{a}^{b}xleft[f(x)-g(x)right];dx}[6].
{displaystyle {bar {y}}={frac {1}{A}}int _{a}^{b}left[{frac {f(x)+g(x)}{2}}right]left[f(x)-g(x)right];dx,}[7]

где A — площадь области (вычисляемая по формуле {displaystyle int _{a}^{b}left[f(x)-g(x)right];dx})[8][9].

Определение местоположения барицентра объекта, имеющего форму буквы L[править | править код]

Метод нахождения барицентра фигуры, имеющей форму буквы L.


CoG of L shape.svg

  1. Фигуру делят на два прямоугольника (см. фигуру (2) на рисунке). Находят барицентры A и B этих двух прямоугольников как пересечение диагоналей. Рисуют отрезок AB, соединяющий барицентры. Барицентр фигуры должен лежать на этом отрезке AB.
  2. Делят фигуру на два прямоугольника другим способом (см. фигуру (3) на рисунке). Находят барицентры C и D этих двух прямоугольников. Проводят отрезок CD, соединяющий барицентры. Барицентр фигуры должен лежать на отрезке CD.
  3. Поскольку барицентр должен лежать как на отрезке AB, так и на отрезке CD, очевидно, что он является точкой пересечения этих двух отрезков — точкой O. Точка O не обязана лежать внутри фигуры.

Барицентры треугольника и тетраэдра[править | править код]

Точка пересечения медиан (барицентр) делит каждую медиану в отношении 2:1. То есть, расстояние от стороны до барицентра равно 1/3 длины проведённой к стороне высоты

В прямоугольном треугольнике расстояние от одного катета до барицентра равно 1/3 длины другого катета

Барицентр треугольника совпадает с пересечением медиан. Барицентр разбивает каждую медиану в отношении 2:1, то есть барицентр находится на расстоянии ⅓ от стороны до противоположной вершины (см. рисунок). Его декартовыми координатами является среднее координат трёх вершин. То есть, если вершинами треугольника являются {displaystyle a=(x_{a},y_{a})}, {displaystyle b=(x_{b},y_{b})} и {displaystyle c=(x_{c},y_{c})}, то координаты барицентра вычисляются по формуле

{displaystyle G={frac {1}{3}}(a+b+c)=left({frac {1}{3}}(x_{a}+x_{b}+x_{c}),{frac {1}{3}}(y_{a}+y_{b}+y_{c})right)}.

Таким образом, барицентр имеет барицентрические координаты {tfrac {1}{3}}:{tfrac {1}{3}}:{tfrac {1}{3}}.

В трилинейных координатах барицентр можно получить одним из эквивалентных способов[10]:

{displaystyle G={frac {1}{a}}:{frac {1}{b}}:{frac {1}{c}}=bc:ca:ab=csc A:csc B:csc C}

{displaystyle =cos A+cos Bcdot cos C:cos B+cos Ccdot cos A:cos C+cos Acdot cos B}
{displaystyle =sec A+sec Bcdot sec C:sec B+sec Ccdot sec A:sec C+sec Acdot sec B.}

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

Площадь треугольника равна 3/2 длины любой стороны, умноженной на расстояние от центроида до стороны[11].

Центроид треугольника лежит на прямой Эйлера между его ортоцентром H и центром его описанной окружности O, ровно вдвое ближе ко второму, чем к первому:

{displaystyle GH=2GO}.

Кроме того, для инцентра I и центра девяти точек N, мы имеем

{displaystyle GH=4GN},
{displaystyle GO=2GN},
{displaystyle IG<HG},
{displaystyle IH<HG},
{displaystyle IG<IO}.

Аналогичными свойствами обладает тетраэдр — его барицентр является пересечением отрезков, соединяющих вершины с барицентрами противоположных граней. Эти отрезки делятся барицентром в отношении 3:1. Результат может быть обобщён на любой n-мерный симплекс. Если вершины симплекса обозначить {displaystyle v_{0},ldots ,v_{n}} и рассматривать вершины как вектора, центроид равен

{displaystyle G={frac {1}{n+1}}sum _{i=0}^{n}v_{i}}.

Геометрический барицентр совпадает с центром масс, если масса равномерно распределена по всему симплексу или сосредоточена в вершинах как n равных масс.

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

Барицентр тетраэдра[править | править код]

Тетраэдр является телом в трёхмерном пространстве, имеющим четыре треугольника в качестве граней. Отрезок, соединяющий вершину тетраэдра с барицентром противоположной грани, называется медианой, а отрезок, соединяющий середины двух противоположных сторон, называется бимедианой. Таким образом, имеется четыре медианы и две бимедианы. Эти шесть отрезков пересекаются в барицентре тетраэдра[12]. Барицентр тетраэдра лежит посередине между точкой Монжа и центром описанной сферы. Эти точки задают прямую Эйлера тетраэдра, являющуюся аналогом прямой Эйлера треугольника.

Барицентр многоугольника[править | править код]

Барицентром самонепересекающегося замкнутого многоугольника, заданного n вершинами (x_{0},y_{0}), (x_{1},y_{1}), ldots , {displaystyle (x_{n-1},y_{n-1})}, является точка {displaystyle (G_{x},G_{y})}, где

{displaystyle G_{x}={frac {1}{6A}}sum _{i=0}^{n-1}(x_{i}+x_{i+1})(x_{i}y_{i+1}-x_{i+1}y_{i})};
{displaystyle G_{y}={frac {1}{6A}}sum _{i=0}^{n-1}(y_{i}+y_{i+1})(x_{i}y_{i+1}-x_{i+1}y_{i})}

и где A является площадью многоугольника (со знаком):

{displaystyle A={frac {1}{2}}sum _{i=0}^{n-1}(x_{i}y_{i+1}-x_{i+1}y_{i})}[13].

В этой формуле предполагается, что вершины пронумерованы вдоль периметра многоугольника. Кроме того, вершина {displaystyle (x_{n},y_{n})} считается той же самой, что и (x_{0},y_{0}).
Заметим, что если точки пронумерованы по часовой стрелке, площадь A, вычисленная выше, будет отрицательной, но координаты барицентра подкорректируют этот случай.

Барицентры конуса и пирамиды[править | править код]

Барицентр конуса или пирамиды расположен на отрезке, соединяющем вершину тела с барицентром основания. Для целого конуса или пирамиды барицентр находится на расстоянии 1/4 от основания к вершине. Для поверхности конуса или пирамиды (боковая поверхность без внутренности и без основания) центроид находится на 1/3 расстояния от основания до вершины.

См. также[править | править код]

  • Центр масс
  • Центроид треугольника
  • Центр тяжести
  • Центр Чебышева[en]
  • Среднее Фреше[en]
  • k-means
  • Список барицентров
  • Теоремы Паппа — Гульдина
  • Замечательные точки треугольника

Примечания[править | править код]

  1. Altshiller-Court, 1925, с. 101.
  2. Kay, 1969, с. 18,189,225–226.
  3. 1 2 Altshiller-Court, 1925, с. 70–71.
  4. Зетель, 1962.
  5. Protter, Morrey, 1970, с. 520.
  6. 1 2 Protter, Morrey, 1970, с. 526.
  7. Protter, Morrey, 1970, с. 527.
  8. Protter, Morrey, 1970.
  9. Larson, Hostetler, Edwards, 1998, с. 458–460.
  10. Encyclopedia of Triangle Centers Архивная копия от 19 апреля 2012 на Wayback Machine by Clark Kimberling. The centroid is indexed as X(2).
  11. Johnson, 2007, с. 173.
  12. Kam-tim, Suk-nam, 1994, с. 53–54.
  13. Bourke, 1997.

Литература[править | править код]

  • Зетель, С. И. Новая геометрия треугольника. Пособие для учителей. — 2-е изд/. — М. : Учпедгиз, 1962. — С. 12.
  • Leung Kam-tim, Suen Suk-nam. Vectors, matrices and geometry. — Hong Kong University Press, 1994.
  • Nathan Altshiller-Court. College Geometry: An Introduction to the Modern Geometry of the Triangle and the Circle. — 2nd. — New York: Barnes & Noble, 1925.
  • Paul Bourke. Calculating the area and centroid of a polygon. — 1997.
  • Roger A. Johnson. Advanced Euclidean Geometry. — Dover, 2007.
  • David C. Kay. College Geometry. — New York: Holt, Rinehart and Winston, 1969.
  • Roland E. Larson, Robert P. Hostetler, Bruce H. Edwards. Calculus of a Single Variable. — 6th. — Houghton Mifflin Company, 1998.
  • Murray H. Protter, Charles B. Morrey Jr. College Calculus with Analytic Geometry. — 2nd. — Reading: Addison-Wesley, 1970.

Ссылки[править | править код]

  • Characteristic Property of Centroid at cut-the-knot
  • Barycentric Coordinates at cut-the-knot
  • Interactive animations showing Centroid of a triangle and Centroid construction with compass and straightedge
  • Experimentally finding the medians and centroid of a triangle at Dynamic Geometry Sketches, an interactive dynamic geometry sketch using the gravity simulator of Cinderella.
  • Главная
  • Список секций
  • Математика
  • ОПРЕДЕЛЕНИЕ ГЕОМЕТРИЧЕСКИХ ЦЕНТРОВ СЛОЖНЫХ ФИГУР

ОПРЕДЕЛЕНИЕ ГЕОМЕТРИЧЕСКИХ ЦЕНТРОВ СЛОЖНЫХ ФИГУР

  • Авторы
  • Руководители
  • Файлы работы
  • Наградные документы

Сенагатуллина А.К. 1


1МБОУ “Биляр-Озерская СОШ” Нурлатского МР РТ

Токарева Е.Г. 1


1МБОУ “Биляр-Озерская СОШ”


Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке “Файлы работы” в формате PDF

Введение.

«Если вы хотите участвовать в большой жизни, то наполняйте свою голову математикой, пока есть к тому возможность. Она окажет вам потом огромную помощь во всей вашей работе.» Эти слова принадлежат М.И. Калинину.

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

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

Цель проекта: найти центр г. Нурлат

Задачи проекта:Рассмотреть приемы исследовательской деятельности, методы, формы и способы научного исследования, научного познания.Формировать мотивацию исследовательской деятельности.Формировать творческую активность.Развивать самостоятельность.

Ожидаемые результаты:

Узнать методы и приемы определения центра сложных фигур, в частности географического центра города Нурлат;ощутить себя в роли экспериментатора, провести простые, но поучительные опыты по определению центров различных фигур;

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

План работы:

1. Выбор направления и темы работы2. Постановка цели и задач3. Изучение теории4. Поиск и подготовка материалов5 Проверка точности теоретических вычислений опытным путем.

6. Выводы7. Оформление работы и Презентация.

Историческая справка

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

Понятие о центре тяжести было впервые изучено примерно 2200 лет назад греческим геометром Архимедом, величайшим математиком древности. С тех пор это понятие стало одним из важнейших в механике, а также позволило сравнительно просто решать некоторые геометрические задачи.

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

Теоретическая часть

1. Понятие о центре тяжести

Каждое тело можно представить как систему материаль­ных частиц, взаимодействующих с Землей. Суммарный результат этого взаимодействия — равнодействующая эле­ментарных сил тяжести. Точка приложения этой равнодей­ствующей называется центром тяжести тела. По­скольку элементарные силы тяжести образуют систему параллельных сил, то центр тяжести обладает всеми свой­ствами центра параллельных сил. Следовательно, при лю­бом положении тела в пространстве положение центра тяжести остается неизменным.

2. Определение центра тяжести плоских фигур

Положение центра тяжести плоских фигур (т. е. весьма тонких тел) можно определить анали­тически и экспериментально.

Аналитически центр тяжести находится как центр параллельных сил. При этом возможны три случая:

фигура имеет две оси симметрии — центр тяжести нахо­дится на пересечении осей;

фигура имеет одну ось симметрии — центр тяжести лежит на этой оси, необходимо отыскать одну координату;

фигура не имеет осей симметрии — положение центра тяжести заранее неизвестно, надо определить две координаты.

Заданную фигуру разбивают на простейшие, положение центров тяжести которых вполне определенно, и затем подсчитывают искомые координаты по следующим формулам:

хс = ;

(1)

yc= ,

где х1, х2, …,хn и у1,,у2,…, уn – координаты центров тяжести простейших фигур;

S1, S2,…, Sn – площади простейших фигур.

3. Центр тяжести простых фигур

Отрезок – его середина;

Параллелограмм – точка пересечения диагоналей;

Треугольник – точка пересечения медиан;

Круг – его центр.

4. Центр тяжести сложной фигуры

Задача 1. Определить координаты цен­тра тяжести однородной пластинки, изобра­женной на рисунке, зная, чтоАН=2см, HG=1,5см, AB=3см, BK=10см, EF=4см, ED=2см.

Решение. Фигура не имеет осей симметрии, следовательно, для определения центра тяжести надо найти две его координаты. Проводим оси Ох и Оу и разби­ваем пластину на три прямоугольника: AHGL, LRKB и EDRF (линии разреза показаны на рисунке). Вычисляем коорди­наты центров тяжести каждого из прямоугольников и их пло­щади:

Для прямоугольника AHGL S1=AH∙HG; x1= ; y1=LB+.

Так как LB=AB-HG=3-1,5=1,5см, то S1=2∙1,5=3 см2; x1==1 см; y1= 1,5+=1,5+0,75=2,25 см .

Для прямоугольника LRKB S2=BK∙LB; x2= ; y2=,

т.е. S2=10∙1,5=15 см2; x2==5 см; y2==0,75 см.

Для прямоугольника EDRF S3=BD∙EF; x3=BK-; y3=LB+,

т.е. S3=2∙4=8 см2; x3=10-=9 см; y3= 1,5+=3,5 см.

По формулам (1) получаем:

Xc==5 см; Yc==1 см.

5. Координаты центра тяжести площади треугольника.

Разобьем площадь треуголь­ника ABD на бесконечно тонкие элемен­тарные полоски, параллельные основа­нию AB. Центр тяжести каж­дой такой полоски расположен в ее середине. Геометрическое ме­сто центров тяжести всех полосок есть медиана OE. На ней поэтому и должен ле­жать центр тяжести всего треугольника. Так как такое же рассуждение спра­ведливо и для двух других медиан, то центр тя­жести треугольника лежит в точке пересече­ния его медиан. При задании вершин треугольника их координатами получим

XC=(xA+xB+xD); (2)

YC=(yA+yB+yD)

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

Практическая часть.

Изначально был найден центр Нурлатского района, он находится вблизи села Тюрнясево. А я задумала найти центр города Нурлат. Сейчас эта тема достаточно популярна. Я в своей работе сделала возможным найти приблизительные координаты этого исторического места, и тем не менее считаю работу выполненной. Положительный момент, который мне помог в вычислениях – это относительно ровный ландшафт, а сложность в том, что конфигурация территории города извилистая. Не каждое территориальное образование имеет географический центр, например, центр территории России невозможно найти, т.к. она имеет острова и Калининградскую область, расположенные обособленно.

Перед началом работы я разобрала теоретические вопросы, изучила методы и приемы определения центра различных фигур. Опробовала эти методы на простейших фигурах, затем перешла к более сложным фигурам, центр тяжести которых определяется методом группировки.

Определение центра города Нурлат Нурлатского района республики Татарстан

1. Для определения границ Нурлата я воспользовалась генеральным планом-схемой, которая размещена на сайте Нурлатского муниципального района http://nurlat.tatarstan.ru/rus/generalniy-plan-goroda-nurlat.htm .(Рис.1)

2. Далее увеличенное изображение карты перенесла на миллиметровую бумагу, т.к. требовалась работа с координатами.(Рис.2)

3. Затем разбила территорию города на множество простейших фигур, координаты центров которых определить относительно легко.(Рис.2)

4. Затем по формулам, описанным выше, вычислила координаты центра.(см Таблица)

5. Для подтверждения результата я применила физические методы исследования, используя простейшие приемы из статики. Для этого я перенесла карту на плоский картон, вырезала изображение по контуру и проверила точку центра, используя метод подвесов и вертикальный упор. Все полученные результаты совпали. (см. Фото3,4)

Центром города Нурлат является точка, которая расположена в области железнодорожного вокзала.

Заключение.

Тема вынашивалась давно, но реализовать ее раньше не удавалось по причине того, что практически ежегодно вносились изменения в границы города. Сначала к территории города были присоединены близлежащие поселки Ключи, Верхний Нурлат, Нижний Нурлат, позже с выделением земельных участков для многодетных семей, к территории города были присоединены новые площади, которые изменили границы города. Последняя версия карты с границами нашего районного центра размещена на сайте Нурлатского муниципального района.

Методы, которые я использовала, с успехом можно применять для определения подобных точек различных территориальных образований. Ожидаемые результаты осуществлены.

Литература и информационные ресурсы:

1. Геометрия. 7-9 классы: учеб. Для общеобразоват. Организаций/[Л.С. Атанасян, В.Ф. Бутузов, С. Б. Кадомцев и др.].- 2-еизд. – М.:Просвещение, 2014. – 383с.

2. Гольдин, И. И. Основные сведения по технической механике: Учеб.пособие для сред.ПТУ / И. И. Гольдин. – 3-е изд.,перераб.и доп. – М. : Высшая школа, 1986. – 96с.

3. https://ru.wikipedia.org/wiki

4. http://nwpi-fsap.narod.ru/lists/statika/5.htm.

5.http://freemath.ru/publ/istorija_matematiki/vyskazyvanija_o_matematike/vyskazyvanija_o_matematike/19-1-0-36

Приложение

Рис.1 Рис.2

Таблица. Координаты центров и площади простейших фигур

i

xi

yi

Si

Xi∙Si

yi∙Si

Для прямоугольников

1

25

30

600

15000

18000

2

21,1

48,5

85,4

1801,94

4141,9

3

31,8

45,7

9,75

310,05

445,575

4

37,3

44,4

22,09

823,957

980,796

5

37,4

41

9,2

344,08

377,2

6

37,5

37,5

25

937,5

937,5

7

37,5

32,5

25

937,5

812,5

8

41

35,5

2

82

71

9

40,7

33,6

3,64

148,148

122,304

10

37,3

26,9

27,6

1029,48

742,44

11

35,8

23,5

1,5

53,7

35,25

12

36,3

20,8

11,7

424,71

243,36

13

39,25

22,25

0,25

9,8125

5,5625

14

38,4

20,8

3,52

135,168

73,216

15

38,9

19,1

3,12

121,368

59,592

16

38,5

11,75

94,5

3638,25

1110,375

17

43,7

12,1

27,06

1182,522

327,426

18

45,65

12,55

6,12

279,378

76,806

19

43

7

4

172

28

20

37

4,4

4,8

177,6

21,12

21

34,3

4,4

3,15

108,045

13,86

22

33

4,1

1,7

56,1

6,97

23

31,15

8,1

0,84

26,166

6,804

24

32,35

12,1

30,74

994,439

371,954

25

25,3

13,55

26,1

660,33

353,655

26

27,5

11,5

2,4

66

27,6

27

21,75

11,7

1,12

24,36

13,104

28

20,65

13,95

0,35

7,2275

4,8825

29

19,2

14,6

2,88

55,296

42,048

30

14,3

13,8

5,5

78,65

75,9

31

12,65

14,1

1,62

20,493

22,842

32

7,85

13,75

22

172,7

302,5

33

10,15

12,25

1,05

10,6575

12,8625

34

8

11,05

0,7

5,6

7,735

35

2,9

14,5

1,3

3,77

18,85

36

10

20

100

1000

2000

37

3,75

18

15

56,25

270

38

4

22

4

16

88

39

4,5

23,75

1,5

6,75

35,625

40

6,75

25,75

5,25

35,4375

135,1875

41

7,35

26,5

2,2

16,17

58,3

42

9,5

27,7

10,8

102,6

299,16

43

12,75

30

45

573,75

1350

44

12,5

40,3

52,5

656,25

2115,75

45

7,6

40,35

32,16

244,416

1297,656

46

8,9

34,25

4,65

41,385

159,2625

47

8,35

36

6,6

55,11

237,6

48

6,1

36,5

1,2

7,32

43,8

49

14,35

46,75

3,25

46,6375

151,9375

50

14,75

48,45

0,45

6,6375

21,8025

51

40

27,4

1,55

62

42,47

52

23,5

2,7

0,54

12,69

1,458

53

29,6

11,6

0,12

3,552

1,392

Для треугольников

1

27,63

47,3

45,5

1257,165

2152,15

2

28,4

46

0,225

6,39

10,35

3

39,8

43,7

0,72

28,656

31,464

4

39,8

40,66

0,6

23,88

24,396

5

40,66

37,33

4

162,64

149,32

6

41.5

34,6

0,36

14,94

12,456

7

41,6

32,73

0,72

29,952

23,5656

8

40,73

31,46

2,42

98,5666

76,1332

9

39.85

29,9

0,045

1,79325

1,3455

10

39,85

29,2

0,165

6,57525

4,818

11

40,43

28,8

0,385

15,56555

11,088

12

40,46

28,7

0,13

5,2598

3,731

13

40,63

27,13

0,78

31,6914

21,1614

14

40,26

27,66

0,3

12,078

8,298

15

39,86

25,73

0,125

4,9825

3,21625

16

39,83

25,03

0,28

11,1524

7,0084

17

39,3

24,93

0,09

3,537

2,2437

18

37,9

23,6

1,44

54,576

33,984

19

37

23,33

0,75

27,75

17,4975

20

37,7

22,66

0,15

5,655

3,399

21

39,3

21,76

0,105

4,1265

2,2848

22

39,3

21,23

0,135

5,3055

2,86605

23

39,4

19,33

0,21

8,274

4,0593

24

40,8

18,4

1,08

44,064

19,872

25

43,1

16,96

5,775

248,9025

97,944

26

45,86

15,46

0,935

42,8791

14,4551

27

47,8

12,83

6,15

293,97

78,9045

28

48,7

14,71

1

48,7

14,71

29

48,98

14,1

1,035

50,6943

14,5935

30

45,86

9,3

1,6

73,376

14,88

31

44,43

7,36

1,235

54,87105

9,0896

32

42,6

5,7

0,9

38,34

5,13

33

39,96

3,93

1,74

69,5478

6,8382

34

37,6

3,6

0,77

28,952

2,772

35

35.6

3,7

0,27

9,612

0,999

36

32,3

4

0,43

13,889

1,72

37

33,3

5,2

0,15

4,995

0,78

38

34,1

5,8

0,6

20,46

3,48

39

33,5

8

8,3

278,05

66,4

40

30,6

8,7

0,2

6,12

1,74

41

29,6

9,7

0,3

8,88

2,91

42

28,7

12

0,1

2,87

1,2

43

26,9

10,8

0,18

4,842

1,944

44

25,7

11,6

0,12

3,084

1,392

45

24,6

11,

1,53

37,638

16,83

46

23,4

1,7

0,29

6,786

0,493

47

22,6

11,9

0,18

4,068

2,142

48

21,9

11,2

0,17

3,723

1,904

49

20,9

13,4

0,12

2,508

1,608

50

17,8

14

0,39

6,942

5,46

51

17

14

0,98

16,66

13,72

52

16

14,2

2,25

36

31,95

53

14,2

12,4

0,36

5,112

4,464

54

4,4

12,3

0,25

1,1

3,075

55

11,3

11,8

0,18

2,034

2,124

56

8,6

11,2

0,12

1,032

1,344

57

8,4

11,8

0,9

7,56

10,62

58

8,1

12,1

1,38

11,178

16,698

59

3,3

13

0,45

1,485

5,85

60

2,4

15,9

0,54

1,296

8,586

61

5,7

21,4

0,17

0,969

3,638

62

3,7

23,4

0,54

1,998

12,636

63

4,7

25,1

0,81

3,807

20,331

64

5,6

26,6

0,24

1,344

6,384

65

8

28,1

1,23

9,84

34,563

66

10,4

36,5

0,62

6,448

22,63

67

9,7

33,3

0,21

2,037

6,993

68

7,2

34,5

0,49

3,528

16,905

69

6,5

35,7

0,3

1,95

10,71

70

5,4

36,7

0,18

0,972

6,606

71

5

41,4

1,35

6,75

55,89

72

4,9

42,9

0,88

4,312

37,752

73

8,4

44,3

4,47

37,548

198,021

74

12,5

46

2,59

32,375

119,14

75

14,3

48,3

0,3

4,29

14,49

Для окружностей

1

10,7

11,4

0,785

8,3995

8,949

2

12,7

12

0,785

9,9695

9,42

3

19,8

13,7

0,785

15,543

10,7545

Сумма

 

1473,8

36306,77

41894,16

Расчеты координат центра карты в рассмотренной системе координат

Фото 1 Фото 2.

Просмотров работы: 2779


Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти


  1. Pionier

    Форумчанин

    Привет!

    вот возник вопрос как определить геометрический центр помещения неправильной формы (на картинке). Либо достраивать до прямоугольника с 4-мя углами и делить длину и ширину пополам, либо просто начертить диагонали- и в месте пересечения будет геом. центр?

    Вложения:

    • Graphic1.JPG

    #1


  2. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.702
    Симпатии:
    2.440
    Адрес:

    Сибирь


    Врукопашную (раскрыть)
    Врукопашную (свернуть)

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

    Предостерегаю вас от распространенной ошибки. Нужно найти реальный геометрический центр или центр тяжести плана реальной квартиры, а не центр какой-то мифической квартиры, план которой состоит из плана реальной квартиры, дополненного несуществующей площадью до правильной фигуры. Такой прием облегчает работу, но искажает смысл.

    Некоторые исследователи предлагают следующий способ. План дома или квартиры нужно перенести на картон, а затем вырезать его по периметру.

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

    Источник


    программно (раскрыть)
    программно (свернуть)

    Ставит точку в центре масс выбранной полилинии
    [​IMG]

    Источник

    Вложения:

    #2


  3. Linetzev

    Форумчанин

    Регистрация:
    31 янв 2009
    Сообщения:
    165
    Симпатии:
    4
    Адрес:

    Чита

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

    Это же чистый сопромат, строительная механика, теоретическая механика без всякого autocada и программирования.

    #3


  4. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.702
    Симпатии:
    2.440
    Адрес:

    Сибирь

    Всего-то делов… посчитать не программно площадь неправильной фигуры и найти статические моменты ::biggrin24.gif:: например нам(геодезистам) в институте не преподавали ни сопромат ни строительную механику, была только основа теоретической механики

    #4


  5. Linetzev

    Форумчанин

    Регистрация:
    31 янв 2009
    Сообщения:
    165
    Симпатии:
    4
    Адрес:

    Чита

    Задача решается просто.

    На примере плоской фигуры.
    1. Фигура устанавливается в произвольную систему координат, например, параллельно одной-двум ее сторонам.
    2. Сама фигура при этом разбивается на составляющие ее элементарные прямоугольники, треугольники, секторы круга или полные круги. Можно также дополнять исходный контур дополнительными элементарными контурами.
    3. Для каждой элементарный фигуры определяется ее площадь (Ai) и координаты центра тяжести в произвольной системе координат (Xci, Yci). Например, центр тяжести прямоугольника находится на пересечении его диагоналей, а у треугольника – на уровне 1/3 его высот. У допонительных элементарных контуров площадь принимается отрицательной.
    4. Вычисляются статические моменты относительно произвольных осей Sxпр=сумма (Ai*Yci) и Sупр=сумма (Ai*Xci)
    5. Вычисляется площадь исходной фигуры A=сумма(Ai)
    6. Координаты центра тяжести исходной фигуры в произвольной системе координат определяются как Xc=Syпр/A и Xc=Syпр/A

    На рисунке показана фигура (полилиния). В ней взято две положительных площади 1 и 2, и две отрицательных (дополнительных) площади 3 и 4. Произвольные оси параллельны сторонам фигуры.

    PS: А по ссылке показан слишком уж мудреный ответ в наиболее общем случае и для криволинейных контуров разной сложности. В линейном или окружном случае он гораздо проще (без интегралов).

    Вложения:

    #5


  6. Quick Eye

    Форумчанин

    Регистрация:
    5 мар 2010
    Сообщения:
    175
    Симпатии:
    4
    Адрес:

    Москва

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

    #6


  7. Linetzev

    Форумчанин

    Регистрация:
    31 янв 2009
    Сообщения:
    165
    Симпатии:
    4
    Адрес:

    Чита

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

    #7

Поделиться этой страницей

Голосование за лучший ответ

Отражение Луны

Мыслитель

(8421)


11 лет назад

провести прямые со всех вершин. пересечение не будет центром?.. просто я сама не знаю.. можно. я подпишусь? послушю других?

александр амелькин

Мудрец

(14339)


11 лет назад

Центр, по-моему, есть только у круга и окружности. Но можно вырезать эту фигуру и найти центр тяжести.

Владимир Костюк

Искусственный Интеллект

(120367)


11 лет назад

Нарисовать её в Компас, Включить “Измерения 2D”. Он выдаст таблицу с координатами центра тяжести плоской фигуры и др.

Here are six different approaches I have tried.

  1. cv2 based center of mass (get_center_of_mass)
  2. shapely based representative point (get_representative_point)
  3. cv2 + skimage.skeleton based center of mass of the skeletonized shape (get_skeleton_center_of_mass)
  4. scipy based furthest distance to border (get_furthest_point_from_edge)
  5. cv2 based version of the previous furthest distance to border -algorithm (get_furthest_point_from_edge_cv2)
  6. the “center point of half-area line” algorithm proposed in this thread by @T.Austin (get_center_of_half_area_line)

Let’s begin with imports and some helper functions

import numpy as np
import cv2
from shapely.geometry import Polygon, LineString, MultiLineString, Point, MultiPoint, GeometryCollection
from skimage.morphology import skeletonize, medial_axis
from scipy.optimize import minimize_scalar
from scipy.ndimage.morphology import distance_transform_edt
import matplotlib.pyplot as plt

H, W = 300, 300

def get_random_contour():
    xs = np.random.randint(0, W, 4)
    ys = np.random.randint(0, H, 4)
    cnt = np.array([[x,y] for x,y in zip(xs,ys)])
    mask = draw_contour_on_mask((H,W), cnt)
    cnt, _ = cv2.findContours(mask, 1, 2)
    cnt = cnt[0]
    return cnt

def draw_contour_on_mask(size, cnt, color:int = 255):
    mask = np.zeros(size, dtype='uint8')
    mask = cv2.drawContours(mask, [cnt], -1, color, -1)
    return mask

def get_center_of_mass(cnt):
    M = cv2.moments(cnt)
    cx = int(M['m10']/M['m00'])
    cy = int(M['m01']/M['m00'])
    return cx, cy

def split_mask_by_line(mask, centroid:tuple, theta_degrees:float, eps:float = 1e-4):
    h, w = mask.shape[:2]
    mask = mask[..., None]
    cx, cy = centroid
    # convert theta first to radians and then to line slope(s)
    theta_degrees = np.atleast_1d(theta_degrees)
    theta_degrees = np.clip(theta_degrees, -90+eps, 90-eps)
    theta_rads = np.radians(theta_degrees)
    slopes = np.tan(theta_rads)[:, None]
    # define the line(s)
    x = np.arange(w, dtype="int32")
    y = np.int32(slopes * (x - cx) + cy)
    _y = np.arange(h, dtype="int32")
    # split the input mask into two halves by line(s)
    m = (y[..., None] <= _y).T
    m1 = (m * mask).sum((0,1))
    m2 = ((1 - m) * mask).sum((0,1))
    m2 = m2 + eps if m2==0 else m2
    # calculate the resultant masks ratio
    ratio = m1/m2
    return (x.squeeze(), y.squeeze()), ratio

def get_half_area_line(mask, centroid: tuple, eps: float = 1e-4):
    # find the line that splits the input mask into two equal area halves
    minimize_fun = lambda theta: abs(1. - split_mask_by_line(mask, centroid, theta, eps=eps)[1].item())
    bounds = np.clip((-90, 90), -90 + eps, 90 - eps)
    res = minimize_scalar(minimize_fun, bounds=bounds, method='bounded')
    theta_min = res.x
    line, _ = split_mask_by_line(mask, centroid, theta_min)
    return line

Now let’s define the functions for finding the visual center

def get_representative_point(cnt):
    poly = Polygon(cnt.squeeze())
    cx = poly.representative_point().x
    cy = poly.representative_point().y
    return cx, cy

def get_skeleton_center_of_mass(cnt):
    mask = draw_contour_on_mask((H,W), cnt)
    skel = medial_axis(mask//255).astype(np.uint8) #<- medial_axis wants binary masks with value 0 and 1
    skel_cnt,_ = cv2.findContours(skel,1,2)
    skel_cnt = skel_cnt[0]
    M = cv2.moments(skel_cnt) 
    if(M["m00"]==0): # this is a line
        cx = int(np.mean(skel_cnt[...,0]))
        cy = int(np.mean(skel_cnt[...,1]))
    else:
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])
    return cx, cy

def get_furthest_point_from_edge(cnt):
    mask = draw_contour_on_mask((H,W), cnt)
    d = distance_transform_edt(mask)
    cy, cx = np.unravel_index(d.argmax(), d.shape)
    return cx, cy

def get_furthest_point_from_edge_cv2(cnt):
    mask = draw_contour_on_mask((H,W), cnt)
    dist_img = cv2.distanceTransform(mask, distanceType=cv2.DIST_L2, maskSize=5).astype(np.float32)
    cy, cx = np.where(dist_img==dist_img.max())
    cx, cy = cx.mean(), cy.mean()  # there are sometimes cases where there are multiple values returned for the visual center
    return cx, cy

def get_center_of_half_area_line(cnt):
    mask = draw_contour_on_mask((H,W), cnt, color=1)
    # get half-area line that passes through centroid
    cx, cy = get_center_of_mass(mask)
    line = get_half_area_line(mask, centroid=(cx, cy))
    line = LineString(np.array(list(zip(line))).T.reshape(-1, 2))
    # find the visual center
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    contours = [c for c in contours if cv2.contourArea(c) > 5]
    polys = [Polygon(c.squeeze(1)) for c in contours if len(c) >= 3]  # `Polygon` must have at least 3 points
    cpoint = Point(cx, cy)
    points = []
    for poly in polys:
        isect = poly.intersection(line)
        if isect.is_empty:
            # skip when intersection is empty: this can happen for masks that consist of multiple disconnected parts
            continue
        if isinstance(isect, (MultiLineString, GeometryCollection)):
            # take the line segment intersecting with `poly` that is closest to the centroid point
            isect = isect.geoms[np.argmin([g.distance(cpoint) for g in isect.geoms])]
        if isinstance(isect, Point):
            # sometimes the intersection can be a singleton point
            points.append(isect)
            continue
        isect = isect.boundary
        if poly.intersects(cpoint):
            points = [isect]
            break
        else:
            points.append(isect)

    if len(points) == 0:
        # multiple reasons for this one:
        # - if len(polys)==0
        # - if len(polys)==1, but for some reason the line does not intersect with polygon
        # - if the above search does not match with any points

        return cx, cy

    points = points[np.argmin([p.distance(cpoint) for p in points])]
    if isinstance(points, Point):
        return np.array(points.xy)
    
    points = [np.array(p.xy).tolist() for p in points.geoms]
    visual_center = np.average(points, (0, 2))
    return visual_center

Here’s my analysis on the topic:

  • get_center_of_mass is the fastest but, as mentioned in this thread, the center of mass can be located outside the shape for non-convex shapes.
  • get_representative_point is also fast but the identified point, although always guaranteed to stay inside the shape (or with minor edits even multiple disconnected shapes!), does not have much if anything to do with the center of the object
  • get_skeleton_center_of_mass returns a perceptually nice center point, but is slow and requires logic for disconnected shapes
  • get_furthest_point_from_edge is relatively fast, generalizes easily to disconnected shapes and the center point is visually pleasing
  • get_furthest_point_from_edge_cv performs otherwise similarly as get_furthest_point_from_edge but is an order of magnitude faster
  • get_center_of_half_area_line performs neatly: the result is usually closest to where I myself would annotate the visual center. Unfortunately, at least my implementation is quite slow.
rows = 4
cols = 4
markers = ['x', '+', "*", "o", '^', "v"]
colors = ['r','b','g','orange', 'purple', 'lime']
functions = [
    get_center_of_mass, 
    get_representative_point, 
    get_skeleton_center_of_mass, 
    get_furthest_point_from_edge,
    get_furthest_point_from_edge_cv2,
    get_center_of_half_area_line
]

plt.figure(figsize=(2*cols, 2*rows, ))
for i in range(rows*cols): 
    cnt = get_random_contour()
    mask = draw_contour_on_mask((H,W), cnt)
    
    plt.subplot(cols,rows, i+1)
    plt.imshow(mask, cmap='gray')
    for c, m, f in zip(colors, markers, functions):
        l = f.__name__
        cx, cy = f(cnt)
        plt.scatter(cx, cy, c=c, s=100, label=l, marker=m, alpha=0.7)

plt.tight_layout()    
plt.legend(loc=3)
plt.show()

enter image description here

Here’s how the algorithms, run on 100 random examples, compare in speed:

N_EXAMPLES = 100
cnts = [get_random_contour() for _ in range(N_EXAMPLES)]

for fn in functions:
    print(fn.__name__+":")
    %time _ = [fn(cnt) for cnt in cnts]
    print("~ "*40)
get_center_of_mass:
CPU times: user 2.35 ms, sys: 777 µs, total: 3.13 ms
Wall time: 1.91 ms
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
get_representative_point:
CPU times: user 15.7 ms, sys: 0 ns, total: 15.7 ms
Wall time: 14.8 ms
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
get_skeleton_center_of_mass:
CPU times: user 6.52 s, sys: 104 ms, total: 6.62 s
Wall time: 6.62 s
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
get_furthest_point_from_edge:
CPU times: user 413 ms, sys: 63 µs, total: 413 ms
Wall time: 413 ms
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
get_furthest_point_from_edge_cv2:
CPU times: user 47.8 ms, sys: 0 ns, total: 47.8 ms
Wall time: 47.8 ms
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
get_center_of_half_area_line:
CPU times: user 1.66 s, sys: 0 ns, total: 1.66 s
Wall time: 1.66 s
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 

Добавить комментарий