Определение пересекает ли line1 image1(x)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Определение пересекает ли line1 image1(x)

Сообщение TiG » 27.03.2007 (Вт) 9:07

Есть 50 маленьких image1(x) на форме. Линия строиться от двух случайных image1(x). Как определить задевает ли линия ещё какой нибудь image1(x) на форме?.
Все мои игрушки мама разметало ураганом...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.03.2007 (Вт) 9:14

Учим геометрию. Или утояняем вопрос, как расположены имиджи, каие размеры и так далее. И собственно, что значит линия идет от одного имиджа до другого? Имидж не есть точка.
Весь мир матрица, а мы в нем потоки байтов!

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 9:24

имиджы квадратные, размер 360 твипов, расположены по всей форме случайным образом.


Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

Line1.Visible = True

Line1.X1 = Image1(z).Left +180
Line1.Y1 = Image1(z).Top + 180
Line1.X2 = Image1(Index).Left + 180
Line1.Y2 = Image1(Index).Top + 180

if "линия пересекаетя с image1(0..50)" then line1.borderstyle = dot

End Sub


координаты всех image случайны при загрузке формы

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

взять простой пример, два image разного размера, расположить их частично захлестывая друг друга и без геометрии определить соприкасаются ли они (перекрытие) или нет, как это сделать?
Последний раз редактировалось TiG 27.03.2007 (Вт) 10:12, всего редактировалось 2 раз(а).
Все мои игрушки мама разметало ураганом...

Niko
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 102
Зарегистрирован: 16.03.2006 (Чт) 14:43

Сообщение Niko » 27.03.2007 (Вт) 10:02


TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 10:16

Niko
хениально, каждому имиджу приплюсовать 4 стороны и каждую проанализировать на пересечение с линией, повторию хениально! но блин на прогу придётся забить)))
Все мои игрушки мама разметало ураганом...

Niko
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 102
Зарегистрирован: 16.03.2006 (Чт) 14:43

Сообщение Niko » 27.03.2007 (Вт) 10:25

разве это так сложно?

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 10:33

Niko
я слукавил, что у меня их 50) 2000картинок*4стороны, машина будет притормаживать, неприемлемо.
Все мои игрушки мама разметало ураганом...

Niko
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 102
Зарегистрирован: 16.03.2006 (Чт) 14:43

Сообщение Niko » 27.03.2007 (Вт) 10:42

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

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 12:40

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

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 12:50

image сделал zorder, а line в программе bring to front
в запущенном состоянии линия не видна в местах image, как бы это использовать.
Все мои игрушки мама разметало ураганом...

Niko
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 102
Зарегистрирован: 16.03.2006 (Чт) 14:43

Сообщение Niko » 27.03.2007 (Вт) 13:12

Что-бы определить цвет вокруг линии нужно получить координаты точек цвет которых надо определить. Это намного дольше.
И если линия идет вплотную а image цвет будет не серенький :)
---
Нету больше сказки мама, мама...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 15:59

какая функция при выделении хватает все объекты в выделенной области независимо от целостности?
Все мои игрушки мама разметало ураганом...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.03.2007 (Вт) 16:15

Мда... Тяжелый случай.
Lasciate ogni speranza, voi ch'entrate.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 27.03.2007 (Вт) 16:26

alibek :crazy:
Все мои игрушки мама разметало ураганом...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.03.2007 (Вт) 16:33

Функция хватания :)
Блин, это же 10й или 11й класс средней школы, определение точки пересечения функции y = ax+b с функцией y = a или x = a (в общем случае). В твоем случае нужно просто проверить не попадает ли эта точка в соответствующий отрезок, являющийся стороной квадрата.
Если бы я не забыл нафик всю алгебру на пару с геометрией, написал бы за 5 минут.
Лучший способ понять что-то самому — объяснить это другому.

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 29.03.2007 (Чт) 10:15

TiG
Предлагаю пересмотреть изначально весь подход к решению задачи

Если суть в том, чтобы выделить квадратик цветом под проведенной линией, то

откажись от image, и вообще от использования контролов. Напиши процедуру с gdi, и работай с битмапом

создай двумерный массив (количество квадратов по гооризонтали, по вертикали) (или коллекцию в зависисмости от постановки заадчи) и при создании линии проверяй по y = ax+b пересечение, находи верхнюю левую точку квадрата и заливай rectangle
Человек рождён для того, чтобы достичь жизни...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Сообщение TiG » 30.03.2007 (Пт) 8:31

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

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.03.2007 (Пт) 10:42

TiG, "специалист" навешал тебе лапши :)
Попробуй "залезть в код" "объектной линии" и отловить :)

Вспомни алгебру и ищи пересечения линии со сторонами каждого отрезка. Скорость расчета повышается с помощью оптимизаций (скажем, можно забыть про image'ы, которые никак не могут быть "задеты" линией - их координаты меньше координат начала или больше координат конца).


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 10

    TopList