As Mahdi KhosroAnjom pointed out, there is a region in each curve where the output is fairly linear with position. If the sensors are spaced properly, then you will always have one of those regions to use. The way that your sensors are spaced, there are positions where none of the sensors are in a linear region. I've used arrays of Hall sensors in this way, but you still run into the problem of deciding which sensor is the right one to use.
You can get outputs from your four sensors that are nearly sinusoidal if you use an array of magnets. Instead of orienting the magnetic pole axis parallel to the motion axis, you use an array of magnets that alternatively have their pole axis pointing towards or away from the sensors. In reality, you wouldn't use a bunch of separate magnets, but use a magnetic strip that is already poled that way.
Here is an example from Adafruit. What is not obvious in the video is that the individual poles are alternating N up, S up, N up, S up, etc. Interestingly, the flexible magnetic tape that you can buy at office supply stores is also magnetized in that way, as are those flat sheets that get glued to business cards so that they'll stick to a refrigerator.
The output of the Hall sensors will be nearly sinusoidal as long as you are not near the end of the strip. Ideally, you will have four sensors that fit exactly in the length of one pole pair. In theory, you could get away with just two spaced 90 degrees apart. That would give you sine and cosine, then you could use ATAN() to find the "angle" just as you are trying to do now. The problem is that using the output of a single sensor for sin and another for cos becomes very inaccurate because the system becomes tremendously sensitive to the spacing between the magnets and the sensors. If you have four sensors, then you can position them 90 degrees apart and use them in differential pairs (180 degrees apart) and the whole thing suddenly becomes very immune to the distance between the magnet strip and the sensors.
The difficult part is that the sensors must lie exactly 90 degrees apart.To put it a different way: the pole spacing of the magnets must be exactly twice the distance between the sensors. Still another way: you want one pole pair (360 degrees) to cover the four magnets.
EDIT: I already said that the sensor outputs will be nearly sinusoidal provided you are not too close to the end of the strip of magnets. I just want to reiterate the importance of this. The sensors need to see what looks to them like an infinitely long array of magnets. As long as you always have at least one pair of magnets sticking out each end of the sensor array, this method of position sensing can be very accurate
This method is used for position sensing in many applications. This sensor from AMS has an array of eight sensors that reads a magnet with 2mm pole pairs. The use of eight sensors instead of four essentially allows for some averaging to improve accuracy.