0

このコードを使用して円の画像を生成しようとしています。

#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;

double e, f;

double scaler (double a, double b) {
    if (a < 256) {  e = (-1) * a / 256.0;
        if (b < 256) {
            f = b / 256.0;
        } else {
            f = (-1) * (b - 256.0) / 256.0;
        }
    } else { e = (a - 256.0) / 256.0;
        if (b < 256) {
            f = b / 256.0;
        } else {
            f = (-1) * (b - 256.0) / 256.0;
        }
    }
    return e, f;
}

int main () {

    int max_color = 255;
    int dimention = 512;

    ofstream fout;
    fout.open("mandeloutput.ppm");

    fout << "P3\n" << dimention << " " << dimention << endl << max_color << endl;
    for (int i = 0; i < dimention; i++) { f = i;
        for (int j = 0; j < dimention; j++) { e = j;
            scaler (e, f);
            cout << fixed << setprecision(5) << e << " " << f << endl;
            if ( e*e + f*f <= 1) {
                fout << right << setw(4) << 0 << setw(4) << 0 << setw(4) << 0 << "   ";
            } else {fout << right << setw(4) << 255 << setw(4) << 255 << setw(4) << 255 << "   ";}
        }
        fout << endl;
    }
} 

変数eが常に 0 である理由と、タイトルに記載されているスケーラー内の変数に関するエラーが表示される理由がわかりません。

4

1 に答える 1

1

return e, f;あなたが思っていることをしません。コンマ演算子は単純に評価して破棄し、関数の結果としてeの値をf返します。いずれにせよこれらはグローバルであるため、この関数から何も返す必要はありませんが、グローバルを使用せず、これを適切に行う方がよいでしょう。グローバル宣言double e, f;を削除し、関数を次のように変更します。

void scaler (int a, int b, double &e, double &f) {
    if (a < 256) {  e = (-1) * a / 256.0;
        if (b < 256) {
            f = b / 256.0;
        } else {
            f = (-1) * (b - 256.0) / 256.0;
        }
    } else { e = (a - 256.0) / 256.0;
        if (b < 256) {
            f = b / 256.0;
        } else {
            f = (-1) * (b - 256.0) / 256.0;
        }
    }
}

次に、メイン関数で次の行を変更します。

for (int i = 0; i < dimention; i++) { f = i;
    for (int j = 0; j < dimention; j++) { e = j;
        scaler (e, f);
        ...

これに:

for (int i = 0; i < dimention; i++) {
    for (int j = 0; j < dimention; j++) {
        double e, f;
        scaler (j, i, e, f);
        ...
于 2012-10-09T03:18:26.947 に答える