Точка пересечения двух линий

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

Точка пересечения двух линий

Сообщение pronto » 10.12.2005 (Сб) 14:14

Как, аналитически, то есть не тупым перебором, найти точку пересечения двух отрезков с известными координатами концов? И все это в ВБ.

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 10.12.2005 (Сб) 14:15

найди коэффициенты линий, частью которых являются данные отрезки и далее - алгебра, 8 класс.
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 10.12.2005 (Сб) 14:18

Подробнее, плз. А то что-то не въехал...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 10.12.2005 (Сб) 14:56

Ой мне таки кажется, что это даже не восьмой класс, а гораздо раньше... Хотя я могу ошибаться - давно школу закончил.

Каждый отрезок суть часть прямой, прямая описывается уравнением первого порядка вида y = k*x + b, получение уравнения прямой из координат концов отрезка см. в интернете.
Пересечение двух прямых является решением системы из двух уравнений первого порядка. Искать в интернете по слову "правило Крамера".
После нахождения решения (если оно существует, конечно) в твоем случае потребуется дополнительная проверка - выяснить, принадлежит ли эта точка обоим отрезкам. Вхождение величины в указанный интервал - базовая логика, детский сад.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 10.12.2005 (Сб) 15:38

Вообщето девятый класс, уравнение прямой
Изображение

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 10.12.2005 (Сб) 22:17

Код: Выделить всё
private type TLine
  DblB As Double
  DblK As Double
  BoolVert As Boolean
end type

private type TPset
  DblX As Double
  DblY As Double
  btErr As Byte
end type

Private function DetectLine(X1, Y1, X2, Y2 As Double) As TLine
If x1 = x2 then 'вертикальна
  DetectLine.boolvert = true
  DetectLine.DblB = x1
  exit function
else ' собсно не вертикальна )
  DetectLine.DblK = (y2 - y1) / (x2 - x1)
  DetectLine.DblB = y1 - DetectLine.DblK * x1
end if
End function

Private Function DetectPset(L1, L2 As TLine) As TPset

If L1.DblK = L1.DblK Or (l1.BoolVert And l2.BoolVert) Then
' параллельны
  If L1.DblB = L2.DblB then
    btErr = 1 'совпадают
    Exit Function
  else
    btErr = 2 'нет общих точек
    Exit Function
  end if
else
' не параллельны
  If l1.BoolVert Then 'одна вертикальна
    Detectpset.DblX = L1.DblB
    Detectpset.DblY = L2.DblK * Detectpset.DblX + L2.DblB
    Exit Function
  End if
  If L2.BoolVert Then 'другая вертикальна
    Detectpset.DblX = L2.DblB
    Detectpset.DblY = L1.DblK * Detectpset.DblX + L1.DblB
    Exit Function
  end if
  'общий случай
  Detectpset.DblX = (L2.DblB - L1.DblB) / (L1.DblK - L2.DblK)
  Detectpset.DblY = L2.DblK * Detectpset.DblX + L2.DblB
end If
 
end function


Вобщем набирал тут, так что могут быть опечатки/ошибки. Не проверял, да и код немножко смахивает на микроскоп )

RUSYA
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 22.07.2005 (Пт) 20:17
Откуда: Харьков

Сообщение RUSYA » 10.12.2005 (Сб) 23:33

algolist.manual.ru
А как оно на самом деле - Х.З. !

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 12.12.2005 (Пн) 12:28

Всем спасибо за советы, но я просил о таком варианте, в котором можно обойтись без проверки совпадения координат точек - аналитически...

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

Сообщение alibek » 12.12.2005 (Пн) 12:51

Что такое "аналитически" ты знаешь? Или просто слово умное слышал?
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.12.2005 (Пн) 13:06

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 12.12.2005 (Пн) 18:05

pronto писал(а):Всем спасибо за советы, но я просил о таком варианте, в котором можно обойтись без проверки совпадения координат точек - аналитически...

Ты мой вариант видел?

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 13.12.2005 (Вт) 10:40

2 GAGArin. Да, видел. И поэтому так и написал. Что касается "аналитически" - так это чтобы правильно поняли, чего, кстати не произошло...

2 RUSYA. Огромное спасибо за наводку. Попалось много интересных вещей.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 21.06.2006 (Ср) 21:20

А как найти точку пересечения двух Shape (Shape=Circle)? :roll:
Подпись находится в стадии разработки...

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

Сообщение Amed » 21.06.2006 (Ср) 21:33

Точки пересечения, вернее сказать.

Опять же школьная геометрия. Нарисуй на бумажке две пересекающиеся окружности и попробуй понять сам. Учись думать, мы поможем :)

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 21.06.2006 (Ср) 21:38

Amed
Ты уж, конечно, извини, но с геометрией у меня нелады:(

Я так и не разобрался с этими пересекающимися линиями... :cry:

Почему на форуме нет никого, кто бы очень терпеливо растолковывал человеку глупые вопросы?!! :(

P.S.: думать умею.
Подпись находится в стадии разработки...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 21.06.2006 (Ср) 22:07

За все свое время присутствия на этом форуме, никогда не видел, чтобы здесь было так пусто!

Ответьте, пожалуйста, на мой аопрос :( ...
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.06.2006 (Ср) 22:19

(x1)^2 + (y1)^2 = (R1)^2
(x2)^2 + (y2)^2 = (R2)^2
x2 - x1 - x0 = 0
y2 - y1 - y0 = 0

такая вот система уравнений...
где x0, y0 - расстояние между центрами. (Отсчитывать от 1 к 2)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 21.06.2006 (Ср) 22:53

Ммм... Вообще-то понятно, вот только как это преобразовать, чтобы засунуть в VB?
Че-то у меня сегодни голова не работает.
Подпись находится в стадии разработки...

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

Сообщение Amed » 21.06.2006 (Ср) 23:01

Хакер, прокомментируй, пожалуйста, каждое уравнение.

Конь, вот тебе рисунок. Тебе нужно, зная две стороны прямоугольного треугольника: (R1+R2)/2 и R1, найти угол в треугольнике.

UPD: ошибка, конечно, бьла. Ничего там не (R1+R2)/2.
Последний раз редактировалось Amed 21.06.2006 (Ср) 23:25, всего редактировалось 6 раз(а).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.06.2006 (Ср) 23:07

А с чего та сторона равна (R1+R2)/2 ?
Нарисуй рисунок, где одна окружность в десять раз больше другой, и убедись, что заблуждаешься.
Изображение

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

Сообщение Amed » 21.06.2006 (Ср) 23:11

Оп. Правда твоя, ошибаюсь. Пойду-ка спать.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 22.06.2006 (Чт) 7:22

Amed
Выспалси? :)
Продолжай:)
Подпись находится в стадии разработки...

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

Сообщение alibek » 22.06.2006 (Чт) 8:30

Конь писал(а):А как найти точку пересечения двух Shape (Shape=Circle)? :roll:

Решить систему уравнений X1^2+Y1^2=R1^2 и X2^2+Y2^2=R2^2.
Lasciate ogni speranza, voi ch'entrate.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 22.06.2006 (Чт) 12:58

Я не понимаю, как решать системы уравнений в VB?

Так-то (на бумашшке) решить могу.
Подпись находится в стадии разработки...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.06.2006 (Чт) 13:06

Конь, на бумажке и надо.
Потом результат вставляешь в VB.
Изображение

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 22.06.2006 (Чт) 13:12

tyomitch
Ммда.
Мне надо, чтобы комп находил точки пересечения! А то что же - грянзая работа мне, а ему только MsgBox? :)
Подпись находится в стадии разработки...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.06.2006 (Чт) 13:22

сначала Конь писал(а):Так-то (на бумашшке) решить могу.

Так можешь или нет?
Изображение

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 22.06.2006 (Чт) 13:24

tyomitch
На бумашшке.
Подпись находится в стадии разработки...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.06.2006 (Чт) 13:40

Ну так реши уже. На бумашшшке.
Давно бы уже решил, если бы решал.
Изображение

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 22.06.2006 (Чт) 13:44

tyomitch
Ну ё-моё!
Я ж сказал, надо сделать так, чтобы комп сам искал точки!
Допустим, есть у меня две окружности на форме и известны координаты их центров, одна из окружностей может перемещаться пользователем! Нужно найти точки пересечения. Не на бумашшке.
Подпись находится в стадии разработки...

След.

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

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

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList