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

Хранение, вывод и изменение графических примитивов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ shared_mutex http://www.cyberforum.ru/cpp-beginners/thread826621.html
Привет! Подскажите пожалуйста, на сколько я понял, boost::shared_mutex имеет политику: "пока хотя бы один врайтер ждет, другие ридеры и врайтеры - тоже ждут. если ждут только ридеры, то они мгновенно получают доступ" А мне бы хотелось, чтоб у врайтера было был бы приоритет перед ридерами, это какой лок?
C++ Правильное чтение символов в динам. массив Ошибка скорей всего в синтаксисе. Если надо, могу и все исходники выложить хэдэр class Cow { public: const static int lenght = 20; Cow (); Cow (const char * nm, const char * ho, double wt); Cow (const Cow & c); ~Cow (); Cow operator= (const Cow & c); http://www.cyberforum.ru/cpp-beginners/thread826619.html
C++ Нулевые элементы
Вот чем дело, допустим у нас есть 10 интов и надо определить есть ли нулевые, мы можем сделать так: flag=0; if(!first) flag=1; if(!second) flag=1; ... а можем так if(!(first && srcond && third &&....)) flag=1; но если на м надо определить из 10....20..100 интов кол-во нулевых мы опять же можем сделать так:
Вычислить сумму бесконечного ряда c точностью E C++
Всем доброй ночи, добрые программисты! Я учусь на специальности радиоаппаратостроение, а нам впихнули программирование на С++, а я с Паскалем мучалась огого сколько, а тут еще это! Задачки не сложные, но я вообще логики понять не могу! Спасите! 2)Вычислить сумму бесконечного ряда c точностью E=0.0001 S=1+1/2∙x^2+1/2∙3/4∙x^4+1/2∙3/4∙5/6∙x^6+⋯ |x|<1 Сравнить полученное значение с ...
C++ Определить функцию нахождения расстояния между точками. http://www.cyberforum.ru/cpp-beginners/thread826604.html
Возник вопрос с функцией! Определить функцию нахождения расстояния между точками. Во множестве точек на плоскости найти пару точек с максимальным расстоянием между ними.
C++ недетриминированные алгоритмы (графы. Является ли сгенерированная раскраска допустимой) составить алгоритм, проверяющий является ли сгенерированная раскраска допустимой (граф задать самостоятельно). подробнее

Показать сообщение отдельно
Vistum
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 9
03.04.2013, 09:03     Хранение, вывод и изменение графических примитивов
Здравствуйте! Помогите новичку организовать хранение, вывод и изменение графических примитивов. Буду благодарен за хорошую литературу.

Вообщем задача:
-нарисовать примитив;
-сохранить примитив;
-отрисовать все сохраненные примитивы;
-определять какой примитив выделен и осуществлять с ним различные операции (перетаксивание, изменение размеров и т.д.)

На данный момент я создал базовый класс Primitives с двумя насследниками Hex и Ryad. Так же создал класс для хранения примитивов, но почему то неправильно записываются данные. Параметы примитивов соответсвуют, а вот положение центра, при записи нового примитива перезаписывается. И подскажите пожалуйста, как организовать анализ поподания в область того или иного примитива и организовать прилипание одного примитива к другому (как окна Winamp)

Вот классы:
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
class Primitives
{
    public:
    int x,y,F;
 
    Primitives(int X, int Y, int F);
    virtual void Draw() {};
};
    Primitives::Primitives(int X, int Y, int f)
    {
    x=X;
    y=Y;
    F=f;
    }
 
class Ryad:public Primitives
{
public:
    int a,b;
 
    Ryad(int X,int Y,int F,int A,int B);
    void Draw(TCanvas *Canvas);
};
 
void Ryad::Draw(TCanvas *Canvas)
{
 
    int x1=x-a/2;
    int y1=y-b/2;
    int x2=x+a/2;
    int y2=y+b/2;
 
    Canvas->Rectangle(x1,y1,x2,y2);
 
};
 
Ryad::Ryad(int X, int Y,int F, int A, int B) : Primitives(X, Y,F)
{
    a=A;
    b=B;
};
 
class Hex:public Primitives
{
public:
    int R;
 
    Hex(int X, int Y,int F, int r);
    void Draw(TCanvas *Canvas);
};
 
Hex::Hex(int X, int Y,int F, int r) : Primitives(X, Y,F)
{
  R=r;
};
 
void Hex::Draw(TCanvas *Canvas)
{
    {
     double p=M_PI;
     int i=1,n;
     n=3;
 
     Canvas->MoveTo(x+cosl(F)*R, y+sinl(F)*R);
     while (i<=n*2)
     {
     Canvas->LineTo(x+cosl(i*p/n+F)*R, y+sinl(i*p/n+F)*R);
     i++;
     }
     }
}
 
class TContainer
{
    public:
    //Primitives *objs[100];
    Ryad *objs[100];
    int count;
 
    TContainer();
 
    void Add(Ryad *obj);
    void Del(int index);
    void Draw(TCanvas *Canvas);
    int Find(int x,int y);
};
 
TContainer::TContainer()
{
count=0;
};
 
void TContainer::Add(Ryad *obj)
{
     if (count >= 100)
      {
       return;
      }
     else
 
     objs[count] = obj;
     count++;
};
 
void TContainer::Del(int index)
{
delete objs[index];
for(int i = index+1; i<count; i++)
{
objs[i-1]=objs[i];
count--;
}
};
 
TContainer data;
А вот создание прямоугольника и вывод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (RadioButton4->Checked)
{
int a = StrToInt(Edit2->Text);
int b = StrToInt(Edit3->Text);
int f = StrToInt(Edit6->Text);
Ryad *rect=new Ryad(X,Y,f,a,b);
data.Add(rect);
delete rect;
rect = NULL;
};
 
if (RadioButton5->Checked)
{
Repaint();
for (int i = 0; i <= 4; i++)
{
data.objs[i]->Draw(Canvas);
}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru