|
窗口裁减计算
1. 基于EGui窗口位置判断的基础上,做了窗口裁减的算法。到目前为止我还是认为这个算法非常好。
窗口A和窗口B,C,D,E,F,G位置关系如图所示,深蓝色部分为相交部分。
那么怎么计算它们是否相交呢?,相交的后矩形坐标是是什么呢?
这是窗口移动时要考虑的问题。
2.
这里介绍EGui的实现方法:
首先再分辨率为1024x768的屏幕上,
EGui的每个窗口都有 char width_in[1024],char height_in[768]
其中窗口所占的空间设置为1,其他地方设置为0。
拿 起始点20,30 ,终点400,200.的窗口坐标为例:
memset(width_in,0,1024);
memset(height_in,0,76;
/* set erea that is inside as 1 */
memset(width_in + 20,1,400 - 20);
memset(height_in + 30,1,200 - 30);
3. 相交计算
看代码:
[code:1]
int x1,x2;
int i;
x1 = x2 = 0;
/* find x1 */
for (i = 0; i< 1024 ;i ++)
{
if (a_width_in[i] && b_width_in[i])
{
x1 = i;
break;
}
}
/* no intersection */
if (x1 == 1024)
return NULL;
/* find x2 */
for (i = x1; i< 1024; i++)
{
if (!(a_width_in[i] && b_width_in[i]))
{
x2 = i;
break;
}
}
[/code:1]
4.对代码的解释
上述代码,计算了横坐标,纵坐标计算方法也一样。
如果此代码没有返回NULL,就证明相交后横坐标为x1,x2 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|