编程中常用的公式或者方法
2018-03-28 02:22
这里只是记录一些可能会常用到的检测方法和常用的计算公式,以避免重复编写。
这些函数lua可以直接使用
这里是一些简单的碰撞方法
1 2 3 4 5 6 7 8 9 10 11
| function hitQuad(x, y, lt, lb, rt, rb) local a = (lt.x - lb.x) * (y - lb.y) - (lt.y - lb.y) * (x - lb.x); local b = (rt.x - lt.x) * (y - lt.y) - (rt.y - lt.y) * (x - lt.x); local c = (rb.x - rt.x) * (y - rt.y) - (rb.y - rt.y) * (x - rt.x); local d = (lb.x - rb.x) * (y - rb.y) - (lb.y - rb.y) * (x - rb.x); if ((a > 0 and b > 0 and c > 0 and d > 0) or (a < 0 and b < 0 and c < 0 and d < 0)) then return true; end return false; end
|
1 2 3 4
| function testPoint(x0,y0,w0,h0,x1,y1) return x1 >= x0 and x1 <= x0 + w0 and y1>=y0 and y1 < y0 + h0 end
|
1 2 3 4
| function testRect(x0,y0,w0,h0,x1,y1,w1,h1) return x0<x1+w1 and y0<y1+h1 and x0+w0>x1 and y0+h0>y1 end
|
1 2 3 4
| function testCircle(x0,y0,r0,x1,y1,r1) return math.sqrt(math.pow(math.abs(x0-x1),2)+math.pow(math.abs(y0-y1),2)) < r0+r1 end
|
1 2 3 4
| function testCircle(x0,y0,x1,y1,r1) return math.sqrt(math.pow(math.abs(x0-x1),2)+math.pow(math.abs(y0-y1),2)) < r1 end
|
这个方法用于计算一个点(x,y)相对于原点(ox,oy)旋转了某个角度之后(r)的所在的坐标
1 2 3 4
| function rotate(ox,oy,x,y,r) r=math.rad(r) return (x - ox)*math.cos(r) - (y - oy)*math.sin(r) + ox,(x - ox)*math.sin(r) + (y - oy)*math.cos(r) + oy end
|