Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

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


Ответ
 
Опции темы
Старый 21.06.2011, 13:45   #1
Dark19
 
Регистрация: 18.01.2011
Сообщений: 3
По умолчанию Запись координат в массив в реал тайм, Как записать координаты в массив

Возникла проблема записи координат от мышки в массив. Мне нужно чтобы координаты сохранялись в массиве и тут же отрисовывались после каждого события от мышки. Я решил сделать запись координат с помощью цикла for (
Код:
for (int i=1;i<1000;i++)
				{
					glVertex2f(x1,z);
					glVertex2f(x2,z1);
					glEnd();
			mas3[i-1]=x;
			mas4[i-1]=y;
			mas1[i-1]=x2;
			mas2[i-1]=z1;



					glVertex2f(mas1[i-1],mas2[i-1]);
					glVertex2f(mas3[i-1],mas4[i-1]);
					glEnd();
					 
					 cout<<i<<endl;
					 
				}
), но i в нем тогда не растет по одному, а сразу же от 1 до 1000, пока я еще и не начал рисовать. Мне нужно сделать так чтобы i росло по 1 с каждой нарисованной линией и координаты сохранялись в массив по очереди и потом отрисовывались. Подскажите как можно сделать?

Код:
#include <windows.h> 
#include <iostream>
#include <glut.h>
using namespace std;
int const n=1000;
int i=1,m=0,j=0,k=0,p=1;
int x=0,b=0;
int x1,x2;
int y=0,c=0;
int z,z1;
int mas1[n],mas2[n],mas3[n],mas4[n];
bool down=false, l=false;
unsigned char kei;



void keyboard ( unsigned char key, int x, int y)
{
	 switch (key) 
		  {

				case 'q':

				exit(0);

				break;
	 }
}


      void reshape(int w, int h)
       {
            glViewport(0, 0, w, h);
     
			glMatrixMode(GL_PROJECTION);
			glLoadIdentity();

            gluOrtho2D(0, w, h, 0);
             
			glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
      }


void mouse(int button, int state, int ax, int ay)
{
	if (state == GLUT_DOWN)
	{
		down=true;
		l=true;
	}
	else
	{
		down=false;
		l=false;
	}
	x=ax;
	y=ay;
}
void motion(int ax, int ay)
{
	x1=x;
	z=y;

	if (l)
	{

		x2=ax;
		z1=ay;
	}
	
		if (!l)
	{
		x1=ax;
		z=ay;
	}
		
	
	
	
}

void Draw()
{
	
	glClearColor(0.0,0.0,0.0,0.0);                       //Цвет, в который очищается окно
        glClear (GL_COLOR_BUFFER_BIT);                        //Очищение
                
                glColor3f(1.0,0.0,0.0);  
       
	   		
                glBegin(GL_LINES);
				for (int i=1;i<1000;i++)
				{
					glVertex2f(x1,z);
					glVertex2f(x2,z1);
					glEnd();
			mas3[i-1]=x;
			mas4[i-1]=y;
			mas1[i-1]=x2;
			mas2[i-1]=z1;



					glVertex2f(mas1[i-1],mas2[i-1]);
					glVertex2f(mas3[i-1],mas4[i-1]);
					glEnd();
					 
					 cout<<i<<endl;
					 
				}	
						
		glutSwapBuffers();

}


void timer(int=0)
{
	Draw(); 
	glutTimerFunc (1,timer,0);
	

}
void Initialize()
{
	glClearColor (0.0, 0.0, 0.0, 0.0);
	glMatrixMode (GL_PROJECTION);
	glLoadIdentity();
	glOrtho (0, 1280, 1024, 0, -1, 1);
		
	
}
int main(int iArgc,char** cppArgv)
{


		
				glutInit (&iArgc, cppArgv);
				glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
				
				glutInitWindowPosition (0, 0);
				glutCreateWindow ("GRAF");
				Initialize();
				glutFullScreen();
			glutReshapeFunc (reshape);
		
			glutKeyboardFunc(keyboard);
				glutMouseFunc(mouse);
				glutMotionFunc(motion);
				//glutPassiveMotionFunc(motion);
				glutDisplayFunc (Draw);
			


			  
		timer();
			
				glutMainLoop ();

		  
	
		
		cin.get();
		cin.get();
}

Последний раз редактировалось Dark19; 21.06.2011 в 13:51.
Dark19 вне форума Ответить с цитированием
Старый 21.06.2011, 15:50   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,971
По умолчанию

Цитата:
Мне нужно чтобы координаты сохранялись в массиве и тут же отрисовывались после каждого события от мышки.
Рядом с массивом храним текущий(последний заполненный) индекс.
При наступлении события
1.увеличиваем индекс (первый пустой)
2.записываем данные в массив по данному индексу.
3. рисуем ?
0. И не забываем контролировать границы массива и устанавливать начальный индекс массива при запуске
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.06.2011 в 15:53.
evg_m вне форума Ответить с цитированием
Старый 21.06.2011, 18:45   #3
Dark19
 
Регистрация: 18.01.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Рядом с массивом храним текущий(последний заполненный) индекс.
При наступлении события
1.увеличиваем индекс (первый пустой)
Не могу увеличить индекс на 1 он почему то увеличивается на максимум в for, а если просто увеличивать то до бесконечности.
Dark19 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как записать текст из RichEdit в массив? Jane_123 Помощь студентам 4 19.05.2010 11:21
Как записать в массив время нажатия, отжатия клавиш Berta Помощь студентам 4 06.04.2010 17:29
Как записать в файл динамический массив. Вадим Буренков Общие вопросы Delphi 9 24.07.2009 15:12
БД и пользователи. Реал-тайм. Ramires БД в Delphi 7 19.01.2009 11:40
как прочитать из файла имя, фамилию разделенные пробелами и записать их в массив парами Rom@shka Общие вопросы C/C++ 2 13.12.2008 17:40