Определить, имеют ли отрезки общие точки - C (СИ)
Формулировка задачи:
Условие:
Посмотрите все ли я предусмотрел? Может, что-то можно изменить
Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли эти отрезки общие точки.
/*Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли эти отрезки общие точки.*/ #include <stdio.h> #include <locale.h> int main() { setlocale(LC_ALL, ""); int x1, y1, x2, y2, x3, y3, x4, y4; printf("Координаты первой прямой (x1, y1, x2, y2): "); scanf("%d%d%d%d%*c", &x1, &y1, &x2, &y2); printf("Координаты второй прямой (x1, y1, x2, y2): "); scanf("%d%d%d%d%*c", &x3, &y3, &x4, &y4); if ((x1==x2 && x1==x3 && x1==x4) || (y1==y2 && y1==y3 && y1==y4)) { printf("Отрезки лежат на одной прямой.\n"); getchar(); return 0; } double k1 = (x2-x1)/(double)(y2-y1), k2 = (x4-x3)/(double)(y4-y3); if (k1 == k2) //параллельность отрезков при помощи угловых коэффициентов { printf("Отрезки параллельны.\n"); getchar(); return 0; } else { int a = x2 - x1, b = y2 - y1, c = x4 - x3, d = y4 - y3; if (c == 0 && x3>=x1 && x3<=x2 && (y3<=y1 || y3<=y2)) //Если второй отрезок перпендикулярен ОХ получаем деление на 0 { printf("Пересекаются.\n"); } else { double x = (b*c*x1 - a*c*y1 - a*d*x3+a*c*y3) / (double)(b*c - a*d), y = ((d*x-d*x3)+c*y3) / (double)c; //(x, y) точка пересечения прямых //проверяем принадлежит ли пересечение нашим отрезкам if ((x>=x1 && x<=x2 && x>=x3 && x<=x4) && (((y>=y1 && y<=y2) || (y<=y1 && y>=y2)) && ((y>=y3 && y<=y4) || (y<=y3 && y>=y4)))) { printf("Пересекаются.\n"); } else { printf("Не пересекаются.\n"); } } } getchar(); return 0; }
Решение задачи: «Определить, имеют ли отрезки общие точки»
textual
Листинг программы
if (c == 0 && x3>=x1 && x3<=x2 && (y3<=y1 || y3<=y2)) //Если второй отрезок перпендикулярен ОХ получаем деление на 0 { printf("Пересекаются.\n"); }
Объяснение кода листинга программы
- Проверяется, является ли второй отрезок перпендикулярным оси ОХ. Для этого проверяется, что x3 больше или равно x1 и меньше или равно x2.
- Если второй отрезок перпендикулярен оси ОХ, то проверяется, что y3 меньше или равно y1 или меньше или равно y2.
- Если выполняются оба условия, то выводится сообщение
Пересекаются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д