lineIntersects: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Add example)
(Add game version for alternative syntax to description. Minor typo corrections. Reordered see also commands to be grouped and consistent across lineIntersects pages)
 
Line 14: Line 14:
|gr1= Math - Geometry
|gr1= Math - Geometry


|descr= Checks for object intersection with a virtual line between two positions. The alternative syntax does multiple checks at once, faster than multiple calls.
|descr= Checks for object intersection with a virtual line between two positions. Since {{GVI|arma3|2.20|size= 0.75}}, there is an alternative syntax that does multiple checks at once, faster than multiple calls.
{{Feature|informative|
{{Feature|informative|
* Does not work under water.
* Does not work under water.
* Max harcoded distance is 1000m.
* Max hardcoded distance is 1000m.
}}
}}


Line 26: Line 26:
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]]
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]]


|p3= objIgnore1: [[Object]] - (Optional, default [[objNull]]) object to ignore. When testing intersection from an object/unit/vehicle, pass that object here to prevent intersection inside of the object
|p3= objIgnore1: [[Object]] - (Optional, default [[objNull]]) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object


|p4= objIgnore2: [[Object]] - (Optional, default [[objNull]]) another object to ignore. When testing intersection of a line between two objects, pass the second object here to prevent intersection inside of it being reported
|p4= objIgnore2: [[Object]] - (Optional, default [[objNull]]) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported


|r1= [[Boolean]] - [[true]] if an intersection happens with an object (not with terrain)
|r1= [[Boolean]] - [[true]] if an intersection happens with an object (not with terrain)
Line 39: Line 39:
* begPos: [[Array]] format [[Position#PositionASL|PositionASL]]
* begPos: [[Array]] format [[Position#PositionASL|PositionASL]]
* endPos: [[Array]] format [[Position#PositionASL|PositionASL]]
* endPos: [[Array]] format [[Position#PositionASL|PositionASL]]
* objIgnore1: [[Object]] - (Optional, default [[objNull]]) object to ignore. When testing intersection from an object/unit/vehicle, pass that object here to prevent intersection inside of the object
* objIgnore1: [[Object]] - (Optional, default [[objNull]]) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object
* objIgnore2: [[Object]] - (Optional, default [[objNull]]) another object to ignore. When testing intersection of a line between two objects, pass the second object here to prevent intersection inside of it being reported
* objIgnore2: [[Object]] - (Optional, default [[objNull]]) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported


|r2= [[Array]] format [result1, result2, ...] - [[true]] if an intersection happens with an object (not with terrain) for the Nth element
|r2= [[Array]] format [result1, result2, ...] - [[true]] if an intersection happens with an object (not with terrain) for the Nth element
Line 46: Line 46:
|x1= <sqf>private _hasStraightLineToChopper = lineIntersects [eyePos player, aimPos chopper, player, chopper];</sqf>
|x1= <sqf>private _hasStraightLineToChopper = lineIntersects [eyePos player, aimPos chopper, player, chopper];</sqf>


|x2= <sqf>
|x2= Alternative syntax to check intersections in parallel:
<sqf>
private _enemies = units opfor;
private _enemies = units opfor;
private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x] };
private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x] };
Line 52: Line 53:
</sqf>
</sqf>


|seealso= [[lineIntersectsSurfaces]] [[intersect]] [[terrainIntersect]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[lineIntersectsWith]] [[lineIntersectsObjs]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
|seealso= [[lineIntersectsSurfaces]] [[lineIntersectsObjs]] [[lineIntersectsWith]] [[terrainIntersect]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[intersect]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
}}
}}



Latest revision as of 02:03, 1 December 2024

Hover & click on the images for description

Description

Description:
Checks for object intersection with a virtual line between two positions. Since Arma 3 logo black.png2.20, there is an alternative syntax that does multiple checks at once, faster than multiple calls.
  • Does not work under water.
  • Max hardcoded distance is 1000m.
Groups:
Math - Geometry

Syntax

Syntax:
lineIntersects [begPos, endPos, objIgnore1, objIgnore2]
Parameters:
begPos: Array format PositionASL
endPos: Array format PositionASL
objIgnore1: Object - (Optional, default objNull) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object
objIgnore2: Object - (Optional, default objNull) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported
Return Value:
Boolean - true if an intersection happens with an object (not with terrain)

Alternative Syntax

Syntax:
lineIntersects [element1, element2, ...]
Parameters:
elementN: Array format [begPos, endPos, objIgnore1, objIgnore2]:
  • begPos: Array format PositionASL
  • endPos: Array format PositionASL
  • objIgnore1: Object - (Optional, default objNull) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object
  • objIgnore2: Object - (Optional, default objNull) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported
Return Value:
Array format [result1, result2, ...] - true if an intersection happens with an object (not with terrain) for the Nth element

Examples

Example 1:
private _hasStraightLineToChopper = lineIntersects [eyePos player, aimPos chopper, player, chopper];
Example 2:
Alternative syntax to check intersections in parallel:
private _enemies = units opfor; private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x] }; private _result = lineIntersects _enemyDataArray;

Additional Information

See also:
lineIntersectsSurfaces lineIntersectsObjs lineIntersectsWith terrainIntersect terrainIntersectASL terrainIntersectAtASL intersect cursorObject cursorTarget checkVisibility

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Lou Montana - c
Posted on May 31, 2012 - 10:46 (UTC)
Please note the difference: