Имя: Пароль:
IT
 
Алгоритм пересечения двух прямых
0 Smit1C
 
14.11.12
16:47
Посоветуйте РАБОЧИЙ алгоритм определения пересечения двух прямых. Координаты пересечения желательны, но можно без них.
В тырнете нашел два алгоритма, но они не совсем корректно работают.
1 Злопчинский
 
14.11.12
16:48
Книжки по геометрии за курс средней школы- советовать?
2 Smit1C
 
14.11.12
16:49
(1) нет, спасибо. Нам бы лучше ссылочку))
3 alex74
 
14.11.12
16:49
угол наклона разный - значит пересекаются
4 Undefined vs NULL
 
14.11.12
16:49
(0) что дано хоть?
5 forforumandspam
 
14.11.12
16:50
Площадь треугольника с знаком S=x1y2-x2y1+x2y3-x3y2+x3y1-x1y3 (вообще деленное на два, но нам нужен только знак площади)
Отрезки АВ и CD пересекаются, если площади треугольников построенных из отрезка и двух точек второго отрезка имеют разный знак. S_ABC*S_ABD<=0 и S_CDA*S_CDB<=0
6 le_
 
14.11.12
16:51
7 Mikeware
 
14.11.12
16:51
омиздинеть.
у меня сын в 7 классе средней общеобразовательной школы сейчас это проходит...
8 forforumandspam
 
14.11.12
16:51
9 Злопчинский
 
14.11.12
16:52
> если площади треугольников построенных из отрезка и двух точек второго отрезка имеют разный знак.
/
не вкуряю, как ПЛОЩАДИ могут иметь "разный знак".. ;-)
10 Smit1C
 
14.11.12
16:52
(7) вот и спроси у него))
11 Mikeware
 
14.11.12
16:53
(0) год рождения, случаем, не "тот самый"?
12 Steel_Wheel
 
14.11.12
16:53
(0) решить систему уравнений
y = cx + d
y = ax + b

x, y -- точки пересечения
13 Undefined vs NULL
 
14.11.12
16:53
(9) есть такое понятие - площадь со знаком, знак зависит от направления обхода периметра
14 Undefined vs NULL
 
14.11.12
16:53
(10) блеать, ответь на (4)
15 forforumandspam
 
14.11.12
16:53
(9) Это если в формуле: S = x1y2-x2y1+x2y3-x3y2+x3y1-x1y3
x1y2+x2y3+x3y1 меньше, чем -x2y1-x3y2-x1y3
16 Mikeware
 
14.11.12
16:54
(10) а зачем? я и так знаю... :-)
я тоже учился в школе...
17 Rebelx
 
14.11.12
16:54
boolean transection (double ax1, double ay1, double ax2, double ay2, double bx1, double by1, double bx2, double by2)
{
    double v1=(bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);
    double v2=(bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);
    double v3=(ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);
    double v4=(ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);
    return ((v1*v2<=0) && (v3*v4<=0));
}
18 acsent
 
14.11.12
16:55
(0) на плоскости или пространстве? прямые заданы по точкам?
19 bahmet
 
14.11.12
16:55
(0)БГГГ!
Если прямые не параллельны - они пересекаются!)
20 acsent
 
14.11.12
16:56
(19) Бггг. В пространстве - нет
21 alex74
 
14.11.12
16:56
(12) зачем решать, просто сравни а и с. Если они не равны, то прямые пересекаются.
22 Undefined vs NULL
 
14.11.12
16:56
(19) в пространстве? садись - два))
стебусь
23 bahmet
 
14.11.12
16:57
насчет плоскости или пространства вопрос излишний.
большинство одноэсников ток плоско думают )
24 Undefined vs NULL
 
14.11.12
16:57
(21) садись два
25 Smit1C
 
14.11.12
16:57
(16) а я нет))
(14) первый отрезок c коорд (x1,y1; x2,y2), отрезок второй с кординатами (x3,y3; x4,y4). Всё на плоскости.
(19) спасибо, Кэп!
26 bahmet
 
14.11.12
16:57
в пространстве они мыслят ток когда сисьге обсуждают
27 alex74
 
14.11.12
16:59
(25) Если (х1-х2)/(у1-у2) <> (х3-х4)/(у3-у4) то прямые пересекаются
28 Dmitry77
 
14.11.12
16:59
(19) в не евклидовой геометрии пралельные прямые тоже пересекаются.

А вообще автор (0) укажи как заданы эти прямые.

И дальше записывай систему линейных уравнений - если она решаема - то прямые пересекаются.  Поиск в интернете поможет тебе с условием когда система линейных уравнений решаема.
29 acsent
 
14.11.12
16:59
(24) именно так, кроме случая когда совпадают
30 qeos
 
14.11.12
16:59
(0) а сам сделать, силенок школьных не хватает?
31 Undefined vs NULL
 
14.11.12
17:00
(27) плохо, придется случай деления на нуль выделять отдельно
32 acsent
 
14.11.12
17:00
(28) в не евклидовой геометрии пралельные прямые тоже пересекаются.
НЕ ПЕРЕСЕКАЮТСЯ
по определению
33 Undefined vs NULL
 
14.11.12
17:01
(29) хвалю, что исправился, 5!
34 alex74
 
14.11.12
17:02
(29) когда прямые совпадают - они не пересекаются
35 Undefined vs NULL
 
14.11.12
17:03
(25) по-крестьянски, запиши систему из 2-х уравнений, реши, если решение есть и единственно, то пересекаются, заодно и точку пересечения найдешь
36 Undefined vs NULL
 
14.11.12
17:03
(34) почему, у них нет общих точек?
37 alex74
 
14.11.12
17:05
(36) почитай школьный учебник математики, узнаешь
38 Азазелло
 
14.11.12
17:05
(0) Автор, тебе нужно узнать, пересекаются ли прямые, или все же отрезки?
39 Undefined vs NULL
 
14.11.12
17:05
(37) почитай, что такое пересечение множеств
40 Мимо Проходил
 
14.11.12
17:06
(0) На плоскости?
41 Undefined vs NULL
 
14.11.12
17:07
42 Mikeware
 
14.11.12
17:08
хы. для прямых вывел, для парабол - вывел. Для кубических - почти вывел. а вот на гиперболах - встрял...
лениво...
43 Undefined vs NULL
 
14.11.12
17:09
(42) странная классификация кривых
44 alex74
 
14.11.12
17:09
(41) внимательно почитай то что там написано:

"Эти прямые параллельны, если А1В2 - А2В1 = 0 или к1 = к2"

по этому определению совпадающие прямые параллельны
45 GANR
 
14.11.12
17:10
(0) Сколько измерений в пространстве?

Если измерений 2 - метод Гаусса самый простой и распространенный (но не эффективный).

Если измерений - более 2, то прямые могут не пересекаться, тогда задача может свестись к задаче нахождения минимального расстояния между прямыми.
46 Undefined vs NULL
 
14.11.12
17:12
(44) но ведь пересекаются! ))
47 Undefined vs NULL
 
14.11.12
17:12
(45) для размерности 2 думаю метод Гаусса самое то
48 alex74
 
14.11.12
17:13
(46) и все же почитай определения.
49 Smit1C
 
14.11.12
17:13
(38) отрезки
50 Undefined vs NULL
 
14.11.12
17:14
(48) что такое множества пересекаются?
51 alex74
 
14.11.12
17:14
(49) это совсем другой разговор
52 Undefined vs NULL
 
14.11.12
17:15
(49) это сложнее, но не намного
53 Мимо Проходил
 
14.11.12
17:15
(44) 1.Параллельные прямые не имеют общих точек.
2. Совпадающие прямые параллельны.
3. Совпадающие прямые имеют общие точки.

Какое из трех утверждений ложно?
54 Undefined vs NULL
 
14.11.12
17:17
(48)ок, параллельными прямыми называются прямые, которые лежат в одной плоскости и либо совпадают, либо не пересекаются

зачем совпадающие выделили отдельно?
55 Smit1C
 
14.11.12
17:19
(51)(52) предчувствую скорое решение проблемы )))
56 alex74
 
14.11.12
17:20
57 alex74
 
14.11.12
17:21
(54) затем, что если прямые совпадают - то они не пересекаются.
58 Undefined vs NULL
 
14.11.12
17:24
(57) странная логика, тогда достаточно было бы написать:
"параллельными прямыми называются прямые, которые лежат в одной плоскости и не пересекаются "
59 Мимо Проходил
 
14.11.12
17:27
(58) есть два определения параллельности, как ни странно.
В одном из них включают соврадающие, в другом нет.
60 Азазелло
 
14.11.12
17:37
(55) а в (5) не решение?
61 Smit1C
 
14.11.12
17:51
Спасибо всем! Вот решение:

Функция ПрямыеПересекаются(ax1,ay1,ax2,ay2, bx1,by1,bx2,by2)
   
   v1=(bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);
   v2=(bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);
   v3=(ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);
   v4=(ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);
   Возврат ((v1*v2<0) И (v3*v4<0));
   
КонецФункции;

у меня до этого было: Возврат ((v1*v2<=0) И (v3*v4<=0)); поэтому не всегда правильно срабатывало
62 zak555
 
14.11.12
19:00
(61) матрицу вычислил ?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший