均匀间隔的刻度标记

时间:2011-12-20 22:23:18

标签: java graphics graph modulo

我必须以10%的间隔绘制刻度标记,从零开始并且达到图形对象宽度的100%。

我会做类似的事情:

int width = 556;
int k = width/10;
for(int i = 0;i<width;i++){
    if(i%k==0){
        draw marker on gui indicating a ten percent increment (10,20,etc. up to 100%)
    }
}

正如您所看到的,问题是100%将在索引550处标记,这是实际结束之前的6个索引。这当然是不可接受的。

当然,宽度的实际数值是一个会改变的变量。

任何人都可以告诉我如何更改上面的代码,使其均匀地分隔标记,并将100%标记放在最后吗?

如果我只是删除第十个标记并手动将标记放置在100%,则标记之间的间距将不均匀。必须有一个更好的方法,所以我希望有人可以告诉我。

2 个答案:

答案 0 :(得分:3)

对小数位使用双精度数。 不要经历所有的mod操作。做一个10次迭代的简单循环,每个标记一次:

    int width = 556;
    double dist = ((double)width)/9.0;
    double k = 0;
    for(int i = 0; i < 10; i++){
        // Draw marker at (int)k
        k += dist;
    }

答案 1 :(得分:1)

感谢所有提出建议的人。我最终使用的解决方案是我自己想出的,它是控制矩形的尺寸,使宽度和高度是刻度线间距的整数倍。那样的话,我不需要在周围洗牌。相反,我有矩形周围的缓冲区空间占用框架每次调整大小时的剩余部分。由于矩形尺寸本身始终是刻度线间距的整数倍,因此刻度线的奇怪间距不再存在任何问题。

再次感谢大家。我只是为每个试图帮助的人增加了+1分。