Difference between revisions of "bezierInterpolation"
Jump to navigation
Jump to search
m (Text replacement - "<h3 style="display:none">Bottom Section</h3> " to "") |
Lou Montana (talk | contribs) m (Fix Wikipedia link) |
||
(23 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{RV|type=command |
− | | arma3 | + | |game1= arma3 |
− | + | |version1= 1.92 | |
− | |1.92 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|gr1= Math | |gr1= Math | ||
− | | Gets interpolated value based on | + | |descr= Gets interpolated value based on {{Link|https://en.wikipedia.org/wiki/Bézier_curve|Bézier curve}} with given control points (progress value is 0...1 for a curve that starts at pos0 and finishes at posN) <br> |
[[Image:bezierInterpolation2.jpg|400px]] | [[Image:bezierInterpolation2.jpg|400px]] | ||
− | | progress [[bezierInterpolation]] | + | |s1= progress [[bezierInterpolation]] positions |
− | |p1=progress: [[Number]] - interpolation value | + | |p1= progress: [[Number]] - interpolation value |
− | |p2= | + | |p2= positions: [[Array]] of [[Array]]s in format [[Position#Introduction|Position3D]] |
− | |||
− | | [[Array]] - a single point position in format [[Position3D]] based on progress value | + | |r1= [[Array]] - a single point position in format [[Position#Introduction|Position3D]] based on progress value |
− | |x1= Quick demonstration that spawns some spheres around player object:< | + | |x1= Quick demonstration that spawns some spheres around player object: |
− | + | <sqf> | |
− | + | for "_i" from 0 to 1 step 0.05 do { | |
− | + | createVehicle ["Sign_Sphere10cm_F", (_i bezierInterpolation [ | |
− | + | player modelToWorld [0,0,0], | |
− | + | player modelToWorld [0,2,2], | |
− | ]),[],0,"CAN_COLLIDE"]; | + | player modelToWorld [2,0,2], |
− | };</ | + | player modelToWorld [0,0,4] |
+ | ]), [], 0, "CAN_COLLIDE"]; | ||
+ | }; | ||
+ | </sqf> | ||
− | |x2= Create a map marker curve from 4 control points with overlap (progress is -0.5...1.5 instead of 0...1):< | + | |x2= Create a map marker curve from 4 control points with overlap (progress is -0.5...1.5 instead of 0...1): |
+ | <sqf> | ||
+ | private _controlPoints = [[100,-90], [200,-30], [150,60], [100,90]] apply { player getRelPos _x }; | ||
{ | { | ||
− | + | private _marker = createMarkerLocal [str _x, _x]; | |
− | _marker | + | _marker setMarkerTypeLocal "mil_objective"; |
− | _marker | + | _marker setMarkerTextLocal ("P" + str _forEachIndex); |
} | } | ||
− | + | forEach _controlPoints; | |
− | + | ||
+ | for "_i" from -0.5 to 1.5 step 0.01 do | ||
{ | { | ||
− | + | private _marker = createMarkerLocal [str _i, _i bezierInterpolation _controlPoints]; | |
− | _marker | + | _marker setMarkerTypeLocal "mil_dot"; |
}; | }; | ||
− | + | openMap true; | |
+ | </sqf> | ||
− | | [[linearConversion]] | + | |seealso= [[linearConversion]] [[vectorLinearConversion]] |
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 02:00, 24 February 2023
Description
- Description:
- Gets interpolated value based on Bézier curve with given control points (progress value is 0...1 for a curve that starts at pos0 and finishes at posN)
- Groups:
- Math
Syntax
- Syntax:
- progress bezierInterpolation positions
- Parameters:
- progress: Number - interpolation value
- positions: Array of Arrays in format Position3D
- Return Value:
- Array - a single point position in format Position3D based on progress value
Examples
- Example 1:
- Quick demonstration that spawns some spheres around player object:
for "_i" from 0 to 1 step 0.05 do { createVehicle ["Sign_Sphere10cm_F", (_i bezierInterpolation [ player modelToWorld [0,0,0], player modelToWorld [0,2,2], player modelToWorld [2,0,2], player modelToWorld [0,0,4] ]), [], 0, "CAN_COLLIDE"]; };
- Example 2:
- Create a map marker curve from 4 control points with overlap (progress is -0.5...1.5 instead of 0...1):
private _controlPoints = [[100,-90], [200,-30], [150,60], [100,90]] apply { player getRelPos _x }; { private _marker = createMarkerLocal [str _x, _x]; _marker setMarkerTypeLocal "mil_objective"; _marker setMarkerTextLocal ("P" + str _forEachIndex); } forEach _controlPoints; for "_i" from -0.5 to 1.5 step 0.01 do { private _marker = createMarkerLocal [str _i, _i bezierInterpolation _controlPoints]; _marker setMarkerTypeLocal "mil_dot"; }; openMap true;
Additional Information
- See also:
- linearConversion vectorLinearConversion
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