![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| welt |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 21.5.2005 Где: UnderGround Репутация: нет Всего: нет |
У меня есть, допустим, два (хотя их может быть больше) элемента- прямоугоьника, у каждого из них есть какое-то число контактов (окружностей)... мне нужно сделать так, чтобы щелкнув на один контакт 1-го прямоугольника и на другой контакт второго, они соединились линией...
но может получиться ситуация, когда линия пересечет прямоугольник.. можете подсказать алгоритм? (кажется метод ветвей и границ). Это что-то наподобие соединения блоков в программе Vissim или HiAsm.. Кое что набросал в делфи. файл прикрепил. P.S. в моей программе кнопка "Q" - включение режима рисования блоков. Для рисования надо на форме "растянуть прямоугольник" наподобие того как в винде выделяем несколько файлов. режим "W"- режим выбора контакта. режим рисования отключен. Пока что можно выбрать контакт только у последнего нарисованного блока. Это сообщение отредактировал(а) welt - 12.6.2007, 14:59 Присоединённый файл ( Кол-во скачиваний: 13 )
proekt.rar 2,91 Kb |
|||
|
||||
| Leos239 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 26.11.2006 Репутация: нет Всего: нет |
т.е. у прямоугольника есть ограниченный набор окружностей?
Может тогда сделать просто: вот имеем 2 прямоугольника, у каждого набор "особых точек" (окружностей). Тогда соединяем ближайшие окружности первого и второго прямоугольника (т.е. перебираем все возможные советания n * (n - 1) / 2). Тогда вроде налажения линии на прямоугльник не будет. |
|||
|
||||
| welt |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 21.5.2005 Где: UnderGround Репутация: нет Всего: нет |
Leos239,
набор особых точек - это конечно. но в том-то и дело, что надо самому указать(мышкой), какие два контакта подлежат соединению! Это сообщение отредактировал(а) welt - 12.6.2007, 18:42 |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 6 Всего: 27 |
Программу не смотрел, но если блоки рисуешь на имаге, то могу предложить создать второй невидимый имаг, по типу Бэк-буфера. На нём рисуешь только контакты, но только цветом соответствующем номеру блока+номер контакта.
Например блок №1 с двумя контактами рисуется на основном имаге, а на втором рисуются его контакты с цветом Color1=10+1 и Color2=10+2. блок №2 с тремя контактами рисуется на основном имаге, а на втором рисуются его контакты с цветом Color1=20+1, Color2=20+2 и Color2=20+3. и т.д. Тогда клацая мышкой, проверяешь цвет пикселя второго имага и получаешь номер элемента и номер контакта: Номер := Цвет_пикселя div 10 Номер_контакта := Цвет_пикселя - Номер Добавлено через 2 минуты и 54 секунды А соединение двух контактов можно сделать так: выстраивать все элементы по сетке, соответственно вести линии тоже по сетке. А маршрут этой линии вычисляется обычным волновым алгоритмом. Тогда никаких пересечений не будет. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |