Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Float calculation keeps returning 0.0

I'm writing a method to return a List of Points between 2 Points. Somehow the slope (y2-y1)/(x2-x1) keeps giving me 0.0 all the time regardless startPoint and endPoint positions. Here is the method:

public ArrayList<Point> calculatePath(Point startPoint, Point endPoint) {
        ArrayList<Point> calculatedPath = new ArrayList<>();
        int x1 = startPoint.x;
        int y1 = startPoint.y;
        int x2 = endPoint.x;
        int y2 = endPoint.y;
        System.out.println("Run");
        if ((x2 - x1) != 0) {
            float ratio = ((y2 - y1) / (x2 - x1));
            System.out.println(ratio);
            int width = x2 - x1;
            for (int i = 0; i < width; i++) {
                int x = Math.round(x1 + i);
                int y = Math.round(y1 + (ratio * i));
                calculatedPath.add(new Point(x, y));
            }
        } else {

            if (y1 < y2) {
                while (y1 == y2) {
                    calculatedPath.add(new Point(x1, y1));
                    y1++;
                }
            } else {
                while (y1 == y2) {
                    calculatedPath.add(new Point(x1, y1));
                    y1--;
                }
            }

        }

        return calculatedPath;
    }

Can anyone point out what i'm doing wrong? Thanks

like image 832
ht.luvit Avatar asked Dec 05 '25 03:12

ht.luvit


1 Answers

Try casting your ints into floats as well

During your caluclation you need to cast at least one element to float:

float ratio = ((float)(y2 - y1) / (float)(x2 - x1));

That is because:

float a = integer / integer
          ^^^^^^^^^^^^^^^^^ - The result will be an integer.
                              Therefore u need to cast at least one of the
                              to float

This examples shows it easly:

public static void main(String[] args)
{
    float resultWithoutCast = 5 / 3;
    float resultWithCast = (float)5 /3 ;

    System.out.println(resultWithoutCast);
    System.out.println(resultWithCast);
}

It will print

  • 1.0
  • 1.6666666
like image 58
d0x Avatar answered Dec 06 '25 17:12

d0x