Я включил фрагмент, который демонстрирует мою проблему. По сути, обработка дает мне эту ошибку:
map(NaN, -3, 3, -125, 125) called, which returns NaN (not a number)
Я понимаю это сообщение так, что функция map возвращает NaN, и, поскольку она возвращает float, я должен быть в состоянии проверить с помощью Float. NaN. Однако, как было показано, я не получаю ни одного удара при создании оператора if, который его проверяет. Я попытался поместить оператор if перед функцией map с соответствующими переменными, но без совпадений. Мне было интересно, может ли кто-нибудь объяснить мне это явление и помочь мне с отладкой кода. Это, вероятно, небольшая вещь, которую я наблюдаю, но это сводит меня с ума. Заранее спасибо
Фрагмент:
void setup() {
size(500, 500);
}
void draw() {
background(0);
}
class Complex {
private float re, im, r, p;
Complex(float real, float imag) {
re = real;
im = imag;
r = sqrt(sq(re)+sq(im)); //radius
p = atan2(im, re); //phase
}
Complex Div(Complex b) {
Complex a = this;
float real = (a.re*b.re+a.im*b.im)/(sq(b.re)+sq(b.im));
float imag = (a.im*b.re-a.re*b.im)/(sq(b.re)+sq(b.im));
return new Complex(real, imag);
}
Complex Ln() {
float real = log(r);
float imag = p;
return new Complex(real, imag);
}
Complex LogBase(Complex b) {
Complex a = this;
return a.Ln().Div(b.Ln());
}
Complex Scale(float scale, int dim) {
float real = map(re, -scale, scale, -dim, dim);
float imag = map(im, -scale, scale, -dim, dim);
if (real == Float.NaN || imag == Float.NaN) {
print("\nHit!");
}
return new Complex(real, imag);
}
}
void keyPressed() {
float d = width/4;
for (float z = -d; z<d; z++) {
for (float x = -d; x<d; x++) {
Complex c = new Complex(1, 5);
c = c.LogBase(new Complex(x, z));
c.Scale(3.0, int(d));
}
}
}