2016-11-09 7 views
1

Я пытаюсь изменить (умножить на int) значение определенной позиции (i, j) в 3 разных матрицах в зависимости от некоторого условия. Однако, когда я печатаю целые матрицы, кажется, что это умножая первый по всему Интсу (даже те, для второго и третьего матрицМатрицы, переписывающие друг друга

Здесь я объявляю глобальные матрицы и атрибуты, включая некоторое распределение памяти:.

int HEIGHT; 
int WIDTH; 
int ** matrixR= new int*[HEIGHT]; 
int ** matrixG= new int*[HEIGHT]; 
int ** matrixB= new int*[HEIGHT]; 

Затем, в функции я полный матрицы:

for(i=0; i<HEIGHT; i++){ 
     matrixR[i]= new int[WIDTH]; 
     matrixG[i]= new int[WIDTH]; 
     matrixB[i]= new int[WIDTH]; 
} 

Здесь условия я оценить для каждой матрицы:

for (int i = 0; i < HEIGHT; ++i) { 
    for (int j = 0; j < WIDTH; ++j) { 
     float suma = pow(i - centerY, 2) + pow(j - centerX, 2); 
     if (suma > pow(radius, 2)) { 
      matrixR[i][j] = matrixR[i][j] * 1; 
     } 
    } 

} 

for (int i = 0; i < HEIGHT; ++i) { 
    for (int j = 0; j < WIDTH; ++j) { 
     float suma = pow(i - centerY, 2) + pow(j - centerX, 2); 
     if (suma > pow(radius, 2)) { 
      matrixG[i][j] = matrixG[i][j] * 2; 
     } 
    } 
} 

for (int i = 0; i < HEIGHT; ++i) { 
    for (int j = 0; j < WIDTH; ++j) { 
     float suma = pow(i - centerY, 2) + pow(j - centerX, 2); 
     if (suma > pow(radius, 2)) { 
      matrixB[i][j] = matrixB[i][j] * 3; 
     } 
    } 
} 

Затем, когда я печатаю элементы первой матрицы:

for (int k = 0; k < HEIGHT; ++k) { 
    for (int i = 0; i < WIDTH; ++i) { 
     cout << matrixR[k][i] << " | "; 
    } 
    cout << '\n'; 
} 

Где я должен получать matrixR[i][j]*1 я получаю matrixB[i][j]. Переписывают ли матрицы друг друга? Что-то не так?

+0

Good writt ru вопрос. :) – MordechayS

+0

Какова точка 'matrixR [i] [j] = matrixR [i] [j] * 1;'? –

+1

Вы инициализировали значения в своих матрицах? –

ответ

1

Я добавил значения для центра X, центра Y и радиуса, и я добавил секцию инициализации (все элементы матрицы являются потом).

Я не могу найти ошибку, выход

1 | 1 | 1 | 1 | 1 | 1 | 1 | 
1 | 1 | 1 | 1 | 1 | 1 | 1 | 
1 | 1 | 1 | 1 | 1 | 1 | 1 | 
1 | 1 | 1 | 1 | 1 | 1 | 1 | 
1 | 1 | 1 | 1 | 1 | 1 | 1 | 


2 | 2 | 2 | 2 | 2 | 2 | 2 | 
2 | 2 | 2 | 2 | 2 | 2 | 2 | 
2 | 2 | 2 | 1 | 2 | 2 | 2 | 
2 | 2 | 1 | 1 | 1 | 2 | 2 | 
2 | 2 | 2 | 1 | 2 | 2 | 2 | 


3 | 3 | 3 | 3 | 3 | 3 | 3 | 
3 | 3 | 3 | 3 | 3 | 3 | 3 | 
3 | 3 | 3 | 1 | 3 | 3 | 3 | 
3 | 3 | 1 | 1 | 1 | 3 | 3 | 
3 | 3 | 3 | 1 | 3 | 3 | 3 | 

Это код, который я использовал:

// init variables 
int HEIGHT = 5; 
int WIDTH = 7; 
int centerY = 3; 
int centerX = 3; 
int radius = 1; 



int ** matrixR= new int*[HEIGHT]; 
int ** matrixG= new int*[HEIGHT]; 
int ** matrixB= new int*[HEIGHT]; 

for(int i=0; i<HEIGHT; i++){ 
     matrixR[i]= new int[WIDTH]; 
     matrixG[i]= new int[WIDTH]; 
     matrixB[i]= new int[WIDTH]; 
} 


// init matrix values 
{ 
for (int k = 0; k < HEIGHT; ++k) 
    for (int i = 0; i < WIDTH; ++i) 
     matrixR[k][i] = 1; 

for (int k = 0; k < HEIGHT; ++k) 
    for (int i = 0; i < WIDTH; ++i) 
     matrixG[k][i] = 1; 

for (int k = 0; k < HEIGHT; ++k) 
    for (int i = 0; i < WIDTH; ++i) 
     matrixB[k][i] = 1; 
} 


for (int i = 0; i < HEIGHT; ++i) { 
    for (int j = 0; j < HEIGHT; ++j) { 
     float suma = pow(static_cast<double>(i) - centerY, 2) + pow(static_cast<double>(j) - centerX, 2); 
     if (suma > pow(static_cast<double>(radius), 2)) { 
      matrixR[i][j] = matrixR[i][j] * 1; 
     } 
    } 

} 

for (int i = 0; i < HEIGHT; ++i) { 
    for (int j = 0; j < WIDTH; ++j) { 
     float suma = pow(static_cast<double>(i) - centerY, 2) + pow(static_cast<double>(j) - centerX, 2); 
     if (suma > pow(static_cast<double>(radius), 2)) { 
      matrixG[i][j] = matrixG[i][j] * 2; 
     } 
    } 
} 

for (int i = 0; i < HEIGHT; ++i) { 
    for (int j = 0; j < WIDTH; ++j) { 
     float suma = pow(static_cast<double>(i) - centerY, 2) + pow(static_cast<double>(j) - centerX, 2); 
     if (suma > pow(static_cast<double>(radius), 2)) { 
      matrixB[i][j] = matrixB[i][j] * 3; 
     } 
    } 
} 

for (int k = 0; k < HEIGHT; ++k) { 
    for (int i = 0; i < WIDTH; ++i) { 
     cout << matrixR[k][i] << " | "; 
    } 
    cout << '\n'; 
} 

cout << '\n'; 
cout << '\n'; 

for (int k = 0; k < HEIGHT; ++k) { 
    for (int i = 0; i < WIDTH; ++i) { 
     cout << matrixG[k][i] << " | "; 
    } 
    cout << '\n'; 
} 

cout << '\n'; 
cout << '\n'; 

for (int k = 0; k < HEIGHT; ++k) { 
    for (int i = 0; i < WIDTH; ++i) { 
     cout << matrixB[k][i] << " | "; 
    } 
    cout << '\n'; 
} 

std::cin.get(); 
+0

Спасибо, похоже, что это был факт, что мои матрицы были глобальными. Я до сих пор не понимаю, почему это не сработает, но если вы поместите (как вы) в один основной(), он работает. – danielsto

+0

Вы можете отправить исходный код, где возникает ошибка? –

0

Добавлено это, чтобы сделать его компиляции и запуска:

for(int i=0; i < HEIGHT; ++i) { 
    for (int j=0; j < WIDTH; ++j){ 
     matrixR[i][j] = 3; 
     matrixG[i][j] = 20; 
     matrixB[i][j] = 30; 
    } 
} 

int centerX = 5; 
int centerY = 5; 
int radius = 2; 

Выход я получаю прекрасно выглядит ...

Смежные вопросы