我有一个for循环,并且该整数x将从533增加到813。这意味着280递增。在同一循环中,当发生上述情况时,我想将y的值从300减少到200。这意味着x为533时y必须为300,而x为813时y必须为200。我知道这可以通过在每次迭代中将y的值减小100/280来实现。但是两者都是整数。

这是我使用的一些代码示例,但无法正常工作。:

for(int i = 0; i < b.getSize(); i++) {
            x = b.getCar(i).getPosX();
            b.getCar(i).setPosX(++x);
            if(x >= ((getWidth() / 2) - 140) && x < ((getWidth() / 2) + 140)){
                y = b.getCar(i).getPosY();
                y = (double)(y - (10.0f / 28.0f));
                b.getCar(i).setPosY((int)y);
            }
        }

我该怎么做。谢谢!

最佳答案

有两种解决方案,一种简单,一种复杂。简单的一个:

y = yoff + (int)( (double) height * x / width )

其中yoff = 300, height = -100, width = 813-533。基本上,您执行浮点运算,然后对结果进行四舍五入。

另外,也可以使用Bresenham line algorithm使用纯整数数学来完成此操作,但这会花费更多代码。

09-03 19:38