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

Передвижение графических объектов на языке С++ - C++

Восстановить пароль Регистрация
 
JuliaMa
4 / 2 / 1
Регистрация: 09.05.2013
Сообщений: 48
09.05.2013, 17:55     Передвижение графических объектов на языке С++ #1
Здравствуйте. Помогите пожалуйста создать программу для решения задачи перемещения круга, вписанного в прямоугольник, по диагонали с заданным шагом и задержкой в полторы секунды...
Программа должна содержать новые классы (включая абстрактные), конструкторы и деструкторы, поддерживать наследование, полиморфизм и видимость компонент.
Буду очень благодарна за помощь.заранее спасибо огромное!)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 17:55     Передвижение графических объектов на языке С++
Посмотрите здесь:

C++ В программе реализовать возможность записи объектов в файл и чтения объектов из файла
C++ Передвижение стрелками
C++ Передвижение по строке
Передвижение по строчке C++
C++ Передвижение курсора в c++
GeoTiff - примеры ее использования на языке c , желательно на русском языке C++
Передвижение шарика C++
Передвижение курсора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.05.2013, 02:42     Передвижение графических объектов на языке С++ #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не стал реализовывать полноценный паттерн command, ограничился одной командой. Да и не шибко-то он тут нужен.
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include <iostream>
#include <iomanip>
 
/* 
 * В выпуклый четырёхугольник ABCD можно вписать окружность тогда и
 * только тогда, когда суммы его противоположных сторон равны. 
 * По условию окружность вписана в прямоугольник.
 * Прямоугольник, в котором суммы противоположных сторон равны,
 * есть квадрат.
 */
 
struct Point {
  Point() :x(0), y(0) {}
  Point(double x, double y) : x(x), y(y) {}
  double x, y;
};
 
std::ostream &operator<<(std::ostream &stream, const Point &p) {
  return stream << "Point{" <<
    std::fixed << std::setprecision(2) <<
    "x=" << p.x << "," <<
    "y=" << p.y << "}";
}
 
class Surface;
 
class Drawable {
 public:
  virtual void draw(Surface &surface) = 0;
};
 
/*
 * Этот класс должен отрисовывать примитивы
 */
class Surface {
 public:
  void draw(Drawable &object) {
    object.draw(*this);
  }
  void drawLine(const Point &a, const Point &b) {
    // тут должен быть код, отрисовывающий линию
    std::cout << "Line{a=" << a << ",b=" << b << "}" << std::endl;
  }
  void drawCircle(const Point &center, double radius) {
    // тут должен быть код, отрисовывающий оркужность
    std::cout << "Circle{center=" << center << ",radius=" << radius <<
      "}" << std::endl;    
  }
  void clear() {
    // тут должен быть код, очищающий поверхность
    std::cout << "Surface cleared." << std::endl;
  }
};
 
class Placeable {
 public:
  Placeable() : point() {}
  Placeable(double x, double y) : point(x, y) {}
  double getX() const { return point.x; }
  double getY() const { return point.y; }
  void setX(double x) { this->point.x = x; }
  void setY(double y) { this->point.y = y; }
 private:
  Point point;
};
 
class Square : public Drawable, public Placeable {
 public:
  Square(double x, double y, double side) : Placeable(x, y), side(side) {}
  double getSide() const { return side; }
  void setSide(double side) { this->side = side; }
  virtual void draw(Surface &surface) {
    surface.drawLine(Point(getX(), getY()), Point(getX() + side, getY()));
    surface.drawLine(Point(getX(), getY()), Point(getX(), getY() + side));
    surface.drawLine(Point(getX() + side, getY()), Point(getX() + side,
      getY() + side));
    surface.drawLine(Point(getX(), getY() + side), Point(getX() + side,
      getY() + side));
  }
 private:
  double side;
};
 
class Circle : public Drawable, public Placeable {
 public:
  Circle(double x, double y, double radius) : Placeable(x, y),
    radius(radius) {}
  double getRadius() const { return radius; }
  void setRadius(double radius) { this->radius = radius; }
  virtual void draw(Surface &surface) {
    surface.drawCircle(Point(getX(), getY()), radius);
  }
 private:
  double x, y, radius;
};
 
class Scene {
 public:
  Scene(size_t capacity) : capacity(capacity), size(0),
    drawables(new Drawable*[capacity]) {}
  virtual ~Scene() {
    delete [] drawables;
  }
  Drawable **add(Drawable *drawable) {
    drawables[size++] = drawable;
    return drawables + size;
  }
  Drawable *operator[](size_t position) {
    return drawables[position];
  }
  const Drawable *operator[](size_t position) const {
    return drawables[position];
  }
  size_t getSize() const {
    return size;
  }
  
  void draw(Surface &surface) {
    surface.clear();
    for (size_t i = 0; i < size; ++i) {
      surface.draw(*(drawables[i]));
    }
  }
 private:
  Scene(const Scene&);
  Scene &operator=(const Scene&);
  size_t capacity;
  size_t size;
  Drawable **drawables;
};
 
class Command {
 public:
  virtual void execute() = 0;
};
 
class ShiftPlaceableCommand : public Command {
 public:
  ShiftPlaceableCommand(Placeable &placeable, double shiftX, double shiftY)
    : placeable(placeable), shiftX(shiftX), shiftY(shiftY) {}
  virtual void execute() {
    placeable.setX(placeable.getX() + shiftX);
    placeable.setY(placeable.getY() + shiftY);
  }
 private:
  Placeable &placeable;
  double shiftX, shiftY;
};
 
Circle getInscribedCircle(const Square &square) {
  double halfSide = square.getSide() / 2.0;
  return Circle(square.getX() + halfSide,
    square.getY() + halfSide, halfSide);
}
 
int main(int argc, char *argv[]) {
  Surface surface;
  Scene scene(2);
 
  Square square(1, 1, 2);
  Circle circle = getInscribedCircle(square);
 
  scene.add(&square);
  scene.add(&circle);
 
  ShiftPlaceableCommand shiftCircle(circle, 1.03, 1.03);
  ShiftPlaceableCommand shiftSquare(square, 1.03, 1.03);
 
  for (int i = 0; i < 100; ++i) {
    shiftCircle.execute();
    shiftSquare.execute();
    scene.draw(surface);
  }
  
  return 0;
}
JuliaMa
4 / 2 / 1
Регистрация: 09.05.2013
Сообщений: 48
10.05.2013, 15:50  [ТС]     Передвижение графических объектов на языке С++ #3
Спасибо огромное!))))))))))))))))))Вы мне очень помогли!)))
Yandex
Объявления
10.05.2013, 15:50     Передвижение графических объектов на языке С++
Ответ Создать тему
Опции темы

Текущее время: 00:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru