2016-11-09 2 views
1

いくつかの条件によっては、3つの異なる行列内の特定の位置(i、j)の値を(intで)掛けようとしています。私は、全体の行列を印刷するときしかし、すべてint型二と第三の行列のための(偶数のものによる最初の1を乗じだと思われ互いに上書きされる行列

ここで私は、グローバル行列を宣言し、いくつかのメモリ割り当てを含む属性:。

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'; 
} 

私はmatrixB[i][j]を取得していますmatrixR[i][j]*1を取得する必要があります。行列が互いに上書きされていますか?どうかしましたか?

+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 | 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

ありがとう、それは私の行列がグローバルであったという事実であると思われます。 1つの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; 

出力よく見えます...

関連する問題