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

Массив, который заполняется по правилу - C++

Восстановить пароль Регистрация
 
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
15.04.2012, 19:35     Массив, который заполняется по правилу #1
Привет всем, помогите решить задачу, вот есть у меня массив, который заполняется по следующему правилу:
C++
1
2
3
4
5
6
 for( int y=0; y<100; y++ ) {
    uchar* mas = (uchar*) (image->imageData + y * image->widthStep);
    for( int x=0; x<100; x++ ) {
        printf(" mas = %d", mas[x]);
                        }
                    }
Заполняется он как двумерный, но в итоге получаем одномерный я правильно поняла? вопрос как обратится к нему как к двумерному?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
15.04.2012, 19:38     Массив, который заполняется по правилу #2
Объекты какого класса возвращают поля imageData и widthStep объекта image?
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
15.04.2012, 19:47     Массив, который заполняется по правилу #3
обозначим
mas=image->imageData - это адрес начала массива.
L=image->widthStep - длина каждой строки.
тогда (x,y) элемент определяется как
mas[y*L+x].
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
15.04.2012, 20:36  [ТС]     Массив, который заполняется по правилу #4
Цитата Сообщение от zss Посмотреть сообщение
обозначим
mas=image->imageData - это адрес начала массива.
L=image->widthStep - длина каждой строки.
тогда (x,y) элемент определяется как
mas[y*L+x].
Я вот так изменила, правильно?
C++
1
2
3
4
5
6
7
for( int y=0; y<100; y++ ) {
            int L = image->widthStep;
                uchar* mas = (uchar*) (image->imageData + y * L);
                    for( int x=0; x<100; x++ ) {
                            printf(" mas = %d", mas[y*L + x]);
                        }
                    }
А можно данный массив привести к виду mas[x][y]?
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
15.04.2012, 20:42     Массив, который заполняется по правилу #5
C++
1
2
3
4
5
6
7
8
9
uchar* mas = (uchar*)image->imageData;
int L = image->widthStep;
for( int y=0; y<100; y++ ) 
{
     for( int x=0; x<100; x++ ) 
     {
            printf(" mas = %d", mas[y*L + x]);
      }
 }
mas[y][x] сделать нельзя, т.к. тогда mas - это (uchar**) .
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
15.04.2012, 21:06  [ТС]     Массив, который заполняется по правилу #6
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
uchar* mas = (uchar*)image->imageData;
int L = image->widthStep;
for( int y=0; y<100; y++ ) 
{
     for( int x=0; x<100; x++ ) 
     {
            printf(" mas = %d", mas[y*L + x]);
      }
 }
mas[y][x] сделать нельзя, т.к. тогда mas - это (uchar**) .
Вот я не совсем поняла - данный массив двумерный? mas[y*L + x]? не могли бы вы помочь запрограммировать эту формулу, а то я не пойму как с этим массивом работать, никогда раньше дел с такими массивами не имела, так хоть пример будет какой-то. Sigma произвольный коээфициент, к примеру 0.5, ну а x,y это элементы этого злосчастного массива.
Изображения
 
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 21:25     Массив, который заполняется по правилу #7
Цитата Сообщение от kate11 Посмотреть сообщение
Вот я не совсем поняла - данный массив двумерный? mas[y*L + x]? не могли бы вы помочь запрограммировать эту формулу, а то я не пойму как с этим массивом работать, никогда раньше дел с такими массивами не имела, так хоть пример будет какой-то. Sigma произвольный коээфициент, к примеру 0.5, ну а x,y это элементы этого злосчастного массива.
C++
1
2
3
4
double G(int x, int y)
{
 return exp(-(x*x+y*y)/(2*sigma*sigma))/(2*M_PI*sigma*sigma);
}
Но непонятно, что за х и у в шапке...
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
15.04.2012, 21:30  [ТС]     Массив, который заполняется по правилу #8
Цитата Сообщение от Nekto Посмотреть сообщение
C++
1
2
3
4
double G(int x, int y)
{
 return exp(-(x*x+y*y)/(2*sigma*sigma))/(2*M_PI*sigma*sigma);
}
Но непонятно, что за х и у в шапке...
Нет, так я понимаю как сделать, я про массив говорила, ну т.е. х, у берется из mas[y*L + x], а он может быть к примеру 20x20.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 22:37     Массив, который заполняется по правилу #9
Цитата Сообщение от kate11 Посмотреть сообщение
Нет, так я понимаю как сделать, я про массив говорила, ну т.е. х, у берется из mas[y*L + x], а он может быть к примеру 20x20.
x, y - это 2 разных числа. Какой индекс элемента для каждого из них?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.04.2012, 22:43     Массив, который заполняется по правилу #10
Цитата Сообщение от Nekto Посмотреть сообщение
x, y - это 2 разных числа. Какой индекс элемента для каждого из них?
Есть подозрение, что здесь не массив, а что-то вроде
C++
1
2
#include <map>
std::map<double x, double y> map;
должно быть...
kate11
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 33
16.04.2012, 00:10  [ТС]     Массив, который заполняется по правилу #11
Цитата Сообщение от zss Посмотреть сообщение
тогда (x,y) элемент определяется как
mas[y*L+x].
Вроде же писали про это. Еще лучше чтобы я с этим не заморачивалась, попробовать как-то сделать массив вида mas[x][y], с ним как-то проще работать...
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
16.04.2012, 00:47     Массив, который заполняется по правилу #12
Цитата Сообщение от kate11 Посмотреть сообщение
Вроде же писали про это. Еще лучше чтобы я с этим не заморачивалась, попробовать как-то сделать массив вида mas[x][y], с ним как-то проще работать...
ну так создай массив размерности нужной и засунь туда нужные элементы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2012, 21:15     Массив, который заполняется по правилу
Еще ссылки по теме:

Заполнить массив строк из файла. Массив заполняется, но выводится не корректно C++
Не заполняется массив указателей C++
C++ В общем, не пойму почему криво заполняется массив

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
16.04.2012, 21:15     Массив, который заполняется по правилу #13
Не очень понятно, зачем это нужно,
но массив можно заполнить, например, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void FillMass(double* mas,int L,int M,double x0,double stepx,double y0,double stepy)
{
      mass=new double[M*N];
      double x=x0,y=y0;
     for(int i=0;i<M;i++)
     {
         for(int j=0;J<L,j++)
         {
            mas[i*L+j]=exp(-(x*x+y*y)/(2*sigma*sigma))/(2*M_PI*sigma*sigma);
            x+=stepx;
         }
        y+=stepy;
     }
}
Yandex
Объявления
16.04.2012, 21:15     Массив, который заполняется по правилу
Ответ Создать тему
Опции темы

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