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

запутался в алгоритме создания массива - C++

Восстановить пароль Регистрация
 
 
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 03:05     запутался в алгоритме создания массива #1
Код.
Программа должна нарисовать точки, так как описано в массиве, проблема в том что, она рисует точки только использует еще точку 450, хотя он не должен его исопльзовать, так как координата 450 указывает на число 0, а в программе написано рисовать точки только когда цифра 1 найдена
Кликните здесь для просмотра всего текста
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
#include <GL\glut.h>
 
int w=500, h=500;
int mas[10][10]=
{
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
};
 
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
for(int a=0; a<=10; ++a)
{
for(int b=0; b<=10; ++b)
{
if(mas[a][b]==1) glVertex2i(a*50,b*50);
}
}
glEnd();
glFlush();
}
 
int main()
{
glutInitDisplayMode(GLUT_SINGLE || GLUT_RGB);
glutInitWindowSize(w, h);
glutInitWindowPosition(300,100);
glutCreateWindow("OpenGL");
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, w, 0, h);
glutDisplayFunc(display);
glutMainLoop();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 03:53     запутался в алгоритме создания массива #2
Вот это - выход за границу массива:
C++
1
2
a<=10;
b<=10;
Нужно просто: < .
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
26.09.2013, 04:08     запутался в алгоритме создания массива #3
xTIGRx, Ваш код мне не удалось собрать. Сделал Вашу задачу по-своему. Думаю, в моем коде разберетесь.
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
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
 
#define SIZE 10 // размерность квадратной матрицы
#define STEP 10.0 // шаг рисования точек
#define HALF_WIDTH 100.0 // расстояние от центра окна до края по оси X
#define HALF_HEIGHT 100.0 // расстояние от центра окна до края по оси X
#define FIRST_X -45.0 // координата X для первой точки
#define FIRST_Y 45.0 // координата Y для первой точки
 
void RenderScene() {
 
    int mas[ SIZE ][ SIZE ] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
                                { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
                                { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
                                { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, } };
 
    glClear( GL_COLOR_BUFFER_BIT );
    glColor3f( 1.0f, 0.0f, 0.0f );
 
    glBegin( GL_POINTS );
    // перебираем массив для поиска 1
    for ( int i = 0; i < SIZE; ++i )
        for ( int j = 0; j < SIZE; ++j )
            if ( mas[ i ][ j ] == 1 ) // если нашли 1
                glVertex2f( FIRST_X + STEP * i, FIRST_Y - STEP * j ); // рисуем точку в соответсвующем месте
 
    glEnd();
 
    glutSwapBuffers();
}
 
void SetupRC() {
    glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
}
 
void ChangeSize( GLsizei w, GLsizei h ) {
    GLfloat aspect_ratio;
 
    if ( h == 0 )
        h = 1;
 
    glViewport( 0, 0, w, h );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
 
    aspect_ratio = ( GLfloat ) w / ( GLfloat ) h;
    if ( w <= h )
        glOrtho( -HALF_WIDTH, HALF_WIDTH, -HALF_HEIGHT / aspect_ratio, HALF_HEIGHT / aspect_ratio, 1.0, -1.0 );
    else
        glOrtho( -HALF_WIDTH * aspect_ratio, HALF_WIDTH * aspect_ratio, -HALF_HEIGHT, HALF_HEIGHT, 1.0, -1.0 );
 
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
 
}
int main( int argc, char *argv[] ) {
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
    glutCreateWindow( "POINTS_1_0" );
    glutDisplayFunc( RenderScene );
    glutReshapeFunc( ChangeSize );
    SetupRC();
    glutMainLoop();
    return 0;
}
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 13:31  [ТС]     запутался в алгоритме создания массива #4
Нет это не то), видимо я не правильно составил вопрос, перевразирую.
Цель: программа должна нарисовать точки в соответствии с массивом, тоесть в данном случаем у меня массив такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int mas[10][10]=
{
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
};
значит программа должна нарисовать, точки вокруг окна, тоесть по краям а в центре ничего не должно быть, так как в середине массива одни нули. а программа рисует только когда единицы.
Ошибка где то тут помоему, но только где понять не могу...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
for(int a=0; a<=10; ++a)
{
for(int b=0; b<=10; ++b)
{
if(mas[a][b]==1) glVertex2i(a*50,b*50);
}
}
glEnd();
glFlush();
}
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
26.09.2013, 13:37     запутался в алгоритме создания массива #5
Цитата Сообщение от xTIGRx Посмотреть сообщение
Ошибка где то тут помоему, но только где понять не могу...
Не тупи.
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот это - выход за границу массива:
C++
1
2
a<=10;
b<=10;
Нужно просто: < .
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 14:10  [ТС]     запутался в алгоритме создания массива #6
не получается же говорю, скомпилируй и глянь
вот глянь на фотку Результат

Добавлено через 4 минуты
Поменял разрешение окна с 500 на 450, получилось...как же трудно привыкнуть что в C++ отсчет идет от нуля
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
26.09.2013, 14:21     запутался в алгоритме создания массива #7
Ты сказал что точки с координатой 450 быть не должно, хотя 9*50=450
Теперь ты поменял размер окна и сказал что проблема решена, хотя точка с координатой 450 осталась.
Как тебе можно помочь, если ты не можешь понятным языком объяснить проблему?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 14:43     запутался в алгоритме создания массива #8
Цитата Сообщение от xTIGRx Посмотреть сообщение
она рисует точки только использует еще точку 450, хотя он не должен его исопльзовать, так как координата 450 указывает на число 0
Всё у вас правильно рисует. Первая координата в строке 0, последняя - 450, там единица. Только исправьте то, на что я указал. Задайте в вашем коде окно 600х600 и увидите кривизну работы, если не сделать исправления.
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 14:44  [ТС]     запутался в алгоритме создания массива #9
Неужели вы до сих пор не понял в чем заключалась моя задача, даже пускай я не правильно обяснил но по картинкам можно было догадаться что точки должны рисовать в соостветсвии с 1 в массиве, я же выше все написал
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 14:50     запутался в алгоритме создания массива #10
Вы что 50 на 9 не можете умножить? В чём неправильность рисования? Координата последней точки в строке (а массиве) 450.
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 14:53  [ТС]     запутался в алгоритме создания массива #11
Еще вопрос, вот мой массив

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int w=450, h=450;
 
gluOrtho2D(0, w, 0, h);
 
int mas[10][10]=
{
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1
};
какую функцию использовать чтобы перевернуть изображение, в соответсвии с массивами, glRotared подойдет или лучше сразу всю систему координат перевернуть??? дайте совет эксперта

Добавлено через 3 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы что 50 на 9 не можете умножить? В чём неправильность рисования? Координата последней точки в строке (а массиве) 450.
alsav22 я же сказал что умножил 10 на 50, вы скажите откуда взял 10? вот отсуда mas[10][10] хотя забыл что нумерация в массиве идет от нуля. в данном случаем 0.1.2...9. вот как то так, тупанул я как вам это еще сказать?)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 14:56     запутался в алгоритме создания массива #12
Может так понятней?
1 0 0 0 0 0 0 0 0 1
0 - 50 - 100 - 150 - 200 - 250 - 300 - 350 - 400 - 450

Добавлено через 2 минуты
Цитата Сообщение от xTIGRx Посмотреть сообщение
можно было догадаться что точки должны рисовать в соостветсвии с 1 в массиве, я же выше все написал
Они так и рисовались, а как вы там, и что считали - это уже другой вопрос. Я пишу о том как код работал.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
26.09.2013, 15:03     запутался в алгоритме создания массива #13
Цитата Сообщение от xTIGRx Посмотреть сообщение
glRotared подойдет или лучше сразу всю систему координат перевернуть???
а как еще повернуть объект без матрицы поворота
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
26.09.2013, 15:54     запутался в алгоритме создания массива #14
xTIGRx, а чем мой код не то?
Цитата Сообщение от xTIGRx Посмотреть сообщение
Нет это не то), видимо я не правильно составил вопрос, перевразирую.
Цель: программа должна нарисовать точки в соответствии с массивом, тоесть в данном случаем у меня массив такой
Миниатюры
запутался в алгоритме создания массива  
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 16:35  [ТС]     запутался в алгоритме создания массива #15
Цитата Сообщение от UranFlex Посмотреть сообщение
xTIGRx, а чем мой код не то?
Тот

Добавлено через 5 минут
ладно тогда буду пробовать glRotared.
еще последная просьба, откомпилируйте пожалуйста этот код у себя на компе

Кликните здесь для просмотра всего текста
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
#include <GL\glut.h>
 
int W=20, H=20;
int Scale=30;
int w=Scale*W;
int h=Scale*H;
int dir=0, num=4;
struct
{
    int x;
    int y;
} s[100];
 
void DrawCell()
{
    glColor3f(0.0,1.0,0.0);
    glBegin(GL_LINES);
    for(int i=0; i<w; i+=Scale)
    {
        glVertex2f(i,0); 
        glVertex2f(i,h);
    }
    for(int i=0; i<h; i+=Scale)
    {
        glVertex2f(0,i);
        glVertex2f(w,i);
    }
    glEnd();
} 
 
void DrawSnake()
{
    glColor3f(0.0,0.0,1.0);
    for(int i=0; i<num; i++)
    {
            glRecti(s[i].x*Scale, s[i].y*Scale, (s[i].x+1)*Scale, (s[i].y+1)*Scale);
    }
 
}
 
void MyKeyboard(int key, int a, int b)
{
    switch(key)
    {
    case GLUT_KEY_UP: dir=0; break;
    case GLUT_KEY_DOWN: dir=1; break;
    case GLUT_KEY_LEFT: dir=2; break;
    case GLUT_KEY_RIGHT: dir=3; break;
    case GLUT_KEY_HOME: num++; break;
    }
}
 
void Tick()
{
    for(int i=num; i>0; --i)
    {
        s[i].x=s[i-1].x;
        s[i].y=s[i-1].y;
    }
 
    switch(dir)
    {
    case 0: s[0].y+=1; break;
    case 1: s[0].y-=1; break;
    case 2: s[0].x-=1; break;
    case 3: s[0].x+=1; break;
    }
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    DrawSnake();
    DrawCell();
    glFlush();
}
 
void timer(int)
{
    display();
    Tick();
    glutTimerFunc(100,timer,0);
}
 
int main()
{
    glutInitDisplayMode(GLUT_SINGLE||GLUT_RGB);
    glutInitWindowSize(w,h);
    glutInitWindowPosition(400,100);
    glutCreateWindow("Snake");
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0,w,0,h);
    glutDisplayFunc(display);
    glutSpecialFunc(MyKeyboard);
    timer(0);
    glutMainLoop();
}


И скажите у вас также игрушка тормозит при отрисовке поля, тоесть вначале за 5 секунд рисуется поле до правого края, а после еще 5 секунд снизу вверху???
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 16:44  [ТС]     запутался в алгоритме создания массива #16
Вот видео с тем что виводится у меня на компе
Вложения
Тип файла: rar video.rar (80.0 Кб, 3 просмотров)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 16:56     запутался в алгоритме создания массива #17
Цитата Сообщение от xTIGRx Посмотреть сообщение
И скажите у вас также игрушка тормозит при отрисовке поля, тоесть вначале за 5 секунд рисуется поле до правого края, а после еще 5 секунд снизу вверху???
Нет.
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 17:33  [ТС]     запутался в алгоритме создания массива #18
Есть идеи почему так происходит???
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 17:52     запутался в алгоритме создания массива #19
Цитата Сообщение от xTIGRx Посмотреть сообщение
Есть идеи почему так происходит???
Нет. Наверное, что-то с буферизацией связано...

Добавлено через 2 минуты
glut какой?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 18:09     запутался в алгоритме создания массива
Еще ссылки по теме:

Сортировка массива структур (запутался я) C++
C++ Динамическое создания массива со случайной длинной
Странная ошибка в алгоритме заполнения массива из файла C++

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

Или воспользуйтесь поиском по форуму:
xTIGRx
 Аватар для xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,169
Записей в блоге: 1
26.09.2013, 18:09  [ТС]     запутался в алгоритме создания массива #20
Этот http://www.opengl.org/resources/libraries/glut/

Добавлено через 7 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Нет. Наверное, что-то с буферизацией связано...

Добавлено через 2 минуты
glut какой?
а как у вас MVS???
Yandex
Объявления
26.09.2013, 18:09     запутался в алгоритме создания массива
Ответ Создать тему
Опции темы

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