В процессе. Подготовка 2

This commit is contained in:
sasha80
2023-11-27 09:45:58 +03:00
parent a7da2b1aee
commit 3686def91d

View File

@@ -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