![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Люди, допустим у меня есть две прямые, известны их координаты, как найти координаты точки их пересечения, я решил эту задачу геометрически, но вышел слишком грамоздкий ответ, может как полегче можно ?
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
| Полудненко Олег |
|
|||
|
Українець ![]() ![]() Профиль Группа: Участник... Сообщений: 556 Регистрация: 13.8.2003 Репутация: 1 Всего: -11 |
Находим уравнения прямой для обоих прямых, а именно k и b, далее приняв значения по y равными находим точку пересечения по x, подставляем точку пересечения по оси абсцисс в любое из двух уравнений прямых и подсчитываем точку пересечения по y.
|
|||
|
||||
| Dmitry V.Abramov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Нечто древнее и не очень оптимальное, но рабочее. Есть простор для оптимизации.
--------------------
/DVA |
|||
|
||||
| Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Не пробовал, но уверен что правильно, спасибо !
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
гы а если так
рисуем прямую номер 1 потом прямую номер 2 и проверяем а не совпадают ли у нас там гдето координаты точек? а? будет быстро работать -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Black_Joker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 9.11.2002 Где: Таганрог Репутация: нет Всего: нет |
Есть и такой вариант.
Создаем массивы с элементами обеих кривых (+ массивы индексов), Переписываем массивы в 1-н, смотрим, а не совпадут ли где нибудь массивы типа ..., i, i, ... В смысле 2-а одинаковых индекса будут стоять рядом. Применимо для любого числа кривых. |
|||
|
||||
| Полудненко Олег |
|
|||
|
Українець ![]() ![]() Профиль Группа: Участник... Сообщений: 556 Регистрация: 13.8.2003 Репутация: 1 Всего: -11 |
oleg1973 а на каком помежутке будем искать пересеченме? Ведь если прямые практически паралельно, то енто будет НЕМНОГО долго!!! Black_Joker аналогично с массивом, тока тут ещё всё завязывается на размере массива!
|
|||
|
||||
| Полудненко Олег |
|
|||
|
Українець ![]() ![]() Профиль Группа: Участник... Сообщений: 556 Регистрация: 13.8.2003 Репутация: 1 Всего: -11 |
Dmitry V.Abramov Чем тебе не нравится мой способ? Ведь он намноге меньше
|
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
Полудненко Олег
интересно чеж там долгово? рисуеш одновременно две прямые (алгоритм не важен хоть любимым брезенхамом) и сравниваеш тут же координаты точки от 1 прямой и от 2 прямые то в любом случае рисовать нада -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
По-моему, самый оптимальный алгоритм, предложенный Dmitry V.Abramov, быстрее всего работает
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
| Полудненко Олег |
|
|||
|
Українець ![]() ![]() Профиль Группа: Участник... Сообщений: 556 Регистрация: 13.8.2003 Репутация: 1 Всего: -11 |
oleg1973 кода ты расиуеш прямые, то ты указываеш только две точки (я надеюсь), а не рисуеш их поточечно. Енто раз. Два, и самое главное!!!, пересечение этих двух прямых может и не наблюдаться визуально, имхо оно может оказаться высоко в небе или под землёй, но не у тя на мониторе!!!
|
|||
|
||||
| Полудненко Олег |
|
|||
|
Українець ![]() ![]() Профиль Группа: Участник... Сообщений: 556 Регистрация: 13.8.2003 Репутация: 1 Всего: -11 |
Имеем 8 координат 4-х точек, которые пренадлежат исходным прямым: (x1,y1),(x2,y2),(x3,y3) & (x4,y4).
Вся наёбка идёт по ур-нию прямой вида y=k*x+b. Находим k1:=(y1-y2)/(x2-x1); k2:=(y3-y4)/(x4-x3); Находим b1:=(Form1.Image1.Height-y2-x2*k1); b2:=(Form1.Image1.Height-y4-x4*k2); Далее находим отчку пересечения по x= (b2-b1)/(k1-k2); Далее подставляем полученный х в y=k1*x+b1 откуда находим у. Так в четыре строки находим координаты точки пересечения!!!! |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
хаха интересная теория знаеш когда оно само рисуется? когда хардварно (vesa по стандарту поддерживает) ну а так в любом случае любой алгоритм будет просчитывать каждую точку прямой и не важно где на экране или в бэк буфере канешно если ты используеш там супер пупер компоненты или либы которым на входе даеш 2 точки и получаеш прямую то оно может и показатся что все так просто так что не вижу смысла сначало рисовать линии а потом пытатся определить пересикаемость их если можно сделать все за 1 раз непосредственно во время рисования -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
oleg1973 а кто сказал, что их вообще надо рисовать, допустим у тебя массив из 100 прямых, нужно определить все точки пересечения, ты что будешь по всему этому массиву поточечно проходить ?
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
Sheff
ну так с этого и надо было начинать -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |