[转]深度排序

[url]http://chengkehan.wordpress.com/2010/09/13/%E6%B7%B1%E5%BA%A6%E6%8E%92%E5%BA%8F/[/url]


对于深度排序,网上有很多的做法,按照y轴排序算法简单,但是受限制太多,还有很多复杂的算法,需要深入理解才能看明白。

最近,想到一种新的深度排序方法,使用的是向量,思路很简单,很容易理解,而且适用于几乎所有情况(只要不要自己给自己找麻烦)。


我们在地图编辑器中,设置建筑、障碍物的时候,都会规划出建筑或者障碍物占用地面的范围。这样我们就能找到占用范围的最左点和最右点。从左到右连接着两个点(这里要从左到右,如果反向的话,那么后面的正负也会调换)。

[img]http://dl.iteye.com/upload/attachment/415361/d6d33d5d-ef1e-3efd-aeba-adc8f3c3bd37.jpg[/img]


由此就形成一个向量。我观察到一个现象,所有在这条线后面的对象都会被这个建筑挡住,而所有在这条线前面的对象都会遮挡住建筑。

[img]http://dl.iteye.com/upload/attachment/415362/0b6b07a4-0482-3b41-8eec-b96318b2f94a.jpg[/img]


那么我们怎判断这个点在这条线的前面呢,这里就要使用向量了。


[img]http://dl.iteye.com/upload/attachment/415365/67547e81-727d-3002-9896-d399d71ed3d2.jpg[/img]

下面开始计算向量B、C的和。


[img]http://dl.iteye.com/upload/attachment/415367/da3cb483-9faf-32de-ae56-0d372a592132.jpg[/img]


那么我们就可以通过向量的点乘来算出向量A和向量B+C的夹角,B+C在A的顺时针方向,所以应该是正的(具体的值不用关心)。

运用同样的方法可以算出来在这条线后面的对象,夹角都是负数。

这样我们就可以根据正负来判断遮挡关系了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值