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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2013, 17:29   #1
alexSo
 
Регистрация: 06.05.2013
Сообщений: 7
По умолчанию Можно ли переделать метод ?

есть метод:
Код:
1. Модуль Point.h.
 
    Добавьте перед объявлением класса Point объявление нового типа ORIENT, а также упреждающее объявление типа Triangle:
 
enum ORIENT { LEFT, RIGHT, AHEAD, BEHIND, BETWEEN };
class Triangle;
 
Последнее необходимо, чтобы имя типа Triangle было известно компилятору в данной единице трансляции, так как оно используется в сигнатуре метода InTriangle().
 
    Добавьте внутри класса Point объявления функций:
 
Point operator +(Point&);
Point operator -(Point&);
double Length() const; // определяет длину вектора точки
// в полярной системе координат
ORIENT Classify(Point&, Point&) const; // определяет положение точки
// относительно вектора,
// заданного двумя точками
bool InTriangle(Triangle&) const; // определяет,
// находится ли точка внутри
// треугольника
 
Функция-операция “–” и метод Length() будут использованы при реализации метода Classify(), а функция-операция “+” добавлена для симметрии. Метод Classify(), в свою очередь, вызывается из метода InTriangle().
1. Модуль Point.cpp.
 
    Добавьте после директивы #include директиву #include .
 
Она необходима для использования функции sqrt(x) из математической библиотеки С++ в алгоритме метода Length().
Добавьте после директивы #include “Point.h” директиву #include “Triangle.h”.
Последняя необходима в связи с использованием имени класса Triangle в данной единице трансляции.
Добавьте реализацию функций-операций:
 
Point Point::operator +(Point& p) {
    return Point(x + p.x, y + p.y);
    }
    Point Point::operator -(Point& p) {
    return Point(x - p.x, y - p.y);
    }
 
        Добавьте реализацию метода Length():
 
    double Point::Length() const {
    return sqrt(x*x + y*y);
    }
 
        Добавьте реализацию метода Classify():
 
    ORIENT Point::Classify(Point& beg_p, Point& end_p) const {
    Point p0 = *this; 
    Point a = end_p - beg_p; 
    Point b = p0 - beg_p; 
    double sa = a.x * b.y - b.x * a.y;
 
    if (sa > 0.0) return LEFT; 
    if (sa < 0.0) return RIGHT;
 
    if ((a.x * b.x < 0.0) || (a.y * b.y < 0.0)) return BEHIND; 
    if (a.Length() < b.Length()) return AHEAD;
 
    return BETWEEN;
    }
 
    Алгоритм заимствован из [6], поэтому мы не будем здесь подробно его разбирать. Обратите внимание, что аргументы передаются в функцию по ссылке — это позволяет избежать вызова конструктора копирования.
 
        Добавьте реализацию метода InTriangle():
 
    bool Point::InTriangle(Triangle& tria) const { 
    ORIENT or1 = Classify(tria.Get_v1(), tria.Get_v2()); 
    ORIENT or2 = Classify(tria.Get_v2(), tria.Get_v3()); 
    ORIENT or3 = Classify(tria.Get_v3(), tria.Get_v1());
 
    if ((or1 == RIGHT || or1 == BETWEEN) 
    && (or2 == RIGHT || or2 == BETWEEN) 
    && (or3 == RIGHT || or3 == BETWEEN)) return true; 
    else return false;
    }
    2. Модуль Triangle.h: добавьте в классе Triangle объявление дружественной функции (все равно, в каком месте):
    friend bool TriaInTria(Triangle, Triangle); // Определить, 
    // входит ли один треугольник во второй
    3. Модуль Triangle.cpp: добавьте в конец файла реализацию внешней дружественной функции:
    // Определить, входит ли треугольник tria1 в треугольник tria2
    bool TriaInTria(Triangle tria1, Triangle tria2) {
    Point v1 = tria1.Get_v1(); 
    Point v2 = tria1.Get_v2(); 
    Point v3 = tria1.Get_v3(); 
    return (v1.InTriangle(tria2) && 
    v2.InTriangle(tria2) && 
    v3.InTriangle(tria2)); 
    return true;
    }
 
    Результат, возвращаемый функцией, основан на проверке вхождения каждой вершины первого треугольника (tria1) во второй треугольник (tria2).
    4. Модуль Main.cpp: замените заглушку функции IsIncluded() следующим кодом:
    // ——————————- определение отношения включения
    void IsIncluded(Triangle* p_tria[], int k) {
    cout << "======== Отношение включения ==========" << endl; 
    cout << "Введите номер 1-го треугольника (от 1 до " << k << "): "; 
    int i1 = GetNumber(1, k) - 1;
 
    cout << "Введите номер 2-го треугольника (от 1 до " << k << "): "; 
    int i2 = GetNumber(1, k) - 1;
 
    if (TriaInTria(*p_tria[i1], *p_tria[i2])) 
    cout << p_tria[i1]->GetName() << " - входит в - " 
    << p_tria[i2]->GetName() << endl; 
    else 
    cout << p_tria[i1]->GetName() << " - не входит в - " 
    << p_tria[i2]->GetName() << endl; 
    ExitBack();
    }
Он Проверяет включение одного треугольника в другой. У меня же проверка идет включение четырехугольников и прямоугольников(наследник класса четырехугольник). Можно код переделать? Полная ссылка http://opensource.com.ua/contents/978594723842p.html

alexSo94 на форуме Сообщить модератору о нарушении Ответить с цитированием
alexSo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как можно переделать программу? julia9311 Общие вопросы C/C++ 1 19.12.2012 11:41
Переделать в метод простых вставок nestadima Помощь студентам 2 24.11.2011 19:40
Как можно переделать под типизированный Raideres Паскаль, Turbo Pascal, PascalABC.NET 2 07.06.2010 11:55
Можно ли переделать кнопку в изображение? Alex Cones HTML и CSS 6 23.05.2010 20:42
Как можно переделать прогу (С++) Olya90 Помощь студентам 5 31.03.2009 15:32