Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
1

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

26.09.2013, 03:05. Показов 1420. Ответов 24
Метки нет (Все метки)

Код.
Программа должна нарисовать точки, так как описано в массиве, проблема в том что, она рисует точки только использует еще точку 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();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2013, 03:05
Ответы с готовыми решениями:

Странная ошибка в алгоритме заполнения массива из файла
Алгоритм приведенный ниже, на самом деле является частью функции, которая работает некорректно. По...

Сортировка массива структур (запутался я)
Доброго времени! собственно сразу обращение за помощью. есть структура и массив таких...

Запутался в выводе на экран сведений из массива
Запутался в выводе на экран сведений из массива. Вот условие задачи. Создать базовый класс...

Присвоение элементов одного массива другому и упорядочивание их в конкретном алгоритме
Дано: есть массив X из 10 элементов всегда рандомных чисел, элементы массива X присвоить массиву Y...

24
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 03:53 2
Вот это - выход за границу массива:
C++
1
2
a<=10;
b<=10;
Нужно просто: < .
1
131 / 129 / 51
Регистрация: 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;
}
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 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();
}
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
26.09.2013, 13:37 5
Цитата Сообщение от xTIGRx Посмотреть сообщение
Ошибка где то тут помоему, но только где понять не могу...
Не тупи.
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот это - выход за границу массива:
C++
1
2
a<=10;
b<=10;
Нужно просто: < .
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
26.09.2013, 14:10  [ТС] 6
не получается же говорю, скомпилируй и глянь
вот глянь на фотку Результат

Добавлено через 4 минуты
Поменял разрешение окна с 500 на 450, получилось...как же трудно привыкнуть что в C++ отсчет идет от нуля
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
26.09.2013, 14:21 7
Ты сказал что точки с координатой 450 быть не должно, хотя 9*50=450
Теперь ты поменял размер окна и сказал что проблема решена, хотя точка с координатой 450 осталась.
Как тебе можно помочь, если ты не можешь понятным языком объяснить проблему?
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 14:43 8
Цитата Сообщение от xTIGRx Посмотреть сообщение
она рисует точки только использует еще точку 450, хотя он не должен его исопльзовать, так как координата 450 указывает на число 0
Всё у вас правильно рисует. Первая координата в строке 0, последняя - 450, там единица. Только исправьте то, на что я указал. Задайте в вашем коде окно 600х600 и увидите кривизну работы, если не сделать исправления.
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
26.09.2013, 14:44  [ТС] 9
Неужели вы до сих пор не понял в чем заключалась моя задача, даже пускай я не правильно обяснил но по картинкам можно было догадаться что точки должны рисовать в соостветсвии с 1 в массиве, я же выше все написал
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 14:50 10
Вы что 50 на 9 не можете умножить? В чём неправильность рисования? Координата последней точки в строке (а массиве) 450.
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 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. вот как то так, тупанул я как вам это еще сказать?)
0
5479 / 4874 / 831
Регистрация: 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 в массиве, я же выше все написал
Они так и рисовались, а как вы там, и что считали - это уже другой вопрос. Я пишу о том как код работал.
0
855 / 445 / 111
Регистрация: 06.07.2013
Сообщений: 1,483
26.09.2013, 15:03 13
Цитата Сообщение от xTIGRx Посмотреть сообщение
glRotared подойдет или лучше сразу всю систему координат перевернуть???
а как еще повернуть объект без матрицы поворота
0
131 / 129 / 51
Регистрация: 25.05.2013
Сообщений: 233
26.09.2013, 15:54 14
xTIGRx, а чем мой код не то?
Цитата Сообщение от xTIGRx Посмотреть сообщение
Нет это не то), видимо я не правильно составил вопрос, перевразирую.
Цель: программа должна нарисовать точки в соответствии с массивом, тоесть в данном случаем у меня массив такой
1
Миниатюры
запутался в алгоритме создания массива  
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 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 секунд снизу вверху???
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
26.09.2013, 16:44  [ТС] 16
Вот видео с тем что виводится у меня на компе
0
Вложения
Тип файла: rar video.rar (80.0 Кб, 4 просмотров)
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 16:56 17
Цитата Сообщение от xTIGRx Посмотреть сообщение
И скажите у вас также игрушка тормозит при отрисовке поля, тоесть вначале за 5 секунд рисуется поле до правого края, а после еще 5 секунд снизу вверху???
Нет.
1
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
26.09.2013, 17:33  [ТС] 18
Есть идеи почему так происходит???
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 17:52 19
Цитата Сообщение от xTIGRx Посмотреть сообщение
Есть идеи почему так происходит???
Нет. Наверное, что-то с буферизацией связано...

Добавлено через 2 минуты
glut какой?
0
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
26.09.2013, 18:09  [ТС] 20
Этот http://www.opengl.org/resources/libraries/glut/

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

Добавлено через 2 минуты
glut какой?
а как у вас MVS???
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2013, 18:09

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Разработать программу для создания нового массива, содержащего повторяющиеся элементы исходного массива
Есть псевдокод. Возможно он не правильный ( я же состовлял.) Помогите сделать программу на паскале...

Разработать алгоритм создания нового массива , куда помещаются разности соседних четных элементов массива
Задан целочисленный массив с N элементами. Разработать алгоритм создания нового массива , куда...

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива
Помогите, пожалуйста, нужно разработать метод-член класса для создания одномерного массива из...

Функции создания массива и удаления эл-та из массива
Вот нужно написать к двум функциям (на Си) .h и .c файлы : 1. создания массива 2. удаление...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.