Example Code: Convert Position To Map Grid: Difference between revisions
MAF_bi_wiki (talk | contribs) No edit summary |
m (→Solution) |
||
Line 5: | Line 5: | ||
= Solution = | = 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 | 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. | ||
<pre>_this = [floor ((_this select 0) / 200), floor (((_this select 1) + 520) / 200)]</pre> | <pre>_this = [floor ((_this select 0) / 200), floor (((_this select 1) + 520) / 200)]</pre> |
Revision as of 15:20, 5 February 2008
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