Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
#1

Определить, имеют ли отрезки общие точки

11.07.2013, 00:24. Просмотров 814. Ответов 1
Метки нет (Все метки)

Условие:
Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли эти отрезки общие точки.
Посмотрите все ли я предусмотрел? Может, что-то можно изменить
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*Два отрезка на плоскости заданы координатами своих концов. Определить, имеют ли эти отрезки общие точки.*/
 
#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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 00:24
Ответы с готовыми решениями:

Определить, есть ли у кругов общие точки
Пожалуйста исправьте меня, если что то не так. Задание : Точки с координатами...

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

Определить все общие делители двух заданных натуральных чисел
Помогите написать подпрограмму на Си с заданным условием : ...

Определить количество строк которые не имеют нулевые элементы
Задача - определить количество строк которые не имеют нулевые элементы....

Определить, какие k подряд идущих элементов массива имеют максимальную сумму
Дан целочисленный массив, размер которого не превышает 1000000, и число k,...

1
EndWar
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
11.07.2013, 13:14 #2
конечно не все предусмотрел
вот этот кусок кода работает неверно
C
1
2
3
4
        if (c == 0 && x3>=x1 && x3<=x2 && (y3<=y1 || y3<=y2)) //Если второй отрезок перпендикулярен ОХ получаем деление на 0
        {
            printf("Пересекаются.\n");
        }
можешь проверить на значениях
1) (0;6),(6;0)
2) (4;4),(4;8)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 13:14

Дано 10 целых чисел, определить сколько из них имеют наибольшее значение
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt;...

Определить номера точек которые имеют максимальное и минимальное расстояние между точками
задание: дано n точек определить номера точек которые имеют максимальное и...

Определить номера тех строк, оба элемента которых имеют нулевые значения
Задана матрица А с 2 столбцами и 45 строками. Определить номера тех строк,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru