forked from ground/cground
update to math library (v1.1.0)
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
#include <groundext.h>
|
#include <groundext.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
GroundValue ground_sin(GroundScope* scope, List args) {
|
GroundValue ground_sin(GroundScope* scope, List args) {
|
||||||
return groundCreateValue(
|
return groundCreateValue(
|
||||||
@@ -21,19 +26,15 @@ GroundValue ground_tan(GroundScope* scope, List args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GroundValue rad_to_deg(GroundScope* scope, List args) {
|
GroundValue rad_to_deg(GroundScope* scope, List args) {
|
||||||
double radians = args.values[0].data.doubleVal;
|
|
||||||
|
|
||||||
return groundCreateValue(
|
return groundCreateValue(
|
||||||
DOUBLE,
|
DOUBLE,
|
||||||
radians * (180.0 / M_PI)
|
args.values[0].data.doubleVal * (180.0 / M_PI)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
GroundValue deg_to_rad(GroundScope* scope, List args) {
|
GroundValue deg_to_rad(GroundScope* scope, List args) {
|
||||||
double deg = args.values[0].data.doubleVal;
|
|
||||||
|
|
||||||
return groundCreateValue(
|
return groundCreateValue(
|
||||||
DOUBLE,
|
DOUBLE,
|
||||||
deg * (M_PI / 180.0)
|
args.values[0].data.doubleVal * (M_PI / 180.0)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,16 +63,88 @@ GroundValue ground_sqrt(GroundScope* scope, List args) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GroundValue ground_abs(GroundScope* scope, List args) {
|
||||||
|
return groundCreateValue(
|
||||||
|
DOUBLE,
|
||||||
|
abs(args.values[0].data.doubleVal)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
GroundValue ground_min(GroundScope* scope, List args) {
|
||||||
|
double a = args.values[0].data.doubleVal;
|
||||||
|
double b = args.values[1].data.doubleVal;
|
||||||
|
|
||||||
|
return groundCreateValue(
|
||||||
|
DOUBLE,
|
||||||
|
(a < b) ? a : b
|
||||||
|
);
|
||||||
|
}
|
||||||
|
GroundValue ground_max(GroundScope* scope, List args) {
|
||||||
|
double a = args.values[0].data.doubleVal;
|
||||||
|
double b = args.values[1].data.doubleVal;
|
||||||
|
|
||||||
|
return groundCreateValue(
|
||||||
|
DOUBLE,
|
||||||
|
(a > b) ? a : b
|
||||||
|
);
|
||||||
|
}
|
||||||
|
GroundValue ground_clamp(GroundScope* scope, List args) {
|
||||||
|
double number = args.values[0].data.doubleVal;
|
||||||
|
double min = args.values[1].data.doubleVal;
|
||||||
|
double max = args.values[2].data.doubleVal;
|
||||||
|
|
||||||
|
if (number < min) number = min;
|
||||||
|
if (number > max) number = max;
|
||||||
|
|
||||||
|
return groundCreateValue(
|
||||||
|
DOUBLE,
|
||||||
|
number
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroundValue ground_random(GroundScope* scope, List args) {
|
||||||
|
int64_t min = args.values[0].data.intVal;
|
||||||
|
int64_t max = args.values[1].data.intVal;
|
||||||
|
|
||||||
|
return groundCreateValue(
|
||||||
|
INT,
|
||||||
|
min + rand() % (max - min)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
GroundValue ground_random_double(GroundScope* scope, List args) {
|
||||||
|
double min = args.values[0].data.doubleVal;
|
||||||
|
double max = args.values[1].data.doubleVal;
|
||||||
|
|
||||||
|
return groundCreateValue(
|
||||||
|
INT,
|
||||||
|
min + (double)rand() / RAND_MAX * (max - min)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
GroundValue ground_random_set_seed(GroundScope* scope, List args) {
|
||||||
|
srand(args.values[0].data.intVal);
|
||||||
|
return groundCreateValue(
|
||||||
|
INT,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void ground_init(GroundScope* scope) {
|
void ground_init(GroundScope* scope) {
|
||||||
|
srand(time(NULL));
|
||||||
groundAddNativeFunction(scope, "math_Sin", ground_sin, DOUBLE, 1, DOUBLE, "radians");
|
groundAddNativeFunction(scope, "math_Sin", ground_sin, DOUBLE, 1, DOUBLE, "radians");
|
||||||
groundAddNativeFunction(scope, "math_Cos", ground_cos, DOUBLE, 1, DOUBLE, "radians");
|
groundAddNativeFunction(scope, "math_Cos", ground_cos, DOUBLE, 1, DOUBLE, "radians");
|
||||||
groundAddNativeFunction(scope, "math_Tan", ground_tan, DOUBLE, 1, DOUBLE, "radians");
|
groundAddNativeFunction(scope, "math_Tan", ground_tan, DOUBLE, 1, DOUBLE, "radians");
|
||||||
|
|
||||||
groundAddNativeFunction(scope, "math_DegreesToRadians", deg_to_rad, DOUBLE, 1, DOUBLE, "degrees");
|
groundAddNativeFunction(scope, "math_DegreesToRadians", deg_to_rad, DOUBLE, 1, DOUBLE, "degrees");
|
||||||
groundAddNativeFunction(scope, "math_RadiansToDegrees", rad_to_deg, DOUBLE, 1, DOUBLE, "radians");
|
groundAddNativeFunction(scope, "math_RadiansToDegrees", rad_to_deg, DOUBLE, 1, DOUBLE, "radians");
|
||||||
|
|
||||||
groundAddNativeFunction(scope, "math_Modulos", ground_modulos, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2");
|
groundAddNativeFunction(scope, "math_Modulos", ground_modulos, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2");
|
||||||
groundAddNativeFunction(scope, "math_Pow", ground_pow, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2");
|
groundAddNativeFunction(scope, "math_Pow", ground_pow, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2");
|
||||||
|
|
||||||
groundAddNativeFunction(scope, "math_Sqrt", ground_sqrt, DOUBLE, 1, DOUBLE, "number");
|
groundAddNativeFunction(scope, "math_Sqrt", ground_sqrt, DOUBLE, 1, DOUBLE, "number");
|
||||||
|
|
||||||
|
groundAddNativeFunction(scope, "math_Abs", ground_abs, DOUBLE, 1, DOUBLE, "number");
|
||||||
|
groundAddNativeFunction(scope, "math_Min", ground_min, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2");
|
||||||
|
groundAddNativeFunction(scope, "math_Max", ground_max, DOUBLE, 2, DOUBLE, "number1", DOUBLE, "number2");
|
||||||
|
groundAddNativeFunction(scope, "math_Clamp", ground_clamp, DOUBLE, 2, DOUBLE, "number", DOUBLE, "min", DOUBLE, "max");
|
||||||
|
|
||||||
|
groundAddNativeFunction(scope, "math_Random", ground_random, INT, 2, INT, "min", INT, "max");
|
||||||
|
groundAddNativeFunction(scope, "math_RandomDouble", ground_random_double, DOUBLE, 2, DOUBLE, "min", DOUBLE, "max");
|
||||||
|
groundAddNativeFunction(scope, "math_RandomSetSeed", ground_random_set_seed, INT, 1, INT, "seed");
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user