DrawAxis(pels :integer, val : Extended)
beginend;
有这样一个函数,画一条轴,并在上面描点,ples为轴的象素值,val是这段象素值表示的数值大小。
比如:pels := 1000; 
      val  := 76.53;那么就应该这样画
|-----|-----|-----|----
0     20    40    60   76.3 每一段表示多少数值(SubVal)应根据val算,我已算好,这里SubVal=20; 
问题是每一断的象素值(SubPels)应该是多少呢,若是用 SubPels := Round(SubVal / Val * Pels),而象素值必须是一个整数,平均每一断就会差0点几个象素,我是从0开始依次向后描点(i * SubPels),段数一多,这样到最后就会差好几个象素。该怎样解决呢.

解决方案 »

  1.   

    关注。我也遇见过这种情况,这是一个delphi很讨厌的地方。
    要么放大一定的倍数,绘制成TMetaFile,再把TMetaFile缩放回正常比例,不过太麻烦了。看其他各位有何高招
      

  2.   

    不能少,pels,val都已给定,并切,为了直观,SubVal 不能为17.54这样的小数吧,子能为1,2,5,10,20,50,100..这样的数,这个已经算好了。
      

  3.   

    你的subpels用浮点数,乘以段数以后再取整
    比如subpels为17.34,那相应段长度为
    1        17(17.34)
    2        35(34.68)
    3        52(52.02) 
      

  4.   

    不能先计算SubPels := Round(SubVal / Val * Pels),然后再(i * SubPels),当i数值大了之后已开始的舍入误差就会大到不可忽略的地步。要这样使用:对第i个点,坐标为:Round(i * SubVal * Pels / Val),这样才能保证误差在一个像素内。
      

  5.   

    补充:dyf2001(西风) 的方法在本质上和我的方法是一样的。