Android游戏开发菜鸟之路(二)

《Pro Android Games》的第二个案例,总体来说还是比较好理解的,其游戏的逻辑与SpaceBlaster基本相似,有趣的是在构建多边形的算法上——坐标的旋转、平移、判断点是否在多边形内部。这次也就重点说说这些算法(其实感觉这些算法也很好理解的,汗,其实没什么可以说的。。。),在这之前首先将相关的三个类的UML图给出:


想想,这两个算法真的没什么好说的,坐标的旋转是高中知识,画画图也能解出;至于判断点是否在多边形(包括凹多边形)内部,则是利用射线法(网上copy的):

注意到如果从P作水平向左(或者右)的射线的话,如果P在多边形内部,那么这条射线与多边形的交点必为奇数,如果P在多边形外部,则交点个数必为偶数(0也在内)。所以,我们可以顺序考虑多边形的每条边,求出交点的总个数。还有一些特殊情况要考虑。假如考虑边(P1,P2),

1)如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2中较小的纵坐标相同,则直接忽略这种情况

2)如果线段水平,则射线要么与其无交点,要么有无数个,这种情况也直接忽略

3)再判断相交之前,先判断P是否在边(P1,P2)的上面(叉积),如果在,则直接得出结论:P再多边形内部。

接下来的一周应该是先研究一下JNI和NDK!

PS:测试代码在这里~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值