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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как работает генерация случайных чисел в приведенном коде http://www.cyberforum.ru/cpp-beginners/thread1133571.html
Дорогие Форумчане! Подскажите пожалуйста, как работает нижеследующий код для генерации случайных чисел: random=rand()%(b+1-a)+a; Не могли бы объяснить, почему (Б плюс 1, а потом минус А) и...
C++ Как сделать так чтобы персонаж в игре двигался сам На данный момент я учусь писать игры на C++. Я сделал так чтобы персонаж двигался клавишами, а как сделать так чтобы он сам двигался в определенную сторону и с определенной скоростью Добавлено... http://www.cyberforum.ru/cpp-beginners/thread1133567.html
C++ Как бороться с гогой?
enum A{a...}; class B { public: bool m(A x); }; void f(const B &b) { if (b.m(a)) // Ругается на эту строчку, говорит error: passing 'const B' as 'this' argument of 'bool B::m(A)' discards...
Сортировка дат по 4 ключам C++
Есть даты такого формата: Fri, 28 Mar 2014 16:42:58 PDT Fri, 28 Mar 2014 15:16:47 PDT Sat, 29 Mar 2014 13:33:05 PDT Sat, 29 Mar 2014 13:23:32 PDT Sat, 29 Mar 2014 12:28:34 PDT Sat, 29 Mar...
C++ Классы: булева функция проверки строки на пустоту http://www.cyberforum.ru/cpp-beginners/thread1133531.html
Всем привет! Есть класс на строки. Нужно написать булеву функцию чтобы узнать пустая ли строка. Библиотеку <string> использовать нельзя. Вот что есть, но работает не правильно. class...
C++ Вывести кривую Гильберта заданного порядка Необходимо написать лабу в которой будет выводиться кривая Гильберта заданного порядка, что нужно подключить к студии что бы была возможность вывода картинки? подробнее

Показать сообщение отдельно
Misha_prog
0 / 0 / 0
Регистрация: 15.04.2013
Сообщений: 184

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

30.03.2014, 11:17. Просмотров 233. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru