mirror of
https://github.com/kepler155c/opus
synced 2025-01-31 09:34:45 +00:00
GPS ambiguous position fix
This commit is contained in:
parent
b3efbc7438
commit
c1430f6dac
@ -1,3 +1,5 @@
|
|||||||
|
local Util = require('opus.util')
|
||||||
|
|
||||||
local GPS = { }
|
local GPS = { }
|
||||||
|
|
||||||
local device = _G.device
|
local device = _G.device
|
||||||
@ -89,19 +91,17 @@ end
|
|||||||
-- end stock gps api
|
-- end stock gps api
|
||||||
|
|
||||||
function GPS.trilaterate(tFixes)
|
function GPS.trilaterate(tFixes)
|
||||||
local pos1, pos2 = trilaterate(tFixes[1], tFixes[2], tFixes[3])
|
local attemps = 0
|
||||||
|
for tFixes in Util.permutation(tFixes) do
|
||||||
|
attemps = attemps + 1
|
||||||
|
local pos1, pos2 = trilaterate(tFixes[4], tFixes[3], tFixes[2])
|
||||||
if pos2 then
|
if pos2 then
|
||||||
pos1, pos2 = narrow(pos1, pos2, tFixes[4])
|
pos1, pos2 = narrow(pos1, pos2, tFixes[1])
|
||||||
|
end
|
||||||
|
if not pos2 then
|
||||||
|
return pos1, attemps
|
||||||
end
|
end
|
||||||
|
|
||||||
if pos1 and pos2 then
|
|
||||||
print("Ambiguous position")
|
|
||||||
print("Could be "..pos1.x..","..pos1.y..","..pos1.z.." or "..pos2.x..","..pos2.y..","..pos2.z )
|
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return pos1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return GPS
|
return GPS
|
@ -799,4 +799,25 @@ function Util.getOptions(options, args, ignoreInvalid)
|
|||||||
return true, Util.size(rawOptions)
|
return true, Util.size(rawOptions)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- https://www.lua.org/pil/9.3.html
|
||||||
|
function Util.permutation(tbl)
|
||||||
|
local function permgen(a, n)
|
||||||
|
if n == 0 then
|
||||||
|
coroutine.yield(a)
|
||||||
|
else
|
||||||
|
for i=1,n do
|
||||||
|
a[n], a[i] = a[i], a[n]
|
||||||
|
permgen(a, n - 1)
|
||||||
|
a[n], a[i] = a[i], a[n]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local co = coroutine.create(function() permgen(tbl, #tbl) end)
|
||||||
|
return function()
|
||||||
|
local _, res = coroutine.resume(co)
|
||||||
|
return res
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return Util
|
return Util
|
||||||
|
Loading…
Reference in New Issue
Block a user