光影切割问题
2012-10-01 21:06
477 查看
“光影切割问题”是游戏场景中经常出现的,例如一些房屋场景里面,在里面上会因为阳光从屋顶的漏洞或窗口照射进来而形成许多光照区域和阴影区域。
下面是一个在平面中的直线分割示意图,右图
两条直线有一个交点——空间分成4部分
三条直接有三个交点——空间分成7部分
没增加一条直线,则跟前面的n-1条直接有n-1个交点,新增加n块新区域
推出:如果总共有N条直线,M个交点,那么区域的数目为N+M+1
然而,这样的问题往往是要快速计算某个时刻,在坐标中的区域被光影划分成多少块。如何设计算法?
我们可以换一种思路,如图,三条直线,跟Y坐标的交线,从上往下为(a,b,c),而右边界上的交点的顺序为(c,b,a),可以看到,顺序被反过来了,由于是有了交点才被反过来的,没有交点的话顺序就是不会反过来的。这样可以得出:区域内的交点数目就等于一个边界上交点顺序相对于另一个边界交单顺序的逆序总数。例如右图中a=1,b=2,c=3,那么(c,b,a)=(3,2,1),它的逆序数为3
因此,问题就转化成为求一个N个元素的数组的逆序数
下面是一个在平面中的直线分割示意图,右图
两条直线有一个交点——空间分成4部分
三条直接有三个交点——空间分成7部分
没增加一条直线,则跟前面的n-1条直接有n-1个交点,新增加n块新区域
推出:如果总共有N条直线,M个交点,那么区域的数目为N+M+1
然而,这样的问题往往是要快速计算某个时刻,在坐标中的区域被光影划分成多少块。如何设计算法?
我们可以换一种思路,如图,三条直线,跟Y坐标的交线,从上往下为(a,b,c),而右边界上的交点的顺序为(c,b,a),可以看到,顺序被反过来了,由于是有了交点才被反过来的,没有交点的话顺序就是不会反过来的。这样可以得出:区域内的交点数目就等于一个边界上交点顺序相对于另一个边界交单顺序的逆序总数。例如右图中a=1,b=2,c=3,那么(c,b,a)=(3,2,1),它的逆序数为3
因此,问题就转化成为求一个N个元素的数组的逆序数
相关文章推荐
- 光影切割问题
- 《编程之美》读书随笔之七:光影切割问题
- 第1章 游戏之乐——光影切割问题
- 小飞的电梯调度算法,光影切割问题<<编程之美>>
- 编程之美--游戏之乐--1.7光影切割问题
- 编程之美笔记——光影切割问题
- 光影切割问题-求逆序对@编程之美
- 编程之美 set 13 光影切割问题
- 光影切割问题之求解逆序数
- 编程之美 1.7 光影切割问题
- 编程之美 - 光影切割问题
- 《编程之美》1.7 光影切割问题
- 求逆序数(光影切割问题)
- 读书笔记之编程之美 - 1.7 光影切割问题
- 由《编程之美》光影切割问题引出的-----求数组逆序数
- 编程之美1.7 光影切割问题
- 光影切割问题
- 编程之美:第一章 1.7光影切割问题
- 算法导论读书笔记之钢条切割问题
- 关于直线,折线切割平面的问题