计算位置和范围

                                                                   计算位置和范围,百分比等

在很多图形程序中都会见到位置和范围的计算(参考计算机图形学 opengl 第三版,清华大学出版社)

举个例子,要把sin(x)在(0-2pi)的曲线图像画到一个窗口中 (大小为winsize),坐标为笛卡尔坐标-xy (0,0)在窗口左下角

 

计算方式:

             x = x;

             y=sin(x);

x的范围是:(0,2pi),y的范围是(-1,1)

接着进行缩放到窗口中:

xPos = winsize.width * (x/2pi);

yPos = winsize.height * ((y+1) / 2) ;

 

很简单的例子,但是说明了如何缩放到指定范围的通用方式: (注意,当我讲长度时是指最大值和最小值的长度 距离)

 位置 = 窗口范围长度最大值 * 百分比 + 平移  (其中百分比的计算方式是: (变量当前值 - 变量最小值)/(变量的范围长度)

不要小看这个公式,在很多问题中都可以用到。

 

再看个例子,现在要求将 y=sin(x)的图像画到 窗口 偏离屏幕左边 1/3*winsize.width~winsize.width,

偏离窗口下边 1/3*winsize.height ~ winsize.height的位置,那么又该如何计算呢?

步骤多了一步,但是思想是一样的,计算方式如下:(将这种情况转化到上述的情况)

此时 x~(0,2*pi)

        y~(-1,1)

要绘制的范围: 1/3*winsize.width~winsize.width , 1/3*winsize.height ~ winsize.height

xPos = 2/3* winsize.width * (x/2pi) + 1/3 * winsize.width

yPos = 2/3*winsize.height*((y+1)/2)  + 1/3 * winsize.height;

yPos进行了一些调整,首先让它局限在 (2/3*winsize.height范围内,然后偏移 1/3 *winsize.height的位置。

 

再看看下一个例子吧,刚刚的x坐标是从0开始的,到2pi,y的值域又恰好处于(-1,1)之间,应该比较容易理解。

现在x的范围不再是0-2pi了,y的值域也不再是 (-1,1)了。

x的范围是 (1/6pi,1/2pi), y的范围是(0.5,1),要求画到窗口 (1/3winsize.width~winsize.width),(1/3winsize.height ~ winsize.height)区域

这样的话仍然按照前面的公式就是:

xPos = 2/3 * winsize.width * ((x - 1/6pi) / (1/2pi-1/6pi))  + 1/3 winsize.width;

yPos = 2/3 * winsize.height * ((y-0.5)/2) + 1/3 winsize.height

(公式还是能用的吧~)

没有晕吧,呵呵;

 

接着,再举个例子: 假设现在 窗口坐标的原点不是左下角,而是屏幕中心点; x向右递增,y向上递增;

x的范围是 (1/6pi,1/2pi), y的范围是(0.5,1),要求画到窗口 (-1/3winsize.width~winsize.width/2),(-1/3winsize.height ~ winsize.height/2.0)区域

那么还是利用之前的公式:

xPos = (1/2+1/3) * winsize.width * ((x - 1/6pi) / (1/2pi-1/6pi))  - 1/3 winsize.width;

yPos = (1/2+1/3) * winsize.height * ((y-0.5)/2) - 1/3 winsize.height

 

这样子,够清楚了吧。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值