Example Code: Random Area Distribution: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Some wiki formatting)
m (Some wiki formatting)
Line 84: Line 84:
{{Feature | Informative | This is an [[SQS Syntax]] example.}}
{{Feature | Informative | This is an [[SQS Syntax]] example.}}


[[private]] ["_center", "_radius", "_angle", "_distance", "_offset", "_position"] {{cc|private definitions}}
<sqs>
_center = [[getPos]] [[player]] {{cc|disc center definition}}
; private definitions
_radius = 50 {{cc|radius definition}}
private ["_center", "_radius", "_angle", "_distance", "_offset", "_position"]
_center = getPos player; "disc center definition"
{{cc|random radius}}
_radius = 50; "radius definition"
_angle = [[random]] 360
 
_distance = [[random]] _radius
; random radius
_offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance]
_angle = random 360
_position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)]
_distance = random _radius
_offset = [sin _angle * _distance, cos _angle * _distance]
{{cc|random position}}
_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]
_angle = [[random]] 360
 
_distance = _radius * [[sqrt]] [[random]] 1
; random position
_offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0]
_angle = random 360
_position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)]
_distance = _radius * sqrt random 1
_offset = [sin _angle * _distance, cos _angle * _distance, 0]
_position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]
</sqs>




[[Category: Example Code]]
[[Category: Example Code]]

Revision as of 00:04, 14 July 2022

From left to right:
  1. random radius
  2. random position in a circle
  3. Gaussian normal distribution

Originally from Commy2's forum post, also fully translated on Dedmen's sqf.ovh post.


Arma 3

  • object getPos [distance, direction] has been introduced in Arma 3 logo black.png1.56
  • Gaussian random [min, mid, max] has been introduced in Arma 3 logo black.png1.56

private _center = getPosATL player; // disc center definition private _radius = 50; // radius definition // random radius private _angle = random 360; // angle definition (0..360) private _distance = random _radius; // distance from the center definition (0..radius) private _position = _center getPos [_distance, _angle]; // random position private _angle = random 360; // angle definition (0..360) private _randomSquareRoot = sqrt random 1; // random square-root to obtain a non-linear 0..1 value private _distance = _radius * _randomSquareRoot; // distance from the center definition (0..radius) private _position = _center getPos [_distance, _angle]; // Gaussian normal distribution private _angleHalf = random 180; private _randomGauss = random [-1, 0, 1]; private _distance = _radius * _randomGauss; private _position = _center getPos [_distance, _angleHalf];


Arma 2

private ["_center", "_radius", "_angle", "_distance", "_offset", "_position"]; // private definitions _center = getPosATL player; // disc center definition private _radius = 50; // radius definition // random radius _angle = random 360; _distance = random _radius; _offset = [sin _angle * _distance, cos _angle * _distance, 0]; _position = [_center, _offset] call BIS_fnc_vectorAdd; // random position _angle = random 360; _distance = _radius * sqrt random 1; _offset = [sin _angle * _distance, cos _angle * _distance, 0]; _position = [_center, _offset] call BIS_fnc_vectorAdd;


Armed Assault / Operation Flashpoint: Resistance

private ["_center", "_radius", "_angle", "_distance", "_offset", "_position"]; // private definitions _center = getPos player; // disc center definition - getPosASL can be used in Armed Assault private _radius = 50; // radius definition // random radius _angle = random 360; _distance = random _radius; _offset = [sin _angle * _distance, cos _angle * _distance]; _position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]; // random position _angle = random 360; _distance = _radius * sqrt random 1; _offset = [sin _angle * _distance, cos _angle * _distance, 0]; _position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)];


Operation Flashpoint

This is an SQS Syntax example.

; private definitions private ["_center", "_radius", "_angle", "_distance", "_offset", "_position"] _center = getPos player; "disc center definition" _radius = 50; "radius definition" ; random radius _angle = random 360 _distance = random _radius _offset = [sin _angle * _distance, cos _angle * _distance] _position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)] ; random position _angle = random 360 _distance = _radius * sqrt random 1 _offset = [sin _angle * _distance, cos _angle * _distance, 0] _position = [(_center select 0) + (_offset select 0), (_center select 1) + (_offset select 1)]