Список вопросов
Как мне добавить решение на задач ?
14th February, 15:14
737
0
Что dsu(i) значит в коде "катание на коньках"
8th February, 18:16
126
1
Страна замов. Напишите программу на Python
10th December, 18:14
521
2
На листе клетчатой бумаги рисуют выпуклый 100-угольник с вершинами в узлах сетки. Какое наибольшее число диагоналей этого 100-угольника может идти по линиям сетки?
7th November, 15:29
366
0
Рассмотрим все прямоугольники, длины сторон которых выражены целым числом метров, и периметр которых (в метрах) численно равняется площади (в метрах квадратных). Найдите суммарную площадь всех таких, разных по размеру сторон, прямоугольников.Прямоугольники, отличающиеся порядком сторон, например, 10 * 20 и 20 * 10 считаем одинаковыми.
7th October, 20:57
816
0
Кто и за сколько может написать программу управления курсором?
2nd October, 23:48
528
3
Как авторизоваться на novafilm.tv при помощи cURL?
2nd October, 23:33
410
3
Верстка, position:relative создает пустое место
2nd October, 23:31
350
2
Что улучшить в переводе Apache Public License?
2nd October, 23:29
354
1
Формирование кода видео Вконтакте
2nd October, 23:23
452
3
IPad2 с 3G из Штатов?
2nd October, 23:18
401
5
А будет ли tcpdump видеть ack flood?
2nd October, 23:14
322
2
Альфа банк и странное смс мошенничество?
2nd October, 23:05
699
6
Софт для "ремонта" поврежденного h264 видео?
2nd October, 22:55
329
3
Scrapy — Python
2nd October, 22:54
339
4
Помощь с доставкой из США?
2nd October, 22:47
371
3
Создание stop-motion ролика
2nd October, 22:41
410
5
Решение задачи Пересечение отрезков с Меньшиков
Без пояснения   Просмотров: 206
Два отрезка на плоскости заданы целочисленными координатами своих концов в декартовой системе координат. Требуется определить, существует ли у них общая точка.
Код
#include using namespace std; double eps = 1e-9; double Fabs(double a){ if (a<0) return -a; return a; } bool Equal(double a, double b){ return Fabs(a-b)<=eps; } bool Less(double a, double b){ return a>x>>y; } }p1,p2,p3,p4; struct line { double a,b,c; line(point p1, point p2) { a = p2.y - p1.y; b = p1.x - p2.x; c = - a * p1.x - b * p1.y; } int getSign(point p) { double value = a * p.x + b * p.y + c; if (Equal(value,0.0)) return 0; else if (Less(value,0.0)) return -1; else return 1; } }; void input(){ p1.input(); p2.input(); p3.input(); p4.input(); } bool point_in_box(point p, point p1,point p2) { return min(p1.x,p2.x) <= p.x && p.x <=max(p1.x,p2.x) && min(p1.y,p2.y) <= p.y && p.y <=max(p1.y,p2.y); } bool is_cross_segments(point p1, point p2, point p3, point p4) { line l1 = line(p1,p2); line l2 = line(p3,p4); int sign1 = l1.getSign(p3)*l1.getSign(p4); int sign2 = l2.getSign(p1)*l2.getSign(p2); if (sign1 == 0 && sign2 == 0) // отрезки лежат на одной прямой { return point_in_box(p1,p3,p4) || point_in_box(p2,p3,p4) || point_in_box(p3,p1,p2) || point_in_box(p4,p1,p2); } else return sign1<=0 && sign2<=0; // отрезки пересекаются если знаки 0 или -1 } int main(){ input(); if (is_cross_segments(p1,p2,p3,p4)) cout<<"Yes"; else cout<<"No"; return 0; }
 
 
 
 
 
Автор: Администратор
