2016-11-09 108 views
1

我試圖根據某些條件在3個不同的矩陣中改變(乘以int)某個位置(i,j)的值。然而,當我打印整個矩陣似乎它乘以所有整數的第一個(甚至是那些第二和第三矩陣矩陣相互覆蓋

下面我宣佈全球矩陣和屬性,包括一些內存分配。

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恩問題。 :) – MordechayS

+0

'matrixR [i] [j] = matrixR [i] [j] * 1;'? –

+1

你初始化矩陣中的值了嗎? –

回答

1

我爲centerX,centerY和radius添加了值,並添加了一個初始化部分(所有矩陣元素都是一個)。

我找不到一個錯誤,輸出爲

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

謝謝,似乎是這是事實,我的矩陣是全球性的,我仍然不明白爲什麼它不會工作,但如果把(像你)放在一個main()中,它可以工作。 – 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; 

輸出我看起來很好...