as点在三角型内的算法
写游戏基础的三角型类的时候涉及一个问题,一点是否在三角型内的算法,就是做碰撞/和求点到三角形的距离都用到的啦
有两个方法,
1.判断点与三角形另三个点中任意两点组成的三个小三角形的面积和是否等于大三角形面积,因为我都是做了四舍五入的求的高都是只精确到象素,有误差,又涉及到4个三角形的面积,误差变大,这样就影响精确性不够
2.计算要判断点与三角形任意两点组成的内角之和
如果等于360 ,就是在三角形里面。
但是用到数学函数,计算效率低,精确度大于前者
还有其他方法,如所求点是否和在三角形点在对边的一侧,但是这种方法我不知道怎么计算,关于向量的问题~
还有没有别的方法呢?
经过测试,觉得速度很关键,使用第一种,经过多次测试,找出一个比较合适的差值20 (这里所有都精确到一个象素,不存在浮点数) flash里面执行1000次480毫秒左右 平均.5毫秒左右
/**
* 判断当前对象与点的碰撞
* @形参 p:Point 要做碰撞的点
* #返回 Boolean
*/
public function hit(p:Point):Boolean {
var l1:Line= new Line(_Vertex[0], _Vertex[1])
var l2:Line= new Line(_Vertex[1], _Vertex[2])
var l3:Line= new Line(_Vertex[2], _Vertex[0])
var s1:Number=l1.getLongth()*l1.getDistanceS(p)/2
var s2:Number=l2.getLongth()*l2.getDistanceS(p)/2
var s3:Number=l3.getLongth()*l3.getDistanceS(p)/2
var l:Line=new Line(_Vertex[0], _Vertex[1])
var s:Number=l.getLongth()*l.getDistanceS(_Vertex[2])/2
// trace(s1+"+"+s2+"+"+s3+"="+s)
return s1+s2+s3-20<s
}
[文章热度:]
上一页:Flash游戏制作基础跟随鼠标的曲线
下一页:帮助学习理解AS2的小游戏