Change mag to length
This commit is contained in:
@@ -44,7 +44,7 @@ ball = {
|
|||||||
for b in all(balls) do
|
for b in all(balls) do
|
||||||
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
|
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
|
||||||
local diff = self.pos - b.pos
|
local diff = self.pos - b.pos
|
||||||
if ((diff):mag() < self.rad + b.rad) then
|
if (diff:length() < self.rad + b.rad) then
|
||||||
collisions[self] = collisions[self] or {}
|
collisions[self] = collisions[self] or {}
|
||||||
collisions[self][b] = diff
|
collisions[self][b] = diff
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ function handle_collisions()
|
|||||||
rewind = 0.1 * steps
|
rewind = 0.1 * steps
|
||||||
s_xpoint = source.pos - source.vel * rewind
|
s_xpoint = source.pos - source.vel * rewind
|
||||||
t_xpoint = target.pos - target.vel * rewind
|
t_xpoint = target.pos - target.vel * rewind
|
||||||
until rewind > 1 or (s_xpoint - t_xpoint):mag() >= source.rad + target.rad
|
until rewind > 1 or (s_xpoint - t_xpoint):length() >= source.rad + target.rad
|
||||||
local s_newvel = collision_vel(s_xpoint, source.vel, t_xpoint, target.vel, source:mass(), target:mass())
|
local s_newvel = collision_vel(s_xpoint, source.vel, t_xpoint, target.vel, source:mass(), target:mass())
|
||||||
local t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
|
local t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
|
||||||
source.pos = s_xpoint + source.vel * rewind
|
source.pos = s_xpoint + source.vel * rewind
|
||||||
@@ -65,5 +65,5 @@ function collision_vel(x1,v1,x2,v2,m1,m2)
|
|||||||
m2 = m2 or 1
|
m2 = m2 or 1
|
||||||
local x_diff = x1 - x2
|
local x_diff = x1 - x2
|
||||||
local v_diff = v1 - v2
|
local v_diff = v1 - v2
|
||||||
return v1 - x_diff * (2 * m2 / (m1 + m2)) * v_diff:dot(x_diff) / x_diff:mag()^2
|
return v1 - x_diff * (2 * m2 / (m1 + m2)) * v_diff:dot(x_diff) / x_diff:length()^2
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,11 @@ vec2 = {
|
|||||||
x = 0,
|
x = 0,
|
||||||
y = 0,
|
y = 0,
|
||||||
|
|
||||||
mag = function(self)
|
angle = function(self)
|
||||||
|
return atan2(y, x);
|
||||||
|
end,
|
||||||
|
|
||||||
|
length = function(self)
|
||||||
return sqrt(self.x^2+self.y^2)
|
return sqrt(self.x^2+self.y^2)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@@ -14,8 +18,8 @@ vec2 = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
normal = function(self)
|
normal = function(self)
|
||||||
local mag = self:mag()
|
local length = self:length()
|
||||||
return vec2:new(self.x/mag, self.y/mag)
|
return vec2:new(self.x/length, self.y/length)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
bounce = function(self, n)
|
bounce = function(self, n)
|
||||||
@@ -55,19 +59,13 @@ end
|
|||||||
function vec2:print_debug(v)
|
function vec2:print_debug(v)
|
||||||
local v = v or vec2:new(0,1)
|
local v = v or vec2:new(0,1)
|
||||||
print("vec: "..vec2.__tostring(self))
|
print("vec: "..vec2.__tostring(self))
|
||||||
print("mag: "..self:mag())
|
print("length: "..self:length())
|
||||||
print("dot: "..self:dot(v))
|
print("dot: "..self:dot(v))
|
||||||
print("normal: "..vec2.__tostring(self:normal()))
|
print("normal: "..vec2.__tostring(self:normal()))
|
||||||
print("bounce: "..vec2.__tostring(self:bounce(v)))
|
print("bounce: "..vec2.__tostring(self:bounce(v)))
|
||||||
print("inv: "..vec2.__tostring(-self))
|
print("inv: "..vec2.__tostring(-self))
|
||||||
end
|
end
|
||||||
|
|
||||||
local v = vec2:new(1,1)
|
|
||||||
local s = 3
|
|
||||||
print(v * s)
|
|
||||||
print(s * v)
|
|
||||||
assert(false, "If two lines above are identical, mul operands are now interchangeable!")
|
|
||||||
|
|
||||||
-->8
|
-->8
|
||||||
ball = {
|
ball = {
|
||||||
__count = 0,
|
__count = 0,
|
||||||
@@ -115,7 +113,7 @@ ball = {
|
|||||||
for b in all(balls) do
|
for b in all(balls) do
|
||||||
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
|
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
|
||||||
local diff = self.pos - b.pos
|
local diff = self.pos - b.pos
|
||||||
if ((diff):mag() < self.rad + b.rad) then
|
if (diff:length() < self.rad + b.rad) then
|
||||||
collisions[self] = collisions[self] or {}
|
collisions[self] = collisions[self] or {}
|
||||||
collisions[self][b] = diff
|
collisions[self][b] = diff
|
||||||
end
|
end
|
||||||
@@ -187,7 +185,7 @@ function handle_collisions()
|
|||||||
rewind = 0.1 * steps
|
rewind = 0.1 * steps
|
||||||
s_xpoint = source.pos - source.vel * rewind
|
s_xpoint = source.pos - source.vel * rewind
|
||||||
t_xpoint = target.pos - target.vel * rewind
|
t_xpoint = target.pos - target.vel * rewind
|
||||||
until rewind > 1 or (s_xpoint - t_xpoint):mag() >= source.rad + target.rad
|
until rewind > 1 or (s_xpoint - t_xpoint):length() >= source.rad + target.rad
|
||||||
local s_newvel = collision_vel(s_xpoint, source.vel, t_xpoint, target.vel, source:mass(), target:mass())
|
local s_newvel = collision_vel(s_xpoint, source.vel, t_xpoint, target.vel, source:mass(), target:mass())
|
||||||
local t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
|
local t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
|
||||||
source.pos = s_xpoint + source.vel * rewind
|
source.pos = s_xpoint + source.vel * rewind
|
||||||
@@ -203,7 +201,7 @@ function collision_vel(x1,v1,x2,v2,m1,m2)
|
|||||||
m2 = m2 or 1
|
m2 = m2 or 1
|
||||||
local x_diff = x1 - x2
|
local x_diff = x1 - x2
|
||||||
local v_diff = v1 - v2
|
local v_diff = v1 - v2
|
||||||
return v1 - x_diff * (2 * m2 / (m1 + m2)) * v_diff:dot(x_diff) / x_diff:mag()^2
|
return v1 - x_diff * (2 * m2 / (m1 + m2)) * v_diff:dot(x_diff) / x_diff:length()^2
|
||||||
end
|
end
|
||||||
|
|
||||||
__gfx__
|
__gfx__
|
||||||
|
|||||||
@@ -2,7 +2,11 @@ vec2 = {
|
|||||||
x = 0,
|
x = 0,
|
||||||
y = 0,
|
y = 0,
|
||||||
|
|
||||||
mag = function(self)
|
angle = function(self)
|
||||||
|
return atan2(y, x);
|
||||||
|
end,
|
||||||
|
|
||||||
|
length = function(self)
|
||||||
return sqrt(self.x^2+self.y^2)
|
return sqrt(self.x^2+self.y^2)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@@ -11,8 +15,8 @@ vec2 = {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
normal = function(self)
|
normal = function(self)
|
||||||
local mag = self:mag()
|
local length = self:length()
|
||||||
return vec2:new(self.x/mag, self.y/mag)
|
return vec2:new(self.x/length, self.y/length)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
bounce = function(self, n)
|
bounce = function(self, n)
|
||||||
@@ -52,15 +56,9 @@ end
|
|||||||
function vec2:print_debug(v)
|
function vec2:print_debug(v)
|
||||||
local v = v or vec2:new(0,1)
|
local v = v or vec2:new(0,1)
|
||||||
print("vec: "..vec2.__tostring(self))
|
print("vec: "..vec2.__tostring(self))
|
||||||
print("mag: "..self:mag())
|
print("length: "..self:length())
|
||||||
print("dot: "..self:dot(v))
|
print("dot: "..self:dot(v))
|
||||||
print("normal: "..vec2.__tostring(self:normal()))
|
print("normal: "..vec2.__tostring(self:normal()))
|
||||||
print("bounce: "..vec2.__tostring(self:bounce(v)))
|
print("bounce: "..vec2.__tostring(self:bounce(v)))
|
||||||
print("inv: "..vec2.__tostring(-self))
|
print("inv: "..vec2.__tostring(-self))
|
||||||
end
|
end
|
||||||
|
|
||||||
local v = vec2:new(1,1)
|
|
||||||
local s = 3
|
|
||||||
print(v * s)
|
|
||||||
print(s * v)
|
|
||||||
assert(false, "If two lines above are identical, mul operands are now interchangeable!")
|
|
||||||
|
|||||||
Reference in New Issue
Block a user