问个关于计算机图形学方面的简单的问题

时间:2022-07-02 22:42:46
将屏幕或是某个区域分成几等列并划线,请问如何计算每一条线的x值?

我现在的方法很简单,x=区域宽度/几等分,取整后乘第n条线。如将屏幕(800*600)四等分,则第一条线的x=取整(800/4)*1=200,第二条线的x=取整(800/4)*2=400


虽简单但不精确。如果区域宽度不能整除几等分(如上面的例子五等分时),算出来的值就不准确了,而且等分的越多越不准确。由于 x 值必须是整数,所以以现在的算法不能解决这个问题。

我对计算机图形学方面一窍不通,所以希望此项高手给预帮助,只需给出实现理论即可,多谢!!!

7 个解决方案

#1


如果楼主想绝对准确,好像是没有什么办法。

#2


如果区域宽度不能整除几等分(如上面的例子五等分时),算出来的值就不准确了
======
呵呵,五等分怎么不准确??

四舍五入下,各个区域相差不了多少。

#3


绝对准确当然是不可能,只是如何控制每一等分的宽度,使最终的等分的宽度之和刚好等于总宽度。


四舍五入当然不行,那样宽度之和就不等于总宽度了,而且如果分的多了误差会很大。


这个问题很普遍,比如图表,各轴线表示从某个数值范围,比如从0到1000,但实际上在屏幕上画可能只有500个像素的宽度,也就是说,用500个像素表示0到1000个数值,那么如果要在轴上标出比如 345 这个数值,应该在哪个像素画这个点?

#4


呵呵,也好解决,将误差放到最后一个区域里面就行了。
譬如800分7份,分别为:114+114+114+114+114+114+116=800就行了

#5


这样虽然总宽度符合条件,但是在比较小的区域内多等分,会因为这两三个像素的差别,使其看起来不等分。

我的想法是,将这些误差,尽量均分在等分块内,使有误差的等分,其误差值在一个像素以内,这样看起来就不会很明显了。我现在想知道的就是这样的算法。

#6


也好办,先取整,然后将余数分给各个区域
(int)800/7=114;(每个区域的尺寸)
int m= 800 - (114 * 7)=2;
将m分别分给区域1和2就行了。
int k=7;//等分数
int[] data=new int[7];//每个区域尺寸数组
int s=(int)(800 / k);//每个区域的基本尺寸
for(int i=0;i<k;i++)
{
    data[i]=s;
}
int m= 800 - (s * k);//剩余的增量
for(int i=0;i<m;i++)
{
    data[i]+=1;
}


//试试这个行不。没测试,随手写的

#7


Graphics.DrawLine (Pen, PointF, PointF)是支持浮点数据的

#1


如果楼主想绝对准确,好像是没有什么办法。

#2


如果区域宽度不能整除几等分(如上面的例子五等分时),算出来的值就不准确了
======
呵呵,五等分怎么不准确??

四舍五入下,各个区域相差不了多少。

#3


绝对准确当然是不可能,只是如何控制每一等分的宽度,使最终的等分的宽度之和刚好等于总宽度。


四舍五入当然不行,那样宽度之和就不等于总宽度了,而且如果分的多了误差会很大。


这个问题很普遍,比如图表,各轴线表示从某个数值范围,比如从0到1000,但实际上在屏幕上画可能只有500个像素的宽度,也就是说,用500个像素表示0到1000个数值,那么如果要在轴上标出比如 345 这个数值,应该在哪个像素画这个点?

#4


呵呵,也好解决,将误差放到最后一个区域里面就行了。
譬如800分7份,分别为:114+114+114+114+114+114+116=800就行了

#5


这样虽然总宽度符合条件,但是在比较小的区域内多等分,会因为这两三个像素的差别,使其看起来不等分。

我的想法是,将这些误差,尽量均分在等分块内,使有误差的等分,其误差值在一个像素以内,这样看起来就不会很明显了。我现在想知道的就是这样的算法。

#6


也好办,先取整,然后将余数分给各个区域
(int)800/7=114;(每个区域的尺寸)
int m= 800 - (114 * 7)=2;
将m分别分给区域1和2就行了。
int k=7;//等分数
int[] data=new int[7];//每个区域尺寸数组
int s=(int)(800 / k);//每个区域的基本尺寸
for(int i=0;i<k;i++)
{
    data[i]=s;
}
int m= 800 - (s * k);//剩余的增量
for(int i=0;i<m;i++)
{
    data[i]+=1;
}


//试试这个行不。没测试,随手写的

#7


Graphics.DrawLine (Pen, PointF, PointF)是支持浮点数据的