Как найти центр многоугольника

На карте отобразил условный контур и теперь хотел бы в него вывести балун. Создать балун не проблема, не поместить его в центр полигона — проблема.

В математике есть довольно сложные формулы для расчёта центра масс многоугольника, ими я не умею пользоваться. но в яндекс апи есть poly.geometry.getBounds(), который берёт максимально большой контур и находит центр. У меня тоже не получается его применить потому что полигон я создал не стандартным способом( new ymaps.Polygon()), а через map.geoObjects.add(objectManager);

Помогите пожалуйста получить координаты центра полигона.

Если нужно, то вот фиддл, который демонстрирует getBounds().

Медиана треугольника есть диаметр, делящий пополам хорды, параллельные основанию, поэтому на ней лежит центр тяжести (п° 217) площади треугольника. Следовательно, три медианы треугольника, пересекаясь, определяют центр тяжести площади треугольника.

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

219. Четырехугольник.

Центр тяжести площади четырехугольника определяется пересечением двух прямых, которые мы получаем, применяя распределительное свойство центров тяжести (п° 213).

Сначала делим четырехугольник диагональю на два треугольника. Центр тяжести четырехугольника лежит на прямой, соединяющей центры тяжести этих треугольников. Эта прямая и есть первая из двух искомых прямых.

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

220. Многоугольник.

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

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

221. Дуга окружности.

Пусть требуется определить центр тяжести дуги окружности АВ длины s. Отнесем окружность к двум взаимно перпендикулярным диаметрам ОХ и OY, из которых первый проходит через середину С дуги АВ. Центр тяжести лежит на оси ОХ, являющейся осью симметрии. Достаточно поэтому определить 5. Для этого имеем формулу:

Читайте также:  Может ли размагнититься флешка

Пусть будут: а — радиус окружности, с — длина хорды АВ, — угол между осью ОХ и радиусом, проведенным к элементу значения , соответствующие концам дуги АВ. Имеем:

Тогда, принимая В за переменную интегрирования и выполняя интегрирование вдоль дуги АВ, получим:

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

222. Круговой сектор.

Сектор, заключенный между дугой окружности и двумя радиусами ОА и ОВ, может быть разложен промежуточными радиусами на бесконечно малые равные между собою секторы. Эти элементарные секторы можно рассматривать как бесконечно узкие треугольники; центр тяжести каждого из них, по предыдущему, лежит на радиусе, проведенном через середину элементарной дуги этого сектора, на расстоянии двух третей длины радиуса от центра окружности. Равные между собою массы всех элементарных треугольников, сосредоточенные в их центрах тяжести, образуют однородную дугу окружности, радиус которой равен двум третям радиуса дуги сектора. Рассматриваемый случая приводится, таким образом, к отысканию центра тяжести этой однородной дуги, т. е. к задаче, решенной в предыдущем п°.

223. Тетраэдр.

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

Рассмотрим тетраэдр ABCD (фиг. 37); соединим вершину А с центром тяжести I основания BCD; прямая AI есть пересечение диаметральных плоскостей, проходящих

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

Читайте также:  Замена динамиков в наушниках

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

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

Пусть Н и — середины одной пары противоположных ребер (фиг. 38) и М, N — середины двух других противоположных ребер. Фигура HNLM есть параллелограм, стороны которого соответственно параллельны остальным

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

224. Пирамида с многоугольным основанием.

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

Чтобы доказать эту теорему, разложим пирамиду на тетраэдры плоскостями, проведенными через вершину пирамиды и через диагонали основания ABCD (например BD на фиг. 39).

Проведем плоскость пересекающую ребра на расстоянии трех четвертей их длины от вершины. Эта плоскость содержит центры тяжести тетраэдров, а следовательно, и пирамиды. Массы тетраэдров, которые мы предполагаем сосредоточенными в их центрах тяжести, пропорциональны их объемам, следовательно и площадям из оснований (фиг. 39) или также площадям треугольников bad, bed. подобных предыдущим и расположенным в секущей плоскости abcd. Таким образом, искомый центр тяжести совпадает с центром тяжести многоугольника abcd. Последний же лежит на прямой, соединяющей вершину S пирамиды с центром тяжести (подобно расположенным) многоугольника основания.

225. Призма. Цилиндр. Конус.

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

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

Понятие "центр тяжести многоугольника" можно интерпретировать тремя различными способами:

  1. Масса находится только в вершинах, причем каждая вершина "весит" одинаково
  2. Масса равномерно распределена по границе многоугольника
  3. Масса равномерно распределена по области, ограниченной многоугольником.
Читайте также:  Php округлить до сотых

Рассмотрим все три интерпретации в порядке возрастания сложности алгоритма.

1. Масса находится только в вершинах, причем каждая вершина весит одинаково

В этом случае координаты центра тяжести выражаются по формулам:

Таким образом для нашего частного случая имеем:

2. Масса равномерно распределена по границе многоугольника

В этом случае масса ребра пропорциональна его длине. Таким образом каждое ребро мы можем заменить на точечную массу (пропорциональную длине ребра). Затем применяя те же формулы для определения центра тяжести получаем:

Ниже представлена программа, реализующая описанный алгоритм:

3. Масса равномерно распределена по области, ограниченной многоугольником.

Этот случай уже не является столь тривиальным, как два предыдущих. Для построения алгоритма понадобится следующий факт:

Предложение 1
Пусть фигура Ф есть объединение двух других фигур Ф1 и Ф2 (пересекающихся только по границе).
Тогда центр тяжести фигуры Ф выражается так:

(Это утверждение очевидно следует из определения центра тяжести произвольной фигуры и свойства аддитивности интеграла)

Кроме того для треугольника центр тяжести определяется так:

Разобьем наш многоугольник на треугольники. Для каждого треугольника найдем его центр тяжести (Xci, Yci) и площадь (Si). После этого, согласно Предложению 1, координаты центра тяжести многоугольника можно найти следующим образом:

Остается вопрос, как разбить многоугольник на треугольники. Если многоугольник выпуклый, а вершины перечислены в порядке обхода по или против часовой стрелки, то достаточно просто найти одну точку внутри многоугольника (Xm,Ym), а затем разбить многоугольник на N следующих треугольников:

Если же многоугольник выпуклый, но вершины перечислены не в порядке обхода, то их придется упорядочить. Сделать это можно, например, отсортировав вершины по углу между положительной полуосью ОХ и вектором (Xi-Xm, Yi-Ym).

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

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

Оцените статью
Добавить комментарий

Adblock detector