libs/lua-math-polygon: spaces after commas, rm unneded parentheses, simplify rectangle convert function
Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>
This commit is contained in:
parent
07e14fa2f5
commit
68e2c63caf
|
@ -2,19 +2,19 @@ local M = {}
|
||||||
|
|
||||||
-- Source with pseudocode: https://de.wikipedia.org/wiki/Punkt-in-Polygon-Test_nach_Jordan
|
-- Source with pseudocode: https://de.wikipedia.org/wiki/Punkt-in-Polygon-Test_nach_Jordan
|
||||||
-- see also https://en.wikipedia.org/wiki/Point_in_polygon
|
-- see also https://en.wikipedia.org/wiki/Point_in_polygon
|
||||||
-- parameters: points A = (x_a,y_a), B = (x_b,y_b), C = (x_c,y_c)
|
-- parameters: points A = (x_a, y_a), B = (x_b, y_b), C = (x_c, y_c)
|
||||||
-- return value: −1 if the ray from A to the right bisects the edge [BC] (the lower vortex of [BC]
|
-- return value: −1 if the ray from A to the right bisects the edge [BC] (the lower vortex of [BC]
|
||||||
-- is not seen as part of [BC]);
|
-- is not seen as part of [BC]);
|
||||||
-- 0 if A is on [BC];
|
-- 0 if A is on [BC];
|
||||||
-- +1 else
|
-- +1 else
|
||||||
function M.cross_prod_test(x_a,y_a,x_b,y_b,x_c,y_c)
|
function M.cross_prod_test(x_a, y_a, x_b, y_b, x_c, y_c)
|
||||||
if y_a == y_b and y_b == y_c then
|
if y_a == y_b and y_b == y_c then
|
||||||
if (x_b <= x_a and x_a <= x_c) or (x_c <= x_a and x_a <= x_b) then
|
if (x_b <= x_a and x_a <= x_c) or (x_c <= x_a and x_a <= x_b) then
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
if not ((y_a == y_b) and (x_a == x_b)) then
|
if not (y_a == y_b and x_a == x_b) then
|
||||||
if y_b > y_c then
|
if y_b > y_c then
|
||||||
-- swap b and c
|
-- swap b and c
|
||||||
local h = x_b
|
local h = x_b
|
||||||
|
@ -24,7 +24,7 @@ function M.cross_prod_test(x_a,y_a,x_b,y_b,x_c,y_c)
|
||||||
y_b = y_c
|
y_b = y_c
|
||||||
y_c = h
|
y_c = h
|
||||||
end
|
end
|
||||||
if (y_a <= y_b) or (y_a > y_c) then
|
if y_a <= y_b or y_a > y_c then
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
local delta = (x_b-x_a) * (y_c-y_a) - (y_b-y_a) * (x_c-x_a)
|
local delta = (x_b-x_a) * (y_c-y_a) - (y_b-y_a) * (x_c-x_a)
|
||||||
|
@ -46,7 +46,7 @@ end
|
||||||
-- 0 if Q on an edge of P
|
-- 0 if Q on an edge of P
|
||||||
function M.point_in_polygon(poly, point)
|
function M.point_in_polygon(poly, point)
|
||||||
local t = -1
|
local t = -1
|
||||||
for i=1,#poly-1 do
|
for i=1, #poly-1 do
|
||||||
t = t * M.cross_prod_test(point.lon,point.lat,poly[i].lon,poly[i].lat,poly[i+1].lon,poly[i+1].lat)
|
t = t * M.cross_prod_test(point.lon,point.lat,poly[i].lon,poly[i].lat,poly[i+1].lon,poly[i+1].lat)
|
||||||
if t == 0 then break end
|
if t == 0 then break end
|
||||||
end
|
end
|
||||||
|
@ -55,16 +55,12 @@ end
|
||||||
|
|
||||||
-- Convert rectangle defined by two point into polygon
|
-- Convert rectangle defined by two point into polygon
|
||||||
function M.two_point_rec_to_poly(rec)
|
function M.two_point_rec_to_poly(rec)
|
||||||
local poly = {};
|
return {
|
||||||
poly[1]["lon"] = rec[1].lon
|
rec[1],
|
||||||
poly[1]["lat"] = rec[1].lat
|
{ lon = rec[2].lon, lat = rec[1].lat },
|
||||||
poly[2]["lon"] = rec[2].lon
|
rec[2],
|
||||||
poly[2]["lat"] = rec[1].lat
|
{ lon = rec[1].lon, lat = rec[2].lat },
|
||||||
poly[3]["lon"] = rec[2].lon
|
}
|
||||||
poly[3]["lat"] = rec[2].lat
|
|
||||||
poly[4]["lon"] = rec[1].lon
|
|
||||||
poly[4]["lat"] = rec[2].lat
|
|
||||||
return poly
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
Loading…
Reference in New Issue