Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
math [2019/07/04 20:43] – [AnglesToVector] korshun | math [2019/08/26 21:16] – korshun |
---|
''int ipow(int x, int y)'' | ''int ipow(int x, int y)'' |
| |
Returns x^y. Uses a simple multiplication loop. | Returns x<sup>y</sup>. Uses a simple multiplication loop. |
| |
==== fpow ==== | ==== fpow ==== |
''fixed fpow(fixed x, fixed y)'' | ''fixed fpow(fixed x, fixed y)'' |
| |
returns x^y. Supports powers below ''1.0''. Uses a simple loop with ''FixedMul'' or ''FixedDiv'', depending on whether the power is below ''1.0''. | returns x<sup>y</sup>. Supports powers below ''1.0''. Uses a simple loop with ''FixedMul'' or ''FixedDiv'', depending on whether the power is below ''1.0''. |
| |
| |
===== Vector math ===== | ===== Vector math ===== |
| |
==== VectorLength3D ==== | ==== Length ==== |
''fixed VectorLength3D(fixed x, fixed y, fixed z)'' | |
| |
A 3D version of [[zdoom>VectorLength]]. Returns the length of the 3D vector. | * 2D: [[zdoom>VectorLength]] |
| * 3D: ''fixed VectorLength3D(fixed x, fixed y, fixed Z)'' |
| |
| ''VectorLength3D'' is implemented efficiently as ''VectorLength(VectorLength(x, y), z)''. |
| |
| ==== Dot product ==== |
| |
==== dot ==== | |
* 2D: ''fixed dot2(fixed x1, fixed y1, fixed x2, fixed y2)'' | * 2D: ''fixed dot2(fixed x1, fixed y1, fixed x2, fixed y2)'' |
* 3D: ''fixed dot3(fixed x1, fixed y1, fixed z1, fixed x2, fixed y2, fixed z2)'' | * 3D: ''fixed dot3(fixed x1, fixed y1, fixed z1, fixed x2, fixed y2, fixed z2)'' |
| |
Returns the [[wp>dot product]] of two vectors. Shorthand for writing out ''FixedMul(x1, x2) + FixedMul(y1, y2) + ...''. | These functions return the [[wp>dot product]] of two vectors. They are shorthands for writing out ''FixedMul(x1, x2) + FixedMul(y1, y2) + ...''. |
| |
| ==== Normalization ==== |
| |
==== normalize ==== | |
* 2D: ''fixed, fixed normalize2d(fixed x, fixed y)'' | * 2D: ''fixed, fixed normalize2d(fixed x, fixed y)'' |
* 3D: ''fixed, fixed, fixed normalize3d(fixed x, fixed y, fixed z)'' | * 3D: ''fixed, fixed, fixed normalize3d(fixed x, fixed y, fixed z)'' |
| |
[[wp>Normalized vector|Normalizes]] the vector and returns the result using [[multiple return values]]. | These functions [[wp>Normalized vector|Normalize]] the input vector and return the result using [[multiple return values]]. |
| |
=== Example usage === | === Example usage === |
Converts the vector's direction to a pair of angles (angle, pitch) and returns them using [[multiple return values]]. | Converts the vector's direction to a pair of angles (angle, pitch) and returns them using [[multiple return values]]. |
| |
<note important>Remember that ZDoom uses inverted pitch angles on actors. ACSUtils functions don't invert pitches.</note> | <note important>Remember that ZDoom uses negated pitch angles on actors. ACSUtils functions don't use negated pitches. </note> |
| |
=== Example usage === | === Example usage === |
int pitch = r2; | int pitch = r2; |
SetActorAngle(tid, angle); | SetActorAngle(tid, angle); |
SetActorPitch(tid, -pitch); // SetActorPitch expects inverted pitch. | SetActorPitch(tid, -pitch); // SetActorPitch expects negated pitch. |
} | } |
</code> | </code> |
Converts a pair of angles (angle, pitch) to a 3D vector of length ''1.0'', which points in the same direction, and returns it using [[multiple return values]]. | Converts a pair of angles (angle, pitch) to a 3D vector of length ''1.0'', which points in the same direction, and returns it using [[multiple return values]]. |
| |
<note important>Remember that ZDoom uses inverted pitches on actors. ACSUtils functions don't invert pitches.</note> | <note important>Remember that ZDoom uses negated pitch angles on actors. ACSUtils functions don't use negated pitches.</note> |
| |
=== Example usage === | === Example usage === |
| |
<code> | <code> |
AnglesToVector(GetActorAngle(0), -GetActorPitch(0)); | AnglesToVector(GetActorAngle(0), -GetActorPitch(0)); // Un-negate actor pitch |
int dirX = r1; | int dirX = r1; |
int dirY = r2; | int dirY = r2; |