我正在尝试使用此代码生成圆形图像。
#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,为什么我在标题中得到关于该变量的标题中描述的错误?
答案 0 :(得分: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);
...