Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Хранение площадей перекрывающихся фигур

10.05.2012, 15:11. Показов 625. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Перефразирую свою старую тему, видать намудрил я там с описанием.

Задача: как-нибудь (вообще как-угодно, лишь бы побыстрее работало) в классе хранить площади фигур которые нам дают через функцию Add. У каждой фигуры, кроме координат, есть свой номер (ID).
Часть координат будут давать в виде структуры (чтобы меньше параметров передавать).
C++
1
2
3
4
5
struct CCoord
{
    int   m_X;
    int   m_Y;
};
Возможные фигуры:
CRectangle ( int ID, int x1, int y1, int x2, int y2 ) - координаты противоположных углов
CCircle ( int ID, int x, int y, int r) - середина и радиус
CTriangle ( int ID, CCoord a, CCoord b, CCoord c) - треугольник, 3 вершины
CPolygon ( int ID, int n, const CCoord * v ) , многоугольник, n вершин, координаты вершин дают в массиве v.

Предположительно что координаты дают с левой по правую (тоесть для треугольника дают точку слева, потом вершину, потом точку справа).

Формально нужно хранить это всё так чтобы можно было потом по координате x,y определить что пересекает эту точку (нужно вернуть ID фигуры что пересекает). Any ideas?

Теоретически получается что когда вызывают метод Add и дают фигурку можно даже не заморачиваться с хранением оригинала, нужно только как-то запомнить те координаты что она накрывает и пометить эти координаты её ID, но как это сделать ... Или же можно хранить оригиналы и как-то пересчитывать потом накрывают ли они какую точку ... желательно ещё чтобы это всё работало быстро.

Тоже самое что я написал, но в виде кода (написаны сами классы, метод Add ничего никуда не добавляет так как не решился как это всё хранить):
код

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <string>
using namespace std;
 
struct CCoord
{
    CCoord (int x = 0,int y = 0 )
    : m_X(x), m_Y(y) {}
 
    int   m_X;
    int   m_Y;
};
 
//базовый класс для фигур
class CObject
{
public:
    CObject(int _id)
    :ID(_id) {}
 
    int ID;
};
 
class CRectangle: public CObject
{
public:
    CRectangle(int ID,int _x1,int _y1,int _x2,int _y2)
    :CObject(ID), x1(_x1), y1(_y1), x2(_x2), y2(_y2) {}
 
private:
    //верхняя левая координата
    int x1;
    int y1;
 
    //нижняя правая коордианата
    int x2;
    int y2;
};
 
class CCircle: public CObject
{
public:
    CCircle(int ID, int _x, int _y, int _r)
    :CObject(ID), x(_x), y(_y), r(_r) {}
 
private:
    //координата центра
    int x;
    int y;
 
    //радиус круга
    int r;
};
 
class CTriangle: public CObject
{
public:
    CTriangle(int ID, CCoord _a, CCoord _b, CCoord _c)
    : CObject(ID), a(_a), b(_b), c(_c) {}
 
private:
    CCoord a;//левая
    CCoord b;//средняя
    CCoord c;//правая
};
 
class CPolygon: public CObject
{
public:
    CPolygon(int ID, int n, const CCoord* v)
    : CObject(ID),size(n), coord(new CCoord[size])
    {
        for(int i=0;i<size;i++)
         coord[i]= v[i];
    }
 
    CPolygon(const CPolygon& right)
    :CObject(right.ID), size(right.size), coord(new CCoord[size])
    {
        for(int i=0;i<size;i++)
         coord[i]=right.coord[i];
    }
 
    virtual CObject* clone()
    {
        return new CPolygon(*this);
    }
 
private:
    int size;//сколько координат
 
    //указатель на массив координат. Координаты располагаются от левой до правой
    CCoord* coord;
};
 
 
class CScreen
{
public:
    Add(CObject* toAdd)//должна хранить как-то координаты фигуры что дают
    {
 
    }
 
    //должна вернуть сколько(resLen) фигур пересекают точку x,y и их id(массив res)
    void Test(int x, int y, resLen, int res* )
    {
 
    }
 
 
private:
};
 
int main()
{
    CScreen  S1;
    S1 . Add ( CCircle ( 1, 10, 10, 15 ) );
    S1 . Add ( CCircle ( 2, 30, 10, 15 ) );
    S1 . Add ( CCircle ( 3, 20, 20, 15 ) );
    S1 . Optimize();
    S1 . Test ( 0, 0, resLen, res );
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2012, 15:11
Ответы с готовыми решениями:

Вычисление площадей геометрических фигур
Программа на языке C++. Вводятся длины сторон прямоугольника, найти его площадь и периметр. Эта...

Используется ли полиморфизм в данной программе для вычисления площадей различных фигур?
Всем привет! Изучаю полиморфизм. Интересная тема, меня прям затянуло и я решил поупражняться,...

Разработать библиотеку математических функций для вычисления площадей плоских геометрических фигур
Разработать библиотеку математических функций для вычисления площадей плоских геометрических фигур...

Разработать программу «Вычислитель площадей», позволяющую вычислять площадь плоских геометрических фигур
Разработать программу «Вычислитель площадей», позволяющую вычислять площадь плоских геометрических...

0
10.05.2012, 15:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2012, 15:11
Помогаю со студенческими работами здесь

Разработать класс, содержащий методы вычисления параметров плоских и объёмных фигур, а именно длин, площадей, объёмов, площадей поверхности
Тема: Программирование вычислительных алгоритмов. Создание класса для вычисления параметров плоских...

Сравнение площадей фигур
Всем доброго времени суток, вообщем нужно доделать или переделать код. В моем коде есть проверка,...

Приложение по подсчету площадей фигур
Дорогие друзья! Может меня смеяться надо мной, но нужна срочно помощь... Написал приложение по...

Подсчёт площадей и обьемов простых фигур
Тема&quot;Подсчёт площадей и обьемов простых фигур&quot;Создать задачу на Delphi которая выводит в итоге на...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru