Как найти центр фигуры
Перейти к содержимому

Как найти центр фигуры

  • автор:

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

например Г образной или Т образной?
(только пожалуйста не нужно нести ересь насчет центра тяжести и объемных фигур)
задача из школьной геометрии..

Лучший ответ

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

Таким образом как такового такого термина не существует. Кроме этого нужны оговорки и уточнения. Т. е. о чем идет речь: центр тяжести ли, или ценетр симметрии или что то еще.

Остальные ответы

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

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

Как найти центр фигуры?

jsfiddle Почему при вращении многоугольника вокруг своего центра точка, возвращаемая функцией, тоже вращается? Как можно исправить функцию?

Отслеживать
задан 16 фев 2017 в 10:12
791 4 4 серебряных знака 15 15 бронзовых знаков
а относительно чего вы вращаете фигуру?
16 фев 2017 в 10:22
похоже что вокруг центра — настоящего ;-))
16 фев 2017 в 10:30
Вокруг центра..
16 фев 2017 в 10:31

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

16 фев 2017 в 10:33
неужели не видно что находит какую-то ерунду а не центр
16 фев 2017 в 10:34

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Как несложно догадаться, ваш poly.toLine(); формирует ломаную линию «полигон», в которой первая точка ломаной еще раз повторена в конце ломаной. При этом для пятиугольника ломаная будет состоять из 6 точек, а не из 5 ( seg.length будет возвращать 6, а не 5). Таким образом в вашем цикле усреднения одна из точек пятиугольника (первая) участвует два раза и тем самым «оттягивает» результат усреднения на себя.

Исправьте цикл, например, так

for (var i = 1; i < seg.length; i++)  

и вычисленный центр будет действительно центром.

Отслеживать
ответ дан 8 ноя 2018 в 1:40
AnT stands with Russia AnT stands with Russia
69.4k 3 3 золотых знака 65 65 серебряных знаков 140 140 бронзовых знаков

вращение всегда будет выглядеть эстетично, если вращать вокруг этой точки ((minx+maxx)/2,(miny+maxy)/2) , где minx, miny, maxx, maxy - максимальные и минимальные координаты всех вершин, точку только не надо перерасчитывать в процессе вращения

Как найти центр фигуры

1. Как можно найти центр разных фигур абсолютно любой формы? (клюшка, S-образная фигура, вобщем у любой). Применимо ли понятие центра к таким кривым фигурам? Хотя "центр вращения" есть у любой, типа как балансировка, вокруг такого центра вращение без вибрации будет. Как его найти?

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

The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Linux C++ Qt ARM
Регистрация: 30.11.2008
Сообщений: 3,030

1. Если фигура не имеет округлостей, то разбивай на треугольники. Точка пересечения биссектрис является центром тяжести треугольника. Вычисляешь массу каждого треугольника (если тело однородно, то m/M=s/S, где m и M массы, а s и S площади каждого треугольника и всей фигуры). Затем считаешь каждый центр масс материальной точкой и находишь для этих материальных точек центр тяжести.

Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 27.02.2010 в 15:35 .
Телепат с дипломом
Регистрация: 10.06.2007
Сообщений: 4,929
ROD, не подходит, фигуры произвольной формы.

The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Linux C++ Qt ARM
Регистрация: 30.11.2008
Сообщений: 3,030

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

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

Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 27.02.2010 в 15:34 .
Trust no one.
Регистрация: 07.04.2009
Сообщений: 6,526

Если имеется в виду геометрический центр, то можно попробовать следующий метод:
Например у нас изображение клюшки.
1) Вписывается в прямоугольник минимальной формы.
2) Дальше ставим "указатель" в центр прямоугольника.
3) После идем в цикле во всем "точкам" (пикселям) изображения. И если точка внутри фигуры - то смещаем "указатель" на одну клетку (меньше пикселя) в сторону текущей точки.
4) Проходим по всем точкам и в итоге (по идее) получаем, что "указатель" находится в центре фигуры (геометрическом, который может быть ВНЕ фигуры)

Центр вращения - не может быть предметом поиска, поскольку такого понятие не существует. Есть ОСЬ вращения:
, но она применима только к трехмерным фигурам.

SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Alex Cones
Посмотреть профиль
Найти ещё сообщения от Alex Cones

Вычисление геометрического центра

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

Какие есть алгоритмы для поиска оптимального центра при данном определении? Что гуглить?

seiken ★★★★★
18.08.12 16:37:48 MSK

Сложить все координаты и поделить на количество точек.

frob ★★★★★
( 18.08.12 16:46:37 MSK )

Вот это гуглить.

anonymous
( 18.08.12 16:50:30 MSK )

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

Miguel ★★★★★
( 18.08.12 22:32:27 MSK )

сумма расстояний от данной точки до каждой из данных точек минимальна
Что гуглить?

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

buddhist ★★★★★
( 18.08.12 23:00:24 MSK )
Ответ на: комментарий от buddhist 18.08.12 23:00:24 MSK

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

Но скорее всего ТС сам не знает, чего ему надо.

ansky ★★★★★
( 19.08.12 03:21:38 MSK )
Ответ на: комментарий от ansky 19.08.12 03:21:38 MSK

Но скорее всего ТС сам не знает, чего ему надо.

Это почти наверняка.

frob ★★★★★
( 19.08.12 08:47:03 MSK )

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

Eddy_Em ☆☆☆☆☆
( 19.08.12 11:00:15 MSK )
Ответ на: комментарий от Eddy_Em 19.08.12 11:00:15 MSK

P.S. Плохо ТЗ прочитал. Если центр — точка с минимумом расстояний до краев фигуры, нужно погуглить методику определения центра выпуклой оболочки. Грубо говоря, строим конусы с вершиной в 90° на всех точках, расположенных на границе фигуры. Их пересечение внутри фигуры даст эдакую область, ограничивающую искомый центр. «Глубина» на конусе будет являться расстоянием от искомой точки до соответствующей точки края фигуры.

Eddy_Em ☆☆☆☆☆
( 19.08.12 11:08:01 MSK )

Где-то в литературе я натыкался на искомый автором алгоритм, но не могу припомнить, увы.

Eddy_Em ☆☆☆☆☆
( 19.08.12 11:13:37 MSK )

мне кажется вам нужно просто найти границы вашей фигуры(min,max по X и по Y) и найти центр прямоугольника - он и будет центром фигуры(хотя я мог неправильно прочитать задачу)

TOXA ★★
( 19.08.12 11:36:18 MSK )

Господи, открой им глаза.

anonymous
( 19.08.12 12:14:54 MSK )

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

сумма всех расстояний является «выпуклой». А значит, что любой численный метод будет однозначно сходиться.

Заюзай например fminsearch из octave.

dikiy ★★☆☆☆
( 19.08.12 18:35:47 MSK )
Ответ на: комментарий от ansky 19.08.12 03:21:38 MSK

А ТС просит минимум суммы расстояний, а тут просто сложить и поделить достаточно будет, как фроб сказал.

dikiy ★★☆☆☆
( 19.08.12 18:36:40 MSK )
Ответ на: комментарий от dikiy 19.08.12 18:36:40 MSK

frob ★★★★★
( 19.08.12 19:05:37 MSK )
Ответ на: комментарий от frob 19.08.12 19:05:37 MSK

если просто среднее считать, то получишь точку (7.8250,4.8800) и расстояние 102.90

а если считать как нужно, то будет точка (8.0,5.0) и расстояние 102.62

dikiy ★★☆☆☆
( 19.08.12 19:40:25 MSK )
Ответ на: комментарий от dikiy 19.08.12 19:40:25 MSK

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

dikiy ★★☆☆☆
( 19.08.12 19:43:24 MSK )
Ответ на: комментарий от Eddy_Em 19.08.12 11:13:37 MSK

Гуглить: выкуклая оболочка, эрозия и дилатация…

это к сабжу отношения не имеет.

dikiy ★★☆☆☆
( 19.08.12 20:05:34 MSK )
Ответ на: комментарий от frob 19.08.12 19:05:37 MSK

Среднее не катит даже в одномерном случае: x = 0 1 5, среднее будет 2. Сумма расстояний = 6 = |0-2| + |1-2| + |5-2|, но |0-1| + |1-1| + |5-1| = 5.

anonymous
( 19.08.12 22:35:11 MSK )

Поделить статический момент инерции на площадь фигуры http://sopromat.org/info/1/1_1_.php. Правда это будет центр тяжести сечения, но он ЕМНИП совпадает с геометрическим.

fat_angel ★★★★★
( 20.08.12 00:21:07 MSK )
Последнее исправление: fat_angel 20.08.12 00:24:24 MSK (всего исправлений: 1)

Ответ на: комментарий от anonymous 19.08.12 22:35:11 MSK

Угу. сообразил уже. Спасибо.

frob ★★★★★
( 20.08.12 00:23:22 MSK )
Ответ на: комментарий от fat_angel 20.08.12 00:21:07 MSK

о будет центр тяжести сечения, но он ЕМНИП совпадает с геометрическим.

это то же среднее арифметическое => не катит.

dikiy ★★☆☆☆
( 20.08.12 01:08:33 MSK )
Ответ на: комментарий от anonymous 19.08.12 12:14:54 MSK

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

metar ★★★
( 20.08.12 01:16:22 MSK )
Ответ на: комментарий от dikiy 19.08.12 20:05:34 MSK

Если фигура сложная, проще сделать графическими методами, нежели аналитическими.

Eddy_Em ☆☆☆☆☆
( 20.08.12 09:36:42 MSK )
Ответ на: комментарий от Eddy_Em 20.08.12 09:36:42 MSK

Если фигура сложная, проще сделать графическими методами, нежели аналитическими.

зависит от сложности. если в фигуре есть полости, то графичесий метод неизбеэжно будет перерождаться в аналитический :)

ну и чтобы найти оптимальную точку в любом случае надо численными методами приближать. «графическим» ты лишь стартовую точку хорошую найдешь.

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

dikiy ★★☆☆☆
( 20.08.12 09:44:16 MSK )
Ответ на: комментарий от dikiy 20.08.12 09:44:16 MSK

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

Eddy_Em ☆☆☆☆☆
( 20.08.12 09:47:38 MSK )
Ответ на: комментарий от Eddy_Em 20.08.12 09:36:42 MSK

почитал ссылки повнимательней. Там какая-то жесть :) Может и можно как-то присобачить к сабжу, но зачем? :)

dikiy ★★☆☆☆
( 20.08.12 09:50:02 MSK )
Ответ на: комментарий от dikiy 20.08.12 09:50:02 MSK

Затем, что если у тебя, скажем, сотня-другая точек, то аналитический метод — самое оно, а когда их миллионы или даже миллиарды, быстрее будет геометрическим. При желании можно потом уточнить положение упрощенным аналитическим.

Eddy_Em ☆☆☆☆☆
( 20.08.12 09:52:10 MSK )
Ответ на: комментарий от Eddy_Em 20.08.12 09:47:38 MSK

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

если эффективность графического метода хотя бы меньше O(n^3), то да.

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

dikiy ★★☆☆☆
( 20.08.12 09:57:07 MSK )
Ответ на: комментарий от Eddy_Em 20.08.12 09:52:10 MSK

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

dikiy ★★☆☆☆
( 20.08.12 10:00:18 MSK )
Ответ на: комментарий от dikiy 20.08.12 10:00:18 MSK

Можно. А потом пройтись по центрам кластеров с той же самой операцией.

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

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