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

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

  • автор:

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

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

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

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

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

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

Xc = (M1*X1 + . + MN*XN)/M Yc = (M1*Y1 + . + MN*YN)/M

(Xi, Yi) — координаты i-ой вершины многоугольника,
Mi — масса i-ой вершины.
M — масса всех вершин (M = M1 + . + MN)

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

Xc = (X1 + . + XN)/N Yc = (Y1 + . + YN)/N,
что никакой сложности в реализации не представляет.

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

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

Xc = (L1*X’1 + L2*X’2 + . + LN*X’N) / P Yc = (L1*Y’1 + L2*Y’2 + . + LN*Y’N) / P

(X’i, Y’i) — координаты, середины i-ого ребра.
Li — длина i-ого ребра
P — периметр многоугольника (P = L1 + . + LN) Обозначим эти формулы (*)

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

#include #include #define MAX 100 int n; double x[MAX]; double y[MAX]; // возвращает длину отрезка с координатами (x1,y1)-(x2,y2) double length(double x1,double y1,double x2,double y2) < return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); >void main() < // будем вводить данные из файла freopen("input.txt","r",stdin); while (scanf("%d",&n)==1) < for(int j=0; j// применяем формулы (*) double l = length(x[i],y[i],x[(i+1)%n],y[(i+1)%n]); xc += l * (x[i]+x[(i+1)%n]) / 2; yc += l * (y[i]+y[(i+1)%n]) / 2; P += l; > xc/=P; yc/=P; printf("%lf %lf\n",xc,yc); > >

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

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

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

Xc = (Xc1*S1 + Xc2*S2) / S Yc = (Yc1*S1 + Yc2*S2) / S

(Xc, Yc) — координаты центра тяжести Ф
(Xc1, Yc1) — координаты центра тяжести Ф1
(Xc2, Yc2) — координаты центра тяжести Ф2
S — площадь Ф
S1 — площадь Ф1
S2 — площадь Ф2

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

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

Xc = (X1 + X2 + X3) / 3 Yc = (Y1 + Y2 + Y3) / 3

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

Xc = (Xc1*S1 + . + XcN*SM) / S Yc = (Yc1*S1 + . + YcN*SM) / S

M — количество треугольников, на которые мы разбили многоугольник
S — площадь всего многоугольника (S = S1 + . + SM)
Обозначим эти формулы (**)

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

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

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

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

#include #include #define MAX 100 double x[MAX], y[MAX]; int n; // возвращает площадь треугольника по координатам вершин // площадь - это половина модуля векторного произведения двух сторон double square(double x1,double y1,double x2,double y2,double x3,double y3) < return 0.5*fabs((x2-x3)*(y1-y3) - (x1-x3)*(y2-y3)); >int main(void) < freopen("input.txt","r",stdin); while (scanf("%d", &n) == 1) // количество вершин в многоугольнике < double xm=0, ym=0; for(int i=0; ixm/=n; ym/=n; // координаты точки внутри многоугольника double s = 0; double xc=0,yc=0; // Шагаем по треугольникам. Их n штук for(i=0; i// используем полученные формулы (**) double s1 =square(xm,ym,x[i],y[i],x[(i+1)%n],y[(i+1)%n]); xc+=s1*(xm+x[i]+x[(i+1)%n])/3; yc+=s1*(ym+y[i]+y[(i+1)%n])/3; s+=s1; > xc/=s; yc/=s; printf("%lf %lf\n", xc, yc); > return 0; >

К статье можно в текстовом формате.

Нахождение центра многоугольника

Author24 — интернет-сервис помощи студентам

Найти координаты всех вершин правильного многоугольника, зная координаты центра и радиус описанной окружности.
Дан правильный N-угольник с центром в точке (X, Y) и с радиусом описанной окружности R. Найти.

Вращение вписанного многоугольника вокруг центра окружности
Создать анимацию, позволяющее при нажатии на кнопку «Движение», воспроизводить вращение вписанного.

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

Нахождение центра тяжести
Найти координаты центра тяжести верхней полусферы x2+y2+z2≤R2, плотность в каждой точке.

Заблокирован

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

Нельзя — возьмём 10-угольник: квадрат, у которого 6 вершин добавлены на одну сторону. Тогда центр тяжести перетащится к этой стороне

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32810 / 21148 / 8147
Регистрация: 22.10.2011
Сообщений: 36,408
Записей в блоге: 8

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

4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10

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

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

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

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

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

Нахождение радиуса, диаметра и центра графа
Помогите написать программу для нахождения радиуса, диаметра и центры графа 🙁

Или воспользуйтесь поиском по форуму:

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

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

адача 43. Центр тяжести многоугольника. Пусть n -угольник Q задан своими вершинами Qk и q = (qi,k) (i = 0, 1; k = 0, 1, . , n-1; n ³ 1) — матрица их прямоугольных координат:

Составить рекурсивную программу-функцию определения координат центра тяжести O многоугольника Q.

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

центр тяжести отрезка (двуугольника) Q = Q0 Q1 есть середина отрезка [Q0, Q1] (база рекурсии);
центр тяжести n -угольника Q0 Q1 . Qn-2 Qn-1 строится так. Пусть уже построена точка P — центр тяжести ( n — 1)-угольника Q0 Q1 . Qn-2 . Тогда искомый центр тяжести O есть точка отрезка [P, Qn-1], делящая его в отношении ( n— 1):1, считая от вершины Qn-1 (декомпозиция задачи).

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

Как найти центр тяжести?

Две вилки и монета в равновесии на кромке бокала

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

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

Библиотека элементарных фигур.

Формулы расчета центров тяжести и площадей плоских фигур

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

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

Оставшиеся восемь фигур являются самыми распространенными, поэтому они и были включены в эту своеобразную библиотеку. В нашей классификации эти элементы не являются базовыми. Прямоугольник, параллелограмм и трапецию можно составить из двух треугольников. Шестиугольник – это сумма из четырех треугольников. Сегмент круга — это разность сектора круга и треугольника. Кольцевой сектор круга — разность двух секторов. Круг – это сектор круга с углом α=2*π=360˚. Полукруг – это, соответственно, сектор круга с углом α=π=180˚.

Расчет в Excel координат центра тяжести составной фигуры.

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

Чертеж составной фигуры с координатами центра тяжести

Составное сечение представляет собой прямоугольник (с размерами a1 =80 мм, b1 =40 мм), к которому слева сверху добавили равнобедренный треугольник (с размером основания a2 =24 мм и высотой h2 =42 мм) и из которого справа сверху вырезали полукруг (с центром в точке с координатами x03 =50 мм и y03 =40 мм, радиусом r3 =26 мм).

В помощь для выполнения расчета привлечем программу MS Excel или программу OOo Calc. Любая из них легко справится с нашей задачей!

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

В ячейках со светло-желтой заливкой считаем результаты .

Синий шрифт – это исходные данные.

Черный шрифт – это промежуточные результаты расчетов.

Красный шрифт – это окончательные результаты расчетов.

Начинаем решение задачи – начинаем поиск координат центра тяжести сечения.

Исходные данные:

1. Названия элементарных фигур, образующих составное сечение впишем соответственно

в ячейку D3: Прямоугольник

в ячейку E3: Треугольник

в ячейку F3: Полукруг

2. Пользуясь представленной в этой статье «Библиотекой элементарных фигур», определим координаты центров тяжести элементов составного сечения xci и yci в мм относительно произвольно выбранных осей 0x и 0y и запишем

в ячейку D4: =80/2=40,000

xc 1 = a 1 /2

в ячейку D5: =40/2=20,000

yc 1 = b 1 /2

в ячейку E4: =24/2=12,000

xc 2 = a 2 /2

в ячейку E5: =40+42/3=54,000

yc 2 = b 1 + h 2 /3

в ячейку F4: =50=50,000

xc 3 = x03

в ячейку F5: =40-4*26/3/ПИ()=28,965

yc 3 = y 03 -4* r3 /3/π

3. Рассчитаем площади элементов F 1 , F 2 , F3 в мм2, воспользовавшись вновь формулами из раздела «Библиотека элементарных фигур»

в ячейке D6: =40*80=3200

F1 = a 1 * b1

в ячейке E6: =24*42/2=504

F2 = a2 * h2 /2

в ячейке F6: =-ПИ()/2*26^2=-1062

F3 = -π/2* r3 ^2

Площадь третьего элемента – полукруга – отрицательная потому, что это вырез – пустое место!

Таблица Excel с расчетом координат центра тяжести составной фигуры

Расчет координат центра тяжести:

4. Определим общую площадь итоговой фигуры F0 в мм2

в объединенной ячейке D8E8F8: =D6+E6+F6=2642

F0 = F 1 + F 2 + F3

5. Вычислим статические моменты составной фигуры Sx и Sy в мм3 относительно выбранных осей 0x и 0y

в объединенной ячейке D9E9F9: =D5*D6+E5*E6+F5*F6=60459

Sx = yc1 * F1 + yc2 * F2 + yc3 * F3

в объединенной ячейке D10E10F10: =D4*D6+E4*E6+F4*F6=80955

Sy = xc1 * F1 + xc2 * F2 + xc3 * F3

6. И в завершение рассчитаем координаты центра тяжести составного сечения Xc и Yc в мм в выбранной системе координат 0x — 0y

в объединенной ячейке D11E11F11: =D10/D8=30,640

Xc = Sy / F0

в объединенной ячейке D12E12F12: =D9/D8=22,883

Задача решена, расчет в Excel выполнен — найдены координаты центра тяжести сечения, составленного при использовании трех простых элементов!

Заключение.

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

Если сечение составлено из прокатных профилей – уголков и швеллеров, то их нет необходимости разбивать на прямоугольники и квадраты с вырезанными круговыми «π/2»- секторами. Координаты центров тяжести этих профилей приведены в таблицах ГОСТов, то есть и уголок и швеллер будут в ваших расчетах составных сечений базовыми элементарными элементами (о двутаврах, трубах, прутках и шестигранниках говорить нет смысла – это центрально симметричные сечения).

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

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

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

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

Центр тяжести системы «вилки+монета» всегда располагается на фиксированном расстоянии по вертикали вниз от края монеты, который в свою очередь является точкой опоры. Это положение устойчивого равновесия! Если покачать вилки, то сразу становится очевидным, что система стремится занять свое прежнее устойчивое положение! Представьте маятник – точка закрепления (=точка опоры монеты на кромку бокала), стержень-ось маятника (=в нашем случае ось виртуальная, так как масса двух вилок разведена в разные стороны пространства) и груз внизу оси (=центр тяжести всей системы «вилки+монета»). Если начать отклонять маятник от вертикали в любую сторону (вперед, назад, налево, направо), то он неизбежно под действием силы тяжести будет возвращаться в исходное устойчивое состояние равновесия (это же самое происходит и с нашими вилками и монетой)!

Кто не понял, но хочет понять – разберитесь самостоятельно. Это ведь очень интересно «доходить» самому! Добавлю, что этот же принцип использования устойчивого равновесия реализован и в игрушке ванька–встань-ка. Только центр тяжести у этой игрушки расположен выше точки опоры, но ниже центра полусферы опорной поверхности.

Ссылка на скачивание файла: raschet-tsentra-tyazhesti (xls 17,0KB).

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *