编程之美1.7 光影切割问题

问题描述:
     不少人很爱玩游戏,例如 CS ⑨。 游戏设计也成为程序开发的热点之一,我们假设要设计破旧仓库之类的场景作为战争游戏的背景。仓库的地面会因为阳光从屋顶的漏洞或者窗口照射进来而形成许多光照区域和阴影区域。为了简单起见,假设不同区域的边界都是直线 ⑩, 我们把这些直线都叫做“光影线”,并且不存在三条光影线相交于一点的情况。
     那么,如果我们需要快速计算某个时刻,在 X 坐标[ A, B] 区间的地板上被光影划分成多少块。如何才能写出算法来计算呢?

     这个问题需要先自己归纳寻找规律。由于不存在三直线交于一点的情况,一些情况可以不用考虑。题目要求的是在A,B区间内,通过尝试可以找到规律。如果只有一条线,那么分割成两块空间。如果有两条线,可能相交,也可能不相交(只要在A到B这个区间内不相交就行)。如果相交,那么就分割成四块,否则是三块。以此类推就会发现,分割块数=线的数量+在这个区间内的交点数量+1。

     也就是说,只需要判断在这个区间内的交点有几个,经过这个区间的线有几条即可。我们可以先进行一次预处理,计算出所有交点的位置,然后在每一次查询时就可以很快查找到了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值