denoyer_proj.lua
NAME
denoyer_proj
FUNCTION
denoyer_proj(lon, lat)
NOTES
Denoyer projection for map.
Based on the equations:
x = lon * cos((0.95 - lon/12 + lon^3/600) * lat)
y = lat
of Cartographic Projection Procedures by G.I. Evenden, September 24, 1995
lon and lat are expected to vary from -180 to 180 and from -90 to 90, respectively.
Resulted lon varies from -3.07 to 3.10 and lat from -1.37 to 1.46.
INPUTS
lon - number or zeArray object as longitude in degree
lat - number or zeArray object as latitude in degree
OUTPUTS
Modifies lon and lat if they are zeArray objects; otherwise returns lon and lat.
SOURCE
require("register")
function denoyer_proj(lon, lat)
local p1 = 0.95
local p2 = 12
local p3 = 600
if (type(lon) == "userdata") then
zeMath.deg2rad(lon)
zeMath.deg2rad(lat)
local v1, v2 = zeUtl.new("double", "double")
lon:copy(v1)
zeMath.abs(v1)
lon:copy(v2)
zeMath.abs(v2)
v1:div(-p2)
v1:add(p1)
v2:mul(lon)
v2:mul(lon)
v2:div(p3)
v2:add(v1)
v2:mul(lat)
zeMath.cos(v2)
lon:mul(v2)
else
lon = lon * 0.017453293
lat = lat * 0.017453293
lon = lon * math.cos((p1 - math.abs(lon) / p2 + math.cos(lon* lon * lon) / p3) * lat)
return lon, lat
end
end