Add new xs stocks (#426)

xs_vec_len_2d returns the length of a 2D vector

xs_vec_distance returns the distance between two vectors
xs_vec_distance_2d returns the distance between two 2D vectors

xs_vec_add_scaled and xs_vec_sub_scaled do two operations
in one for convenience and performance. They add/subtract a vector
scaled by a scalar to another vector. Very useful when working with
unit vectors.
This commit is contained in:
IgnacioFDM 2017-04-03 13:41:46 -03:00 committed by Vincent Herbet
parent da80667fb0
commit ff488dd81f

View File

@ -369,6 +369,24 @@ stock xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[])
out[2] = in1[2] - in2[2]; out[2] = in1[2] - in2[2];
} }
// Adds the second vector scaled by a scalar to the first
// tested
stock xs_vec_add_scaled(const Float:in1[], const Float:in2[], Float:scalar, Float:out[])
{
out[0] = in1[0] + in2[0] * scalar;
out[1] = in1[1] + in2[1] * scalar;
out[2] = in1[2] + in2[2] * scalar;
}
// Subtracts the second vector scaled by a scalar to the first
// tested
stock xs_vec_sub_scaled(const Float:in1[], const Float:in2[], Float:scalar, Float:out[])
{
out[0] = in1[0] - in2[0] * scalar;
out[1] = in1[1] - in2[1] * scalar;
out[2] = in1[2] - in2[2] * scalar;
}
// Are vectors equal? // Are vectors equal?
// untested, but should work // untested, but should work
stock bool:xs_vec_equal(const Float:vec1[], const Float:vec2[]) stock bool:xs_vec_equal(const Float:vec1[], const Float:vec2[])
@ -409,6 +427,30 @@ stock Float:xs_vec_len(const Float:vec[])
return xs_sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); return xs_sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]);
} }
// Compute 2D vector length
// tested
stock Float:xs_vec_len_2d(const Float:vec[])
{
return xs_sqrt(vec[0]*vec[0] + vec[1]*vec[1]);
}
// Compute distance between two vectors
// tested
stock Float:xs_vec_distance(const Float:vec1[], const Float:vec2[])
{
return xs_sqrt((vec1[0]-vec2[0]) * (vec1[0]-vec2[0]) +
(vec1[1]-vec2[1]) * (vec1[1]-vec2[1]) +
(vec1[2]-vec2[2]) * (vec1[2]-vec2[2]));
}
// Compute distance between two 2D vectors
// tested
stock Float:xs_vec_distance_2d(const Float:vec1[], const Float:vec2[])
{
return xs_sqrt((vec1[0]-vec2[0]) * (vec1[0]-vec2[0]) +
(vec1[1]-vec2[1]) * (vec1[1]-vec2[1]));
}
// Normalize vec // Normalize vec
// tested // tested
stock xs_vec_normalize(const Float:vec[], Float:out[]) stock xs_vec_normalize(const Float:vec[], Float:out[])