|
|
|
|
|
|
|
Вернуться
| 1 Прищенко Богдан Олегович, 09 сентября 2009 г. 18:06:56 | |
|
Нияз Габдуллазянович, спасибо за совет, погуглил, освоил... Если надо только определить наличие пересечения, то с произведением на порядок проще и меньше писать:) Если еще и найти само пересечение, то тоже так удобней.
|
|
|
| 2 Прищенко Богдан Олегович, 09 сентября 2009 г. 15:24:41 | |
|
Всегда - голосно сказано, я программированием занимаюсь полгода:) когда стыкался - писал так. Гляну на твой алго:)
|
|
|
| 3 Нигматуллин Нияз Габдуллазянович [СПбГУ ИТМО], 09 сентября 2009 г. 8:40:55 | |
ооо... это решение ты всегда пишешь? есть попроще, с ориентированной площадью треугольника, ну или по другому псевдовекторным произведением. ну мы тут должны проверить лежат ли точки каждого из отрезков по разные стороны относительно другого отрезка. конечно как уже было сказано можно использовать уравенения прямой, но можно и обойтись без него, вот даже кусок кода: int sign(double x) { return fabs(x) < eps ? 0 : (x < 0 ? -1 : 1); } double mul(Point p1, Point p2, Point p3) { return (p1.x - p2.x) * (p1.y - p3.y) - (p1.x - p3.x) * (p1.y - p2.y); } bool intersects(Point p1, Point p2, Point s1, Point s2) { return sign(mul(p1, s1, s2)) != sign(mul(p2, s1, s2)) && sign(mul(s1, p1, p2)) != sign(mul(s2, p1, p2)); } но также надо будет проверит когда все sign(mul(..)) равны 0. В этом случае отрезки лежат на одной прямой.
|
|
|
| 4 Прищенко Богдан Олегович, 09 сентября 2009 г. 6:37:50 | |
|
Прочти для начала геометрию на алголисте - полезно будет. Потом поразвязяывай немного - должен понять. По поводу конкретной задачи - один из достаточно понятных и простых алгоритмов ее решения: находим точку пересечения прямых, которым принадлежат отрезки. Потом проверяем, принадлежит ли она отрезкам. Если принадлежит обеим, то они пересекаются в этой точке, иначе - не пересекаются. Отдельный случай - когда отрезки это части одной прямой. Там можно, например, порверить, принадлежит ли хоть один конец первого второму и наоборот. То, что части одной прямой - видно буедт по уравнению.
|
|
|
| 5 Мехрдоди Одил (ТРГИ), 09 сентября 2009 г. 3:46:10 | |
|
так если ты соствляешь уравнение уравнение вида ax+by+c=0 то не надо ничего особеного а вот если y=kx+b то надо учитывать уравнения вида x=const; вот и все... но почему то у меня 2-ой вариант прокотил а 1-й нет... незнаю наверно что то не учел.
|
|
|
Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!
| | | |