我必须以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%,则标记之间的间距将不均匀。必须有一个更好的方法,所以我希望有人可以告诉我。
答案 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分。