Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];

Вниз

Расширение фигуры   Найти похожие ветки 

 
Yura   (2009-11-29 20:39) [0]

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


 
Юрий Зотов ©   (2009-11-29 21:26) [1]

1. Найти самую верхнюю (с Ymin) и самую нижнюю (с Ymax) вершины.

2. Пересчитать координаты всех вершин по формуле:
Yнов = Ymin + H * (Yстар - Ymin)  / (Ymax - Ymin)

3. Пропорции проходят в школе. Не стыдно?


 
Yura   (2009-11-29 22:12) [2]

Не совсем понятно Ymin и Ymax вершины. У одной вершины только один Y. Возможно имееш ввиду самая верхняя вершына и самая нижняя? И еще что такое Yстар.


 
TUser ©   (2009-11-29 22:30) [3]

Что значит "расширить на высоту Н"? Удалить вершины от центра или все ребра передвинуть на Н наружу?


 
Yura   (2009-11-29 22:37) [4]

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


 
0x00FF00   (2009-11-29 22:41) [5]

Так... а что должно в итоге стать, скажем, с П-образной фигурой, если Н/2 больше чем расстояние между "ногами" этой П?
Если она обязана выродиться в прямоугольник, то без удаления вершин не обойтись.


 
0x00FF00   (2009-11-29 22:42) [6]

А, стоп. Снова прочитал не то, что написано... =(


 
Плохиш ©   (2009-11-29 23:02) [7]

Да... тут бес руская язЫка не обайтиси...


 
test ©   (2009-11-29 23:04) [8]

Ищи в Гугле масштабирование.


 
Yura   (2009-11-30 00:36) [9]

Yнов = Ymin + H * (Yстар - Ymin)  / (Ymax - Ymin)
Сделал и оказалось что это не верно. Народ да помогите же((


 
Yura   (2009-11-30 00:54) [10]

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


 
Германн ©   (2009-11-30 01:02) [11]


> Yura   (30.11.09 00:36) [9]
>
> Yнов = Ymin + H * (Yстар - Ymin)  / (Ymax - Ymin)
> Сделал и оказалось что это не верно.

Тогда два вопроса:
1. Центр должен остаться на месте?
2. Что значит "Имея координаты вершын и координаты центра могу спокойно росшырить фигуру но это будет только примерно на "Н" а вот точно незнаю как"?


 
Yura   (2009-11-30 01:37) [12]

1. Да центр должен остаться на месте тоесть фигура должна біть чуть больше чем нарисованная и разстояние между бывшей вершиной и новой равна Н.
2. Это значит что в такой способ я могу перенести вершины от центра фигуры но расстояние между старыми вершинами и новыми не будет равно Н а только приблизительно, а мне надо как можно точнее. Ну и это не всегда будет правильным выходом если многоугольник будет не похож на круг.
3. Yнов = Ymin + H * (Yстар - Ymin)  / (Ymax - Ymin)  Действительно увеличивает или уменьшает фигуру но она немного смещена, пробовал подстроить её путём смещения новых координат вершин но плоховато получается, в одних случаях выходит что рёбра пересекаются в других вершины не находятся на одинаковых расстояниях от старых.


 
Игорь Шевченко ©   (2009-11-30 01:38) [13]


> Сроки поджимаю..(


Чьи сроки-то ?


 
test ©   (2009-11-30 01:49) [14]

Yura   (30.11.09 00:54) [10]
В Гугле забанили?


 
Германн ©   (2009-11-30 02:36) [15]


> Yura   (30.11.09 01:37) [12]

Будем считать, что ты не сдал.
"Садись. - Два"!


 
Yura   (2009-11-30 03:04) [16]

Всё понятно могли бы сказать что не знаете.


 
Германн ©   (2009-11-30 03:10) [17]


> Yura   (30.11.09 03:04) [16]
>
> Всё понятно могли бы сказать что не знаете.

Не. Мы знаем, но не понимаем какую шпаргалку ты просишь. :)


 
MBo ©   (2009-11-30 06:03) [18]

Если не принимать во внимание сложные места, как в [5], например, то можно так:
Обходим многоугольник против часовой стрелки.
Для каждого отрезка берем внешнюю единичную нормаль n к нему, и считаем прямую, сдвинутую на n*H. Считаем точки пересечения этой прямой с прямыми соседних сторон. Совокупность точек пересечения есть вершины искомого "расширенного" многоугольника.
Если новый контур должен быть всех точках отстоять на заданное расстоянии от исходного, то это будет уже не многоугольник, а в районе вершин будут дуги окружностей.


 
Юрий Зотов ©   (2009-11-30 09:32) [19]

> Yura   (30.11.09 00:36) [9]

> Yнов = Ymin + H * (Yстар - Ymin)  / (Ymax - Ymin)
> Сделал и оказалось что это не верно.

Это плохо. Это даже ОЧЕНЬ плохо.

> Yura   (30.11.09 01:37) [12]
> 1. Да центр должен остаться на месте

Для этого надо всего лишь немножко подумать и свинуть все вершины, полученные по формуле из [1] на H/2.


 
Думкин ©   (2009-11-30 09:46) [20]

> MBo ©   (30.11.09 06:03) [18]

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

Пусть курит преподавателя и постановку задачи.


 
Виктор Щербаков ©   (2009-11-30 09:49) [21]

Для таких "увеличений" обычно используются скелеты. И, конечно, не обойтись без последующих обходов получившихся вершин.

http://www.graphicon.ru/2005/proceedings/papers/Mestetskiy.pdf


 
Виктор Щербаков ©   (2009-11-30 10:20) [22]

По смыслу вопроса это может быть также сумма Минковского (известная в ГИС как буферная зона). О чем уже написано в [18]. И тут все не менее тоскливо. В общем случае решается как построение многоугольника для каждого отрезка границы с последующим их объединением. И объединением с исходной фигурой. Если есть отлаженный механизм объединения полигонов - проблем никаких.


 
Юрий Зотов ©   (2009-11-30 10:34) [23]

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


 
йцукен   (2009-11-30 10:56) [24]


> Юрий Зотов ©   (30.11.09 10:34) [23]

Горе от ума?


 
Виктор Щербаков ©   (2009-11-30 11:07) [25]


> Юрий Зотов ©   (30.11.09 10:34) [23]


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


 
Думкин ©   (2009-11-30 11:19) [26]

> Юрий Зотов ©   (30.11.09 10:34) [23]
> Эт-та... может, конечно, я чего не понимаю, но я действительно
> не понимаю, зачем нужны высшие материи для простенькой лабораторки
> на первом курсе, где всего-то требуется изменить масштаб?

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


 
Yura   (2009-11-30 12:54) [27]

Уточнил у консультанта. Она сказала что ето нужно делать путём переноса всех ребер на Н паралельно старым новые вершины будут в точках их пересекания. Но не совсем понимаю как их перенести именно на Н.
Спасибо всем за старание помочь и извеняюсь если поставил не совсем коректную задачу.

P.S. На мой русский не обращайте внимания, я его никогда не изучал, только инет.


 
Виктор Щербаков ©   (2009-11-30 13:36) [28]

Тогда похоже на сумму Минковского. Но с "хитрым" соединением линий.


> Но не совсем понимаю как их перенести именно на Н.

Построив перпендикуляры длины Н. Но это отнюдь не основная сложность.


 
Виктор Щербаков ©   (2009-11-30 13:57) [29]

Исходные данные какие? Контур один или больше? Известна ли их ориентация (по/против часовой стрелки)? Могут ли быть самопересечения/самокасания?
Ну... и те же вопросы относительно результата...

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


 
clickmaker ©   (2009-11-30 15:09) [30]

кстати, сабж прозвучал несколько забавно.
Обычно озабочены сужением фигуры...


 
Думкин ©   (2009-11-30 15:44) [31]


> Виктор Щербаков ©   (30.11.09 13:57) [29]

Ну, тут уже к гадалке не ходи, что

1. Фигуры будут либо выпуклы
2. Если и не выпуклы, то ширина  прибавляемая будет сохранять "топологию".

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


 
Yura   (2009-11-30 18:01) [32]

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


 
Думкин ©   (2009-11-30 18:10) [33]

> Yura   (30.11.09 18:01) [32]

Так ломаная или все-таки многоугольник? Тебе тоесть на скелет мясо нарастить надо что ли? Аналитика была? В чем конкретность вопросов тогда?


 
Yura   (2009-11-30 18:21) [34]

По сути єто многоугольник но без віпуклостей, вгнутостей и направлений.


 
Alx2 ©   (2009-11-30 20:42) [35]

Жесть... Разобраться б теперь во всем этом. Не знал, что гомотетия настолько многогранна... 8-)

> Yura  

Нифига себе, сходил за хлебушком, да? :))



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.004 c
2-1260303469
andrewtitoff
2009-12-08 23:17
2010.01.31
idHttp и TWebBrowser


15-1259172371
Footballer
2009-11-25 21:06
2010.01.31
Угадай мелодию :)


2-1260213754
indiegod
2009-12-07 22:22
2010.01.31
Delphi + Excel


2-1260354362
Danco
2009-12-09 13:26
2010.01.31
Компонент NMPOP3


2-1260327565
furyman
2009-12-09 05:59
2010.01.31
Excel в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский