Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно найти оси геометрической симетрии объекта 
:(
    Опции темы
Empirik
Дата 17.8.2012, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



Добрый день. Есть геометрический 2D объект заданный двумя массивами - точек и ребер. Нужно найти все возможные оси его симетрии.  

В общем случае это вытянутый полигон, но возможны и варианты. Подскажите кто-нибудь решал подобную задачу? И если решил то, как ? 
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
Lipetsk
  Дата 17.8.2012, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

Репутация: 2
Всего: 5



идея такая
берем пару точек, предполагаем, они симметричны относительно некой оси, такая ось одна, берем её и проверяем является ли она осью симметрии для остальных
PM   Вверх
Akina
Дата 17.8.2012, 13:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Слишком много вариантов (пар точек), особенно если вершин дофига. Рёбры-то есть! а коли так, то ось симметрии проходит через вершину и середину ребра, если кол-во вершин нечётно, и через две вершины либо две середины рёбер, если нечётно. К тому же "слева и справа" от точек пересечения оси симметрии и фигуры будет одинаковое количество вершин.

Ещё вариант - построить массив углов в любом направлении обхода. Если фигура симметрична, то ищем в удвоенном массиве (alfa(i)=alfa(i+N)) палиндром с длиной, равной количеству углов фигуры N.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 17.8.2012, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Можно вычислить "центр симметрии" фигуры - среднее арифметическое всех координат. Если оси симметрии есть - они проходят через центр симметрии.

Дальше перебираем все центры и углы  по одному. Строим прямую из центра в эту точку. Называем `ось`.  От выбранной точки идем в одну сторону и  другую, перебирая вершины. Каждая пара обязана проектироваться на ось в одной и той-же точке и находится на одном расстоянии от оси. Если такое условие выполняется для всех вершин - `ось` является осью симметрии.


По сравнению с вариантом Akina - несколько более однозначно-линейный вариант ;)


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 17.8.2012, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(ksnk @  17.8.2012,  15:21 Найти цитируемый пост)
Дальше перебираем все центры и углы  по одному. Строим прямую из центра в эту точку. Называем `ось`.  

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.