{"name":"Example Code: Random Area Distribution","title":"Example Code: Random Area Distribution","type":"topic","url":"https://community.bistudio.com/wiki/Example_Code:_Random_Area_Distribution","revid":378182,"updated":"2026-03-05T16:55:15Z","aliases":[],"markdown":"Originally from Commy2's [sqf.ovh post](https://sqf.ovh/sqf%20math/2018/05/05/generate-a-random-position.html).\n\n### Arma 3 (Arma 3 v1.56)\n\n> [!NOTE]\n> - `_object getPos [_distance, _direction]` has been introduced in Arma 3 v1.56\n> - Gaussian `random [_min, _mid, _max]` has been introduced in Arma 3 v1.56\n\n```sqf\nprivate _center = getPosATL player;                    // disc center definition\nprivate _radius = 50;                                // radius definition\n\n// random radius\nprivate _angle = random 360;                        // angle definition (0..360)\nprivate _distance = random _radius;                    // distance from the center definition (0..radius)\nprivate _position = _center getPos [_distance, _angle];\n\n// random position\nprivate _angle = random 360;                        // angle definition (0..360)\nprivate _randomSquareRoot = sqrt random 1;            // random square-root to obtain a non-linear 0..1 value\nprivate _distance = _radius * _randomSquareRoot;    // distance from the center definition (0..radius)\nprivate _position = _center getPos [_distance, _angle];\n\n// Gaussian normal distribution\nprivate _angleHalf = random 180;\nprivate _randomGauss = random [-1, 0, 1];\nprivate _distance = _radius * _randomGauss;\nprivate _position = _center getPos [_distance, _angleHalf];\n```\n\n### Arma 2 (Arma 2 v1.03)\n\n> [!NOTE]\n> - getPosATL has been introduced in Arma 2 v1.03\n\n```sqf\nprivate [\"_center\", \"_radius\", \"_angle\", \"_distance\", \"_offset\", \"_position\"];    // private definitions\n_center = getPosATL player;    // disc center definition\n_radius = 50;                // radius definition\n\n// random radius\n_angle = random 360;\n_distance = random _radius;\n_offset = [sin _angle * _distance, cos _angle * _distance, 0];\n_position = [_center, _offset] call BIS_fnc_vectorAdd;\n\n// random position\n_angle = random 360;\n_distance = _radius * sqrt random 1;\n_offset = [sin _angle * _distance, cos _angle * _distance, 0];\n_position = [_center, _offset] call BIS_fnc_vectorAdd;\n```\n\n### Armed Assault / Operation Flashpoint: Resistance (Armed Assault v1.00 Operation Flashpoint: Resistance v1.85)\n\n> [!NOTE]\n> - getPosASL has been introduced in Armed Assault v1.00\n\n```sqf\nprivate [\"_center\", \"_radius\", \"_angle\", \"_distance\", \"_offset\", \"_position\"];    // private definitions\n_center = getPos player;    // disc center definition - getPosASL can be used in Armed Assault\n_radius = 50;                // radius definition\n\n// random radius\n_angle = random 360;\n_distance = random _radius;\n_offset = [sin _angle * _distance, cos _angle * _distance];\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)];\n\n// random position\n_angle = random 360;\n_distance = _radius * sqrt random 1;\n_offset = [sin _angle * _distance, cos _angle * _distance, 0];\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)];\n```\n\n### Operation Flashpoint (Operation Flashpoint v1.00)\n\n> [!NOTE]\n> This is an SQS Syntax example.\n\n```sqs\n; private definitions\nprivate [\"_center\", \"_radius\", \"_angle\", \"_distance\", \"_offset\", \"_position\"]\n_center = getPos player;    \"disc center definition\"\n_radius = 50;                \"radius definition\"\n\n; random radius\n_angle = random 360\n_distance = random _radius\n_offset = [sin _angle * _distance, cos _angle * _distance]\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]\n\n; random position\n_angle = random 360\n_distance = _radius * sqrt random 1\n_offset = [sin _angle * _distance, cos _angle * _distance, 0]\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]\n```","sections":[{"heading":null,"level":1,"markdown":"Originally from Commy2's [sqf.ovh post](https://sqf.ovh/sqf%20math/2018/05/05/generate-a-random-position.html)."},{"heading":"Arma 3 (Arma 3 v1.56)","level":3,"markdown":"> [!NOTE]\n> - `_object getPos [_distance, _direction]` has been introduced in Arma 3 v1.56\n> - Gaussian `random [_min, _mid, _max]` has been introduced in Arma 3 v1.56\n\n```sqf\nprivate _center = getPosATL player;                    // disc center definition\nprivate _radius = 50;                                // radius definition\n\n// random radius\nprivate _angle = random 360;                        // angle definition (0..360)\nprivate _distance = random _radius;                    // distance from the center definition (0..radius)\nprivate _position = _center getPos [_distance, _angle];\n\n// random position\nprivate _angle = random 360;                        // angle definition (0..360)\nprivate _randomSquareRoot = sqrt random 1;            // random square-root to obtain a non-linear 0..1 value\nprivate _distance = _radius * _randomSquareRoot;    // distance from the center definition (0..radius)\nprivate _position = _center getPos [_distance, _angle];\n\n// Gaussian normal distribution\nprivate _angleHalf = random 180;\nprivate _randomGauss = random [-1, 0, 1];\nprivate _distance = _radius * _randomGauss;\nprivate _position = _center getPos [_distance, _angleHalf];\n```"},{"heading":"Arma 2 (Arma 2 v1.03)","level":3,"markdown":"> [!NOTE]\n> - getPosATL has been introduced in Arma 2 v1.03\n\n```sqf\nprivate [\"_center\", \"_radius\", \"_angle\", \"_distance\", \"_offset\", \"_position\"];    // private definitions\n_center = getPosATL player;    // disc center definition\n_radius = 50;                // radius definition\n\n// random radius\n_angle = random 360;\n_distance = random _radius;\n_offset = [sin _angle * _distance, cos _angle * _distance, 0];\n_position = [_center, _offset] call BIS_fnc_vectorAdd;\n\n// random position\n_angle = random 360;\n_distance = _radius * sqrt random 1;\n_offset = [sin _angle * _distance, cos _angle * _distance, 0];\n_position = [_center, _offset] call BIS_fnc_vectorAdd;\n```"},{"heading":"Armed Assault / Operation Flashpoint: Resistance (Armed Assault v1.00 Operation Flashpoint: Resistance v1.85)","level":3,"markdown":"> [!NOTE]\n> - getPosASL has been introduced in Armed Assault v1.00\n\n```sqf\nprivate [\"_center\", \"_radius\", \"_angle\", \"_distance\", \"_offset\", \"_position\"];    // private definitions\n_center = getPos player;    // disc center definition - getPosASL can be used in Armed Assault\n_radius = 50;                // radius definition\n\n// random radius\n_angle = random 360;\n_distance = random _radius;\n_offset = [sin _angle * _distance, cos _angle * _distance];\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)];\n\n// random position\n_angle = random 360;\n_distance = _radius * sqrt random 1;\n_offset = [sin _angle * _distance, cos _angle * _distance, 0];\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)];\n```"},{"heading":"Operation Flashpoint (Operation Flashpoint v1.00)","level":3,"markdown":"> [!NOTE]\n> This is an SQS Syntax example.\n\n```sqs\n; private definitions\nprivate [\"_center\", \"_radius\", \"_angle\", \"_distance\", \"_offset\", \"_position\"]\n_center = getPos player;    \"disc center definition\"\n_radius = 50;                \"radius definition\"\n\n; random radius\n_angle = random 360\n_distance = random _radius\n_offset = [sin _angle * _distance, cos _angle * _distance]\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]\n\n; random position\n_angle = random 360\n_distance = _radius * sqrt random 1\n_offset = [sin _angle * _distance, cos _angle * _distance, 0]\n_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]\n```"}],"categories":["Example Code"],"groups":["Scripting"]}