Example Code: Convert Position To Map Grid

From Bohemia Interactive Community
Revision as of 15:20, 5 February 2008 by Alef (talk | contribs) (→‎Solution)
Jump to navigation Jump to search

Problem

How to get map's grid from object's position? For example: how to get "Fe 26" from [10987.8, 15092.8, 0.0017395].

Solution

Simgle small grid has size of 200*200. Moreover position [0,0,0] is somewhere in the middle of second big grid on Y axis. Fraction parts of coordinates and Z axis are also useless. So at the begining we have to adjust our position.

_this = [floor ((_this select 0) / 200), floor (((_this select 1) + 520) / 200)]

The result is id of X and Y grids.

  • Getting X axis grid

Notice that for marking X grids engine uses letters from A to J (ten symbols). So to get string id from numeric id we can simply exchange 0 on A, 1 on B etc.

?_t == 0: _str = _str + "A"
?_t == 1: _str = _str + "B"
?_t == 2: _str = _str + "C"
?_t == 3: _str = _str + "D"
?_t == 4: _str = _str + "E"
?_t == 5: _str = _str + "F"
?_t == 6: _str = _str + "G"
?_t == 7: _str = _str + "H"
?_t == 8: _str = _str + "I"
?_t == 9: _str = _str + "J"

First number is exact division of X grid id by ten:

_t = floor ((this select 0) / 10)

Second number is then remainder of the division of X grid id by ten

_t = (this select 0) mod 10
  • Getting Y axis grind

Notice that the begining of coordinate system is in SE corner of map but counting Y grid begins from NE corner. So proper Y grid is substraction beetwen grinds count (100) and actual grid id.

_y = 100 - (_this select 1)

Implementations

  • SQS Script

Arguments: Position

_this = [floor ((_this select 0) / 200), floor (((_this select 1) - 280) / 200)]

_str = str _this + "\n"

;OX
_x = _this select 0
_t = floor (_x / 10)
?_t == 0: _str = _str + "A"
?_t == 1: _str = _str + "B"
?_t == 2: _str = _str + "C"
?_t == 3: _str = _str + "D"
?_t == 4: _str = _str + "E"
?_t == 5: _str = _str + "F"
?_t == 6: _str = _str + "G"
?_t == 7: _str = _str + "H"
?_t == 8: _str = _str + "I"
?_t == 9: _str = _str + "J"
_t = _x mod 10
?_t == 0: _str = _str + "a"
?_t == 1: _str = _str + "b"
?_t == 2: _str = _str + "c"
?_t == 3: _str = _str + "d"
?_t == 4: _str = _str + "e"
?_t == 5: _str = _str + "f"
?_t == 6: _str = _str + "g"
?_t == 7: _str = _str + "h"
?_t == 8: _str = _str + "i"
?_t == 9: _str = _str + "j"

_str = _str + " "

;OY
_str = _str + str (100 - (_this select 1))

Hint _str