From 3686def91d3722ae54135c1217b42f22920760c6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 27 Nov 2023 09:45:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B5.=20=D0=9F=D0=BE=D0=B4=D0=B3=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/mercator.gd | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/scripts/mercator.gd b/scripts/mercator.gd index c429922..0eb300b 100644 --- a/scripts/mercator.gd +++ b/scripts/mercator.gd @@ -115,6 +115,18 @@ func rshift(val: int, n: int) -> int: return (val % 0x100000000) >> n func asinh(val: float): return log(val + sqrt(val * val + 1.0)) +func find_up_left(tiles: Array): + var x = 0 + var y = 0 + for tile in tiles: + if x < tile.x: x = tile.x + if y < tile.y: y = tile.y + for tile in tiles: + if tile.x == x and tile.y == y: + return tile + return null + + ## Lon./lat. to tile numbers func deg2num(lat_deg: float, lon_deg: float, zoom: int): var lat_rad: = radians(lat_deg) @@ -142,8 +154,8 @@ func dist_per_pixel(lat: float, zoom: int, size: int = 256) -> float: ## Расстояние по горизонтали в метрах, представленное одной плиткой -## [paramn lat] - Широта, градусы.[br] -## [paramn zoom] - Уровень детализации.[br] +## [param lat] - Широта, градусы.[br] +## [param zoom] - Уровень детализации.[br] func dist_per_tile(lat: float, zoom: int) -> float: return CE * cos(radians(lat)) / float(2 ** zoom) @@ -312,15 +324,15 @@ func neighbors(tile: Tile) -> Array: return tiles -## Возвращает все плитки вокруг заданной плитки +## Возвращает все плитки в радиусе [param r] вокруг заданной плитки [param tile] func get_allaround_tiles(tile: Tile, mr: int = 1) -> Array: var xys = {} var mi: int = 2 ** tile.z for r in mr: for a in range(0, 360, 180 / mi): var ra = radians(a) - var ix = int(roundf(r * cos(ra))) + tile.x - var iy = int(roundf(r * sin(ra))) + tile.y + var ix = roundi(r * cos(ra)) + tile.x + var iy = roundi(r * sin(ra)) + tile.y var t = Tile.new(ix, iy, tile.z) t.fix_xy() xys[[t.x, t.y]] = false