【译】碰撞检测之分离轴定理算法讲解

本文翻译自@sevenson的文章Separating Axis Theorem (SAT) Explanation 。原文作者用的是ActionScript 3来编写算法,不过文中主要讲述的还是算法原理,我想一旦算法原理被我们掌握了,选择什么编程语言来实现算法都是次要的事情了。
本人并非英文专业,所以文中翻译得有不妥或疏漏之处,欢迎各位指正,谢谢!


正文如下:

多边形碰撞

分离轴定理(英文简称SAT)是一项用于检测凸多边形碰撞的技术。

我绝不是这个方面的专家,但当检测碰撞的需求出现在我面前之后,我做了大量的阅读并最终在ActionScript 3中实现了它。

我想,我应该把我所学到的分享给大家,希望大家不会在这方面被坑得很惨:)

阅读全文 →

分享到 评论

圣诞新作Flying Stone发布

游戏简介

Flying Stone是一款益智类物理游戏。游戏中,玩家通过轻敲屏幕,抛出系在旋转杆上的石头来攻击飞出的小鸟,以此得分。不同难度的小鸟,击中后得分也有所不同。游戏限时90秒,游戏结束后会上传你的得分,并得到你的全世界排行。

本游戏目前支持Android版和在线版。

Flying Stone

如何开始

访问游戏主页,你可以在其中找到所需的版本:

http://wyh.wjjsoft.com/pages/flying_stone/

阅读全文 →

分享到 评论

挑战速度,2小时完成HTML5拼图小游戏

初学lufylegend.js之日,我用lufylegend.js开发了第一个HTML5小游戏——拼图游戏,还写了篇博文来炫耀一下:HTML5小游戏《智力大拼图》发布,挑战你的思维风暴。不过当时初学游戏开发,经验浅薄,所以没有好好专研游戏里的算法和代码的缺陷,导致游戏出现了很多bug,甚至拼图打乱后很可能无法复原。最近经常有朋友问起这个游戏,希望我能把代码里的bug改一下方便初学者学习,顺便我也打算测试一下自己写这种小游戏的速度,所以就抽出了一些时间将这个游戏从头到尾重新写了一遍,计算了一下用时,从准备、修改素材到最后完成游戏,一共用了大约2h的时间。

以下是游戏地址:

http://yuehaowang.github.io/games/puzzle/

这是我的游戏记录,欢迎各位挑战:

我的纪录

接下来就来讲讲如何开发完成这款游戏的。(按“编年体”)

阅读全文 →

分享到 评论

算法研究:利用Python解决数学计数原理问题

最近数学修行到“计数原理”部分,前几天做作业时遇到这样一道数学题:

用四种不同颜色给三棱柱六个顶点涂色,要求每个点涂一种颜色,且每条棱的两个端点涂不同颜色,则不同的涂色方法有多少种?
题目配图

当我看完题目后,顿时不知所措。于是我拿起草稿纸在一旁漫无目的地演算了一下,企图能找到解决方法。结果一无所获。今天终于等到放假了,于是打算通过程序算法解决这个问题。经过2个多小时的研究,终于完成了代码,并求得了答案。

由于Python写起来比较方便而且本人比较喜欢Python的语法,所以研究算法时我通常采用Python,此次也不例外。以下就是整个算法的实现过程。

阅读全文 →

分享到 评论

证明:sin'x = cosx

初三将近毕业的时候老爸给我买了几本数学相关的书籍。还把他的大学教材翻出来给我看,希望我去提前学习高等数学。很遗憾,当时的我对于这些东西完全不感兴趣,所以就不屑一顾,往书架上一扔就是两年。不久前,自己在数学教科书上看到了积分。书中运用积分的知识求得了一个曲边形的面积。当时我就傻眼了,什么!数学居然可以这么神奇。我这才意识到自己的无知,并且激起了我强烈的研究数学的欲望。这段时间里,我相继学习了导数和定积分,越发觉得数学的高深,决定提前学习大学里的高等数学。

大学课程中,第一个难题就是极限。有了它,才有导数、积分……

经过一个半月的课余时间学习,我大致地掌握了极限的一些知识。于是我决定使用它来解决一个我在导数学习过程中的一个问题:证明sin’x = cosx。

以下是我经过研究,得出的证明过程。

证明过程

首先根据导数定义,我们得到以下几个式子:

证明过程 之一

阅读全文 →

分享到 评论

Web App:波的叠加演示

最近物理学到波的叠加了。什么是波的叠加呢?简而言之,就是两个波传递到相同质点时,对该质点产生的共同作用。
课堂上,物理老师使用flash动画为我们演示了正弦波的叠加方式。不过由于演示程序的用户体验不佳、学校电脑较难操作、老师使用不当等种种原因,为了播放这个动画,老师可费了不少功夫。由于我本来就对这部分内容比较感兴趣,所以抽空研究了一下,用HTML5 + JavaScript制作了一个Web App,用于演示波的叠加。截图如下:

波的叠加演示 截图之一

阅读全文 →

分享到 评论

JavaScript计算圆周率(解析几何+定积分)

最近数学预习到选修本的定积分,前一向用它解决了物理上的正弦交流电有效值问题,前几天突发奇想,想用它来计算圆周率。于是我花了半节物理课的时间研究了一下,得出了以下求解方法。

首先我们知道半径为r,圆心为(0, 0)的圆的方程是:

圆的方程

不过这个是个方程,无法使用积分求解,所以我们要对它进行变形,变成一个函数。根据本人多年刷题经验,要把其变为函数,只需取一个半圆即可,获取半圆则需将其变形为:

半圆的方程

阅读全文 →

分享到 评论