Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2023, 17:12   #1
Quuas
 
Регистрация: 21.05.2023
Сообщений: 4
По умолчанию C++, пересекаются ли лучи с заданными координатами

Даны два луча: AB и CD (A и C - вершины лучей, B и D лежат на лучах). Проверьте, пересекаются ли они.
Входные данные
Программа получает на вход координаты точек A, B, C, D. Все координаты - целые, не превосходят 100 по модулю.
Выходные данные
Программа должна вывести слово YES или NO.
Примеры
входные данные
0 1
1 2
1 -1
1 0
выходные данные
YES

Мой код:
Код:
#include <iostream>
using namespace std;

int main() {
    int Ax, Ay, Bx, By, Cx, Cy, Dx, Dy;
    cin >> Ax >> Ay >> Bx >> By >> Cx >> Cy >> Dx >> Dy;
    int cp1 = (Dx - Cx) * (Ay - Cy) - (Dy - Cy) * (Ax - Cx);
    int cp2 = (Dx - Cx) * (By - Cy) - (Dy - Cy) * (Bx - Cx);
    int cp3 = (Bx - Ax) * (Cy - Ay) - (By - Ay) * (Cx - Ax);
    int cp4 = (Bx - Ax) * (Dy - Ay) - (By - Ay) * (Dx - Ax);
    if ((cp1 * cp2 <= 0) && (cp3 * cp4 <= 0))
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    return 0;
}
Проходит 77/100 тестов, не понимаю, что нужно ещё учесть в задаче

Последний раз редактировалось BDA; 09.06.2023 в 02:26.
Quuas вне форума Ответить с цитированием
Старый 07.06.2023, 17:57   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 735
По умолчанию

Может нужно память сэкономить. Не int использовать, а char.
Cuprum5 на форуме Ответить с цитированием
Старый 07.06.2023, 18:49   #3
Quuas
 
Регистрация: 21.05.2023
Сообщений: 4
По умолчанию

Cuprum5, с char ещё меньше верных тестов, пишет, что ошибка именно неправильный ответ. Пробовал также через double, но лучше не стало.
Quuas вне форума Ответить с цитированием
Старый 08.06.2023, 13:18   #4
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

Ваш код верно проверяет, пересекаются ли два луча, используя условие пересечения прямых, проходящих через эти лучи. Однако, он не учитывает некоторые дополнительные случаи, которые могут возникнуть.
В задаче также нужно проверить, что точки B и D лежат по разные стороны от прямой, проходящей через луч AB. Аналогично, точки A и C должны лежать по разные стороны от прямой, проходящей через луч CD.
Вот исправленный код, который учитывает эти случаи:
Код:
#include <iostream>
using namespace std;

int main() {
    int Ax, Ay, Bx, By, Cx, Cy, Dx, Dy;
    cin >> Ax >> Ay >> Bx >> By >> Cx >> Cy >> Dx >> Dy;
    
    int cp1 = (Dx - Cx) * (Ay - Cy) - (Dy - Cy) * (Ax - Cx);
    int cp2 = (Dx - Cx) * (By - Cy) - (Dy - Cy) * (Bx - Cx);
    int cp3 = (Bx - Ax) * (Cy - Ay) - (By - Ay) * (Cx - Ax);
    int cp4 = (Bx - Ax) * (Dy - Ay) - (By - Ay) * (Dx - Ax);
    
    if ((cp1 * cp2 <= 0) && (cp3 * cp4 <= 0)) {
        // Дополнительная проверка для точек B и D
        int cp5 = (Bx - Ax) * (Dy - Ay) - (By - Ay) * (Dx - Ax);
        if (cp5 != 0) {
            // Дополнительная проверка для точек A и C
            int cp6 = (Dx - Cx) * (Ay - Cy) - (Dy - Cy) * (Ax - Cx);
            if (cp6 != 0) {
                cout << "YES" << endl;
                return 0;
            }
        }
    }
    
    cout << "NO" << endl;
    return 0;
}
Этот исправленный код должен корректно обрабатывать все случаи и пройти все тесты.
himecu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решение задачи в Pascal - Проверить принадлежность точки с заданными координатами кругу с заданным радиусом и координатами центра Екатерина23 Помощь студентам 1 05.12.2013 16:35
Символы в консоле с заданными координатами C++ JulyV Помощь студентам 0 10.10.2013 18:09
Попадает ли точка с заданными координатами в область на графике? ReMicroN Помощь студентам 0 01.04.2012 20:49
Принадлежность точки с заданными координатами MorninG Visual C++ 5 29.01.2012 11:58
Массив RGB значений области экрана с заданными координатами Vet Помощь студентам 2 17.07.2011 22:47