2

2 つのポイント間のポイントのリストを返すメソッドを作成しています。どういうわけか、勾配 (y2-y1)/(x2-x1) は、startPoint と endPoint の位置に関係なく、常に 0.0 を与え続けます。メソッドは次のとおりです。

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;
    }

誰かが私が間違っていることを指摘できますか? ありがとう

4

3 に答える 3

5

int も float にキャストしてみてください

計算中に、少なくとも 1 つの要素を float にキャストする必要があります。

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

その理由は次のとおりです。

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

この例はそれを簡単に示しています:

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

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

印刷します

  • 1.0
  • 1.6666666
于 2013-08-11T10:37:56.667 に答える
3

除算中に int をキャストするのを忘れました。このようなことを試してください:-

float ratio = ((float)(y2 - y1) / (x2 - x1));
于 2013-08-11T10:39:07.547 に答える