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

Графика: вращательное движение относительно центра экрана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ рекурсия http://www.cyberforum.ru/cpp-beginners/thread851005.html
#include <iostream> #include <windows.h> using namespace std; void someFunction ( int , int, int ); int main () { const int arraySize = 10;
C++ Поменять первый элемент строки с максимальным элементом этой строки Условие: поменять максимальный элемент строки с первым элемент строки матрицы... Вообщем ,как я понимаю,я нахожу максимальный элемент каждой строки,затем переменной присваиваю первый элемент строки,а затем меняю его с максимальным... int a = 0; for (int i = 0;i<str;i++){ for (int j = 0;j<stb;j++){ a = massiv; massiv = massiv ; massiv = a; http://www.cyberforum.ru/cpp-beginners/thread850992.html
C++ Отличие функции cin.get и cin.getline
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get считывает символ разрыва строк и оставляет его в буфере, а функция getline считывает, а затем удаляет его из буфера. Но не могли бы вы привести пример программы, в которой видна эта разница наглядно, т.е. в каких случаях нужно использовать тот или другой вариант?
C++ Просмотрите программу (изображение процесса разделения в сепараторе)
Я работал над программой изображенич процесса разделения в сепараторе..Все уже закончил..Осталось Газ както изобразить...Вот алгоритм #include <graphics.h> #include <conio.h> main() { int x,y,yd,yz,yo,xo,yu,xs,yh,xl,yb,fg; float x2,x3,oh; initwindow(500,500); setfillstyle(1,15); ...
C++ Изу примеры баз данных для консоли http://www.cyberforum.ru/cpp-beginners/thread850973.html
помогите с примерами баз данных по си++ в консоли...
C++ Header files и другие подключаемые файлы И так, господа, есть 3 файла : заголовочный (.h), файл реализации (.cpp) и управляющий (.cpp) Суть в том, что если я пропишу код файла реализации в заголовочном файле, то всё работает на отлично, но когда я пытаюсь подключить его (#include), то программа и не подумывает работать. Собственно, сами файлы : Заголовочный #ifndef DATE_H #define DATE_H #include <iostream> using namespace std;... подробнее

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

Графика: вращательное движение относительно центра экрана - C++

28.04.2013, 16:37. Просмотров 492. Ответов 0
Метки (Все метки)

Здравствуйте! Нужна помощь в дописании программы.
Вот само задание: Вариант 3.
Для реализации вращательного движения относительно центра экрана удобно использовать полярную систему координат. Для этого в объект TPoint надо добавить переменные a, s типа float, которые соответственно задают угол (в радианах) и расстояние от центра экрана. Пусть эти переменные в конструкторе устанавливаются в 0 (то есть все объекты появляются в центре экрана).
Кроме того, переменные vx, vy надо заменить на переменные va, vs типа float, которые задаются приращения угла и расстояния соответственно. Значение va рекомендуется случайно выбирать в диапазоне от 0.01 до 0.1, а значение vs рекомендуется случайно выбирать в диапазоне от 0.1 до 1. Затем функцию obj[i]->MoveXY можно изменить так, чтобы у нее не было аргументов. Также содержимое этой функции надо изменить следующим образом. После вызова Hide надо изменить значения a, s на соответствующие приращения va, vs. После этого надо перейти от полярной системы координат к декартовой, то есть изменить значения целочисленных переменных x, y, а именно x:=floor(GrMaxX()/2+s*cos(a)); y:=floor(GrMaxY()/2-s*sin(a)); (это необходимо, так как отображение объектов выполняется на основе x, y). После этого осуществить вызов Show и закончить функцию obj[i]->MoveXY. Объекты будут совершать «вращательные» перемещения, но при этом они будут постепенно уходить за пределы экрана, а в окончательном варианте программы объекты
должны перемещаться только в пределах экрана. Чтобы объекты оставались в пределах экрана надо после вызова Hide внутри функции obj[i]->MoveXY добавить изменение значений va, vs на противоположные в том случае, если на следующем шаге расстояние от центра экрана будет больше половины высоты экрана. Кроме того, надо добавить некоторую «распределенность» при перемещении объектов. Для этого при перемещении каждого объекта можно иногда изменять случайным образом значения va, vs.
есть код программы, но не работает и не все условия заданы.
Код
#include <stdlib.h>
#include <time.h>
#include <grx20.h>
#include <grxkeys.h>
#include <math.h>
struct TPoint{
 int x,y;
 float a,s;
 float va, vs;
 int color;
 TPoint(int ix,int iy,int icolor);
 virtual ~TPoint();
 virtual void Draw(int icolor);
 void Show();
 void Hide();
 void MoveXY(int ix, int iy);
};
struct TBox: public TPoint{
 int w,h;
 TBox(int ix,int iy,int icolor,int iw,int ih);
 virtual ~TBox();
 virtual void Draw(int icolor);
};
struct TCircle: public TPoint{
 int r;
 TCircle(int ix,int iy,int icolor,int ir);
 virtual ~TCircle();
 virtual void Draw(int icolor);
};
TPoint::TPoint(int ix,int iy,int icolor)
{
 x=250; y=250;
 a=0; s=0;
 va=rand()%0,01-0,1; vs=rand()%0,1-1;
 color=icolor;
}
TPoint::~TPoint()
{
 Hide();
}
void TPoint::Draw(int icolor)
{
 GrPlot(x,y,icolor);
 GrPlot(x+1,y,icolor);
 GrPlot(x,y+1,icolor);
 GrPlot(x+1,y+1,icolor);
}
void TPoint::Show()
{
 Draw(color);
}
void TPoint::Hide()
{
 Draw(0);
}
void TPoint::MoveXY(int ix,int iy)
{
 Hide();
 if(ix>GrMaxX()){
 ix=ix-GrMaxX()-1;}
 if (ix<0) {
 ix=ix+GrMaxX()+1;}
 if(iy>GrMaxY()){
 iy=iy-GrMaxY()-1; }
 if(iy<0) {
 iy=iy+GrMaxY()+1; }
 x=ix; y=iy;
 a=va; s=vs;
 x=floor(GrMaxX()/2+s*cos(a)); y=floor(GrMaxY()/2-s*sin(a));
 Show();
}
TBox::TBox(int ix,int iy,int icolor,int iw,int ih):
 TPoint(ix,iy,icolor)
{
 w=iw; h=ih;
}
TBox::~TBox()
{
 Hide();
}
void TBox::Draw(int icolor)
{
 GrBox(x-w/2,y-h/2,x+(w-w/2),y+(h-h/2),icolor);
}
TCircle::TCircle(int ix,int iy,int icolor,int ir):
 TPoint(ix,iy,icolor)
{
 r=ir;
}
TCircle::~TCircle()
{
 Hide();
}
void TCircle::Draw(int icolor)
{
 GrCircle(x+2,y+5,r-1,icolor);
}
#define M 10000
main()
{ int N=10;
    TPoint *obj[M];

 GrSetMode(GR_default_graphics,1024,768);
 srand(time(0));
 int i;
 int count;
 for(i=0;i<N;i++){
     count=rand()%3;
 switch(count)
 {case 1:
 obj[i]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,rand()%10,rand()%10);break;
 case 2:
 obj[i]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break;
 default:
 obj[i]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;};
 obj[i]->Show();
 }
GrKeyType key;
int s;
 do{
  while (!GrKeyPressed()){
   GrSleep(5);
   for(i=0;i<N;i++){
       s=rand()%100;
    if (s=50)
    obj[i]->MoveXY(obj[i]->a+obj[i]->va, obj[i]->s+obj[i]->vs);}}//rand()%7-3,obj[i]->y+rand()%7-3);

  key=GrKeyRead();
  switch(key){
case GrKey_Insert:
if (N<M){
    for(i=0;i<N;i++){
 count=rand()%3;
 switch(count)
 {case 1:
 obj[N]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,rand()%10,rand()%10);break;
 case 2:
 obj[N]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break;
 default:
 obj[N]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;};
 obj[i]->Show();
 }

N++; //количество объектов увеличивается
}
break;
case GrKey_Delete:
if (N>0){
delete obj[N-1];
N--; //количество объектов уменьшается
}
break;
}

 }while(key!=GrKey_Escape);
for(i=0;i<N;i++){
  delete obj[i];
 }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru