Change mag to length

This commit is contained in:
Quinn
2021-12-28 15:40:08 -08:00
parent 2949f0caec
commit 491d94d647
4 changed files with 26 additions and 30 deletions
+1 -1
View File
@@ -44,7 +44,7 @@ ball = {
for b in all(balls) do
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
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][b] = diff
end
+2 -2
View File
@@ -49,7 +49,7 @@ function handle_collisions()
rewind = 0.1 * steps
s_xpoint = source.pos - source.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 t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
source.pos = s_xpoint + source.vel * rewind
@@ -65,5 +65,5 @@ function collision_vel(x1,v1,x2,v2,m1,m2)
m2 = m2 or 1
local x_diff = x1 - x2
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
+11 -13
View File
@@ -5,7 +5,11 @@ vec2 = {
x = 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)
end,
@@ -14,8 +18,8 @@ vec2 = {
end,
normal = function(self)
local mag = self:mag()
return vec2:new(self.x/mag, self.y/mag)
local length = self:length()
return vec2:new(self.x/length, self.y/length)
end,
bounce = function(self, n)
@@ -55,19 +59,13 @@ end
function vec2:print_debug(v)
local v = v or vec2:new(0,1)
print("vec: "..vec2.__tostring(self))
print("mag: "..self:mag())
print("length: "..self:length())
print("dot: "..self:dot(v))
print("normal: "..vec2.__tostring(self:normal()))
print("bounce: "..vec2.__tostring(self:bounce(v)))
print("inv: "..vec2.__tostring(-self))
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
ball = {
__count = 0,
@@ -115,7 +113,7 @@ ball = {
for b in all(balls) do
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
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][b] = diff
end
@@ -187,7 +185,7 @@ function handle_collisions()
rewind = 0.1 * steps
s_xpoint = source.pos - source.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 t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
source.pos = s_xpoint + source.vel * rewind
@@ -203,7 +201,7 @@ function collision_vel(x1,v1,x2,v2,m1,m2)
m2 = m2 or 1
local x_diff = x1 - x2
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
__gfx__
+8 -10
View File
@@ -2,7 +2,11 @@ vec2 = {
x = 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)
end,
@@ -11,8 +15,8 @@ vec2 = {
end,
normal = function(self)
local mag = self:mag()
return vec2:new(self.x/mag, self.y/mag)
local length = self:length()
return vec2:new(self.x/length, self.y/length)
end,
bounce = function(self, n)
@@ -52,15 +56,9 @@ end
function vec2:print_debug(v)
local v = v or vec2:new(0,1)
print("vec: "..vec2.__tostring(self))
print("mag: "..self:mag())
print("length: "..self:length())
print("dot: "..self:dot(v))
print("normal: "..vec2.__tostring(self:normal()))
print("bounce: "..vec2.__tostring(self:bounce(v)))
print("inv: "..vec2.__tostring(-self))
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!")