Results of a Bored Java Student
Wed 29 December 2021A Graphing Calculator
I didn't realize that if you know C++, you can learn Java in a few days. It didn't take long until I was curious about the things I could make in the limited development environment supplied by my high school.
During class, we had these short programs that would teach the student a basic concept in Java. It took me about a minute to complete each coding activity, so I often found myself staring at my Google Classroom assignments, pretending that I was doing something productive.
After a little while, we finally got to learning how to
call functions in Java. The demo we were given in class to practice was a simulation
of a turtle that you could move around with function calls like forward()
and
turnRight()
. This finally gave me an idea of something I could make in my free time.
Around the same time, we were doing a lot of graphing
in my Calculus class, so I thought it would be funny to make a graphing
calculator using the turtle. While everyone was making the turtle draw squares,
I had the turtle graphing y = cos(1/x)
, and x = sin(y)
. Yes, this thing
can graph relations, not just functions.
y = cos(1/x)
A relation I cannot remember
I wish I could say this was cool. Of course the code behind it is pretty cool, but the demonstration of mathematics here is lacking. If I can graph real numbers, I better be able to graph imaginary numbers too. Yes, I'm talking about making a mandelbrot set with the turtles.
I first wanted to make the fractal viewer in just ASCII art, but I ended up getting an image that didn't look like a mandelbrot.
The FailFractal
Turns out, This isn't a fluke, because I did a render using the turtles for color, and it also looks strange.
The Colored FailFractal
The bug isn't actually in the math, it's just because I forgot how to use temporary variables.
Improper Imaginary Arithmetic
public void Square()
{
aReal = ( aReal * aReal ) - ( aImag * aImag );
aImag = 2 * ( aReal * aImag ); // You can tell something's wrong here...
}
Proper Implementation
public void Square()
{
double real = ( aReal * aReal ) - ( aImag * aImag );
aImag = 2 * ( aReal * aImag );
aReal = real;
}
You gotta love how experienced programmers create the simplest bugs that cause the most frustration. This almost feels embarrassing. Sure enough, after that fix, I had a working mandelbrot. I actually ported my fractal viewer to C before fixing this bug but I'll expand on that in a later post. I have no idea if I'm the first to discover the weird fractal I made with that small bug, but if I am, I would like it to be known as the FailFractal, discovered by me.