Example Code: Random Area Distribution: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Some wiki formatting) |
Lou Montana (talk | contribs) m (Text replacement - "{{Feature | Informative | " to "{{Feature|informative|") |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
[[File:ExampleCode RandomDiscDistribution.png|thumb|From left to right:<ol><li>random radius<li>random position in a circle<li>Gaussian normal distribution</ol>]] | [[File:ExampleCode RandomDiscDistribution.png|thumb|From left to right:<ol><li>random radius<li>random position in a circle<li>Gaussian normal distribution</ol>]] | ||
Originally from [[User:Commy2|Commy2]]'s | Originally from [[User:Commy2|Commy2]]'s {{Link|https://armaworld.de/index.php?thread/3796-zuf%C3%A4llige-position-erzeugen/|forum post}}, also fully translated on [[User:Dedmen|Dedmen]]'s {{Link|https://sqf.ovh/sqf%20math/2018/05/05/generate-a-random-position.html|sqf.ovh post}}. | ||
{{ArgTitle|2|{{arma3}}|{{GVI|arma3|1.56}}}} | {{ArgTitle|2|{{arma3}}|{{GVI|arma3|1.56}}}} | ||
{{Feature | Informative | | {{Feature | Informative | | ||
* | * <sqf inline>_object getPos [_distance, _direction]</sqf> has been introduced in {{GVI|arma3|1.56}} | ||
* Gaussian | * Gaussian <sqf inline>random [_min, _mid, _max]</sqf> has been introduced in {{GVI|arma3|1.56}} | ||
}} | }} | ||
Line 82: | Line 82: | ||
{{ArgTitle|2|{{ofp}}|{{GVI|ofp|1.00}}}} | {{ArgTitle|2|{{ofp}}|{{GVI|ofp|1.00}}}} | ||
{{Feature | | {{Feature|informative|This is an [[SQS Syntax]] example.}} | ||
<sqs> | |||
; 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)] | |||
</sqs> | |||
[[Category: Example Code]] | [[Category: Example Code]] |
Latest revision as of 21:41, 16 May 2024
Originally from Commy2's forum post, also fully translated on Dedmen's sqf.ovh post.
Arma 3
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;
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
; 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)]