Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184
#1

Написать класс "прямоугольник" с методом, который проверяет пересечение с другим прямоугольником - C++

30.03.2014, 11:17. Просмотров 217. Ответов 0
Метки нет (Все метки)

Всем Привет!!! Пытаюсь решить задачку второй день ничего не выходит, полазил по нету много всего нашел , но ничего на подошло , помогите пожалуйста ! Вообщем есть задача , нужно написать класс прямоугольника и там должен быть метод ,который проверяет на пересечение и возвращает true если пересекаются или false если не пересекаются . и если пересекаются то прямоугольник нужно сделать , как бы сказать то получше, прямогуольником который получается при пересечении двух прямоугольников.
вообщем вот что у меня получилось
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
bool CRectangle::IsOverLap(CPoints atop1, CPoints abuttom1, CPoints atop2, CPoints abuttom2)
{
    if ((atop1.GetX() <= atop2.GetX() && abuttom2.GetX() <= abuttom1.GetX()) &&(atop1.GetY() >= atop2.GetY() && abuttom2.GetY() >= abuttom1.GetY()))
    {
        m_leftTop.SetY(min(atop1.GetY() , atop2.GetY()));
        m_leftTop.SetX(max( atop1.GetX(), atop2.GetX()));
        std::cout <<min(atop1.GetY() , atop2.GetY()) << std::endl;
        std::cout << max( atop1.GetX(), atop2.GetX()) << std::endl;
        std::cout << max(abuttom1.GetY(), abuttom2.GetY()) << std::endl;
        std::cout << min(abuttom1.GetX(), abuttom1.GetX()) << std::endl;
        m_rightBottom.SetY(max(abuttom1.GetY(), abuttom2.GetY()));
        m_rightBottom.SetX(min(abuttom1.GetX(), abuttom1.GetX()));
        return true;
    } 
    else if ((atop2.GetX() <= atop1.GetX() && abuttom1.GetX() <= abuttom2.GetX()) &&(atop2.GetY() >= atop1.GetY() && abuttom1.GetY() >= abuttom2.GetY()))
    {
        m_leftTop.SetY(min(atop1.GetY() , atop2.GetY()));
        m_leftTop.SetX(max( atop1.GetX(), atop2.GetX()));
        std::cout <<min(atop1.GetY() , atop2.GetY()) << std::endl;
        std::cout << max( atop1.GetX(), atop2.GetX()) << std::endl;
        std::cout << max(abuttom1.GetY(), abuttom2.GetY()) << std::endl;
        std::cout << min(abuttom1.GetX(), abuttom1.GetX()) << std::endl;
        m_rightBottom.SetY(max(abuttom1.GetY(), abuttom2.GetY()));
        m_rightBottom.SetX(min(abuttom1.GetX(), abuttom1.GetX()));
        return true;
    }
    else
    {
        return false;
    }
}
 
bool CRectangle::intersect(CRectangle const & other)
{
    CPoints topPoint1;
    CPoints bottomPoint1;
    CPoints topPoint2;
    CPoints bottomPoint2;
    topPoint1.SetX(m_leftTop.GetX());
    topPoint1.SetY(m_leftTop.GetY());
    bottomPoint1.SetX(m_leftTop.GetX());
    bottomPoint1.SetY(m_leftTop.GetY());
    topPoint2.SetX(other.GetLeftSide());
    topPoint2.SetY(other.GetTopSide());
    bottomPoint2.SetX(other.GetRightSide());
    bottomPoint2.SetY(other.GetBottomSide());
    IsOverLap(topPoint1, bottomPoint1, topPoint2, bottomPoint2);
    if (IsOverLap(topPoint1, bottomPoint1, topPoint2, bottomPoint2)) 
    {
        return true;
    }
    else
    {
        m_rightBottom.SetX(m_leftTop.GetX());
        m_rightBottom.SetY(m_leftTop.GetY());
        return false;
    }
}
Всем спасибо за внимание!!!!

Добавлено через 2 часа 16 минут
да, ещё забыл написать что стороны прямоугольников параллельны осям x и y
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 11:17     Написать класс "прямоугольник" с методом, который проверяет пересечение с другим прямоугольником
Посмотрите здесь:

как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? C++
C++ Класс "Прямоугольник" с олным набором функционала (расчёт площади, периметра и т.д.)
C++ Помогите, пожалуйста, написать класс "Кадры"
Как написать класс "массив" C++
C++ Написать класс "Дата" с перегрузкой операторов
C++ Реализовать класс "Прямоугольник"
C++ Создать класс "Дерево" и метод, который выводит сумму узлов дерева
C++ Написать класс "стек" (первый пришел, последний ушел)
C++ Класс "Строка" содержащий метод, который меняет местами первый и последний символы строки
Написать класс "Геометрическая фигура" C++
C++ Написать интерфейс "Парсер" с методом парсинга (разбора) файлов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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