编程中常用的公式或者方法

2018-03-28 02:22

 这里只是记录一些可能会常用到的检测方法和常用的计算公式,以避免重复编写。
 这些函数lua可以直接使用

这里是一些简单的碰撞方法

1
2
3
4
5
6
7
8
9
10
11
-- 点与四边形碰撞
function hitQuad(x, y, lt--[[ {x,y} --]], lb--[[ {x,y} --]], rt--[[ {x,y} --]], rb--[[ {x,y} --]])
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

标签: lua,

Creative Commons ©fox 2017 - 2018 | Theme based on fzheng.me &