Example Code: Random Area Distribution: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Page creation)
 
m (Text replacement - "\{\{ArgTitle *\| *([^\|]+) *\| *([1-6]) *\|" to "{{ArgTitle|$2|$1|")
(7 intermediate revisions by 2 users not shown)
Line 4: Line 4:




{{ArgTitle|{{arma3}}|2|{{GVI|arma3|1.55}}}}
{{ArgTitle|2|{{arma3}}|{{GVI|arma3|1.56}}}}
{{Informative |
{{Feature | Informative |
* {{Inline code|object [[getPos]] [distance, direction]}} has been introduced in {{GVI|arma3|1.55}}
* {{ic|object [[getPos]] [distance, direction]}} has been introduced in {{GVI|arma3|1.56}}
* Gaussian {{Inline code|[[random]] [min, mid, max]}} has been introduced in {{GVI|arma3|1.55}}
* Gaussian {{ic|[[random]] [min, mid, max]}} has been introduced in {{GVI|arma3|1.56}}
}}
}}


Line 31: Line 31:




{{ArgTitle|{{arma2}}|2|{{GVI|arma2|1.03}}}}
{{ArgTitle|2|{{arma2}}|{{GVI|arma2|1.03}}}}
{{Informative |
{{Feature | Informative |
* [[getPosATL]] has been introduced in {{GVI|arma2|1.03}}
* [[getPosATL]] has been introduced in {{GVI|arma2|1.03}}
}}
}}
Line 43: Line 43:
  _angle = [[random]] 360;
  _angle = [[random]] 360;
  _distance = [[random]] _radius;
  _distance = [[random]] _radius;
  _offset = <nowiki>[</nowiki>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0];
  _offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0];
  _position = [_center, _offset] [[call]] [[BIS_fnc_vectorAdd]];
  _position = [_center, _offset] [[call]] [[BIS_fnc_vectorAdd]];
   
   
Line 49: Line 49:
  _angle = [[random]] 360;
  _angle = [[random]] 360;
  _distance = _radius * [[sqrt]] [[random]] 1;
  _distance = _radius * [[sqrt]] [[random]] 1;
  _offset = <nowiki>[</nowiki>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0];
  _offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0];
  _position = [_center, _offset] [[call]] [[BIS_fnc_vectorAdd]];
  _position = [_center, _offset] [[call]] [[BIS_fnc_vectorAdd]];




{{ArgTitle|{{arma}}&nbsp;/&nbsp;{{ofpr}}|2|{{GVI|arma|1.00}}&nbsp;{{GVI|ofpr|1.85}}}}
{{ArgTitle|2|{{arma1}}&nbsp;/&nbsp;{{ofpr}}|{{GVI|arma1|1.00}}&nbsp;{{GVI|ofpr|1.85}}}}
{{Informative |
{{Feature | Informative |
* [[getPosASL]] has been introduced in {{GVI|arma|1.00}}
* [[getPosASL]] has been introduced in {{GVI|arma1|1.00}}
}}
}}


  [[private]] ["_center", "_radius", "_angle", "_distance", "_offset", "_position"]; {{cc|private definitions}}
  [[private]] ["_center", "_radius", "_angle", "_distance", "_offset", "_position"]; {{cc|private definitions}}
  _center = [[getPos]] [[player]]; {{cc|disc center definition - [[getPosASL]] can be used in {{arma}}}}
  _center = [[getPos]] [[player]]; {{cc|disc center definition - [[getPosASL]] can be used in {{arma1}}}}
  [[private]] _radius = 50; {{cc|radius definition}}
  [[private]] _radius = 50; {{cc|radius definition}}
   
   
Line 65: Line 65:
  _angle = [[random]] 360;
  _angle = [[random]] 360;
  _distance = [[random]] _radius;
  _distance = [[random]] _radius;
  _offset = <nowiki>[</nowiki>[[sin]] _angle * _distance, [[cos]] _angle * _distance];
  _offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance];
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)];
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)];
   
   
Line 71: Line 71:
  _angle = [[random]] 360;
  _angle = [[random]] 360;
  _distance = _radius * [[sqrt]] [[random]] 1;
  _distance = _radius * [[sqrt]] [[random]] 1;
  _offset = <nowiki>[</nowiki>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0];
  _offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0];
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)];
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)];




{{ArgTitle|{{ofp}}|2|{{GVI|ofp|1.00}}}}
{{ArgTitle|2|{{ofp}}|{{GVI|ofp|1.00}}}}
{{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}}
  [[private]] ["_center", "_radius", "_angle", "_distance", "_offset", "_position"] {{cc|private definitions}}
Line 85: Line 85:
  _angle = [[random]] 360
  _angle = [[random]] 360
  _distance = [[random]] _radius
  _distance = [[random]] _radius
  _offset = <nowiki>[</nowiki>[[sin]] _angle * _distance, [[cos]] _angle * _distance]
  _offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance]
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)]
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)]
   
   
Line 91: Line 91:
  _angle = [[random]] 360
  _angle = [[random]] 360
  _distance = _radius * [[sqrt]] [[random]] 1
  _distance = _radius * [[sqrt]] [[random]] 1
  _offset = <nowiki>[</nowiki>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0]
  _offset = [<nowiki/>[[sin]] _angle * _distance, [[cos]] _angle * _distance, 0]
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)]
  _position = [(_center [[select]] 0) + (_offset [[select]] 0), (_center [[select]] 1) + (_offset [[select]] 1)]




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

Revision as of 01:43, 9 August 2021

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 ["_center", "_radius", "_angle", "_distance", "_offset", "_position"]	// private definitions
_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)]