目录
serialize —— 将vector/matrix数组展平为浮点数组
unserialize —— 将展平的浮点数组转化为vector/matrix数组
cracktransform —— 依据c值返回xform的特定分量的变换
eulertoquaternion —— 从欧拉角创建表示四元数的vector4
quaterniontoeuler —— 从表示四元数的vector4创建欧拉角
qconvert —— 将表示四元数的vector4转化为matrix3
atof —— 将字符串转化为浮点
float atof(string str)
- 忽略空格;
- 如字符串不包含数字,返回0.0;
- 字符串可包含指数(如1.25e+5);
float a = atof("1");
float b = atof("1.25e+5");
atoi —— 将字符串转化为整数
int atoi(string str) int atoi(string str, int base)
- 忽略空格;
- 如字符串不包含数字,返回0.0;
- 字符串可包含指数(如1.25e+5);
degrees —— 将弧度转化为角度
- 大多数VEX三角函数使用弧度,但用户更易使用角度;
float degrees(float num_in_rads) vector2 degrees(vector2 nums_in_rads) vector degrees(vector nums_in_rads) vector4 degrees(vector4 nums_in_rads)
radians —— 将角度转化为弧度
//角度转化为弧度 float radians(float num_in_degs) //应用了反正切atan() <vector> radians(<vector>nums_in_degs)
hsvtorgb —— 将颜色空间从HSV转化为RGB
vector hsvtorgb(vector hsv) vector hsvtorgb(float hue, float sat, float val)
rgbtohsv —— 将颜色空间从RGB转化为HSV
vector rgbtohsv(vector rgb) vector rgbtohsv(float r, float g, float b)
rgbtoxyz —— 将线性sRGB转化为CIE XYZ
vector rgbtoxyz(vector rgb)
- XYZ被认为是通用颜色空间;
xyztorgb —— 将CIE XYZ转化为线性sRGB
vector xyztorgb(vector xyz)
serialize —— 将vector/matrix数组展平为浮点数组
float[] serialize(<vector>vectors[]) float[] serialize(<matrix>matrices[])
vector v[] = { {1,2,3}, {7,8,9} }; // A vector[] of length 2
float f[];
f = serialize(v);
// Now f[] has a length of 6 and equals { 1,2,3,7,8,9 }
unserialize —— 将展平的浮点数组转化为vector/matrix数组
<vector>[] unserialize(float values[]) <matrix>[] unserialize(float values[])
vector v[]
float f[] = { 1, 2, 3, 7, 8, 9 };
v = vector(unserialize(f));
// Now v has a length of 2 and contains { {1,2,3}, {7,8,9} }
cracktransform —— 依据c值返回xform的特定分量的变换
- VOP中对应的节点为 Extract Transform ;
- 与函数 maketransform 相对应;
vector cracktransform(int trs, int xyz, int c, vector pivot, vector pivot_rotate, matrix xform) vector cracktransform(int trs, int xyz, int c, vector pivot, matrix xform)
- c=0,返回translate;
- c=1,返回rotate(单位degree,可使用radian转化为弧度);
- c=4,返回rotate(单位radian);
- c=2,返回scale;
- c=3,返回shears;
void cracktransform(int trs, int xyz, vector pivot, vector pivot_rotate, matrix xform, vector &t, vector &r, vector &s, vector &shears)
- 如需返回有多个组件,使用此更有效;
void cracktransform(int trs, int xyz, vector pivot, matrix xform, vector &t, vector &r, vector &s)
- 不支持pivot_rotate或shears;
- 如需返回有多个组件,使用此更有效;
vector @cdir;
vector @raydir;
//get a matrix with the camera's transforms
matrix cam_matrix = optransform('/obj/cam1');
//extract out the camera position as a vector
@cdir = cracktransform(XFORM_SRT, XFORM_XYZ, 0, {0,0,0}, cam_matrix);
//get a vector to project point from camera
@raydir = normalize(@P-@cdir);
eulertoquaternion —— 从欧拉角创建表示四元数的vector4
vector4 eulertoquaternion(vector rotations, int order)
- rotations表示欧拉角(X,Y,Z),单位弧度;
- 需指定旋转顺序,使用常数(被定义在$HH/vex/include/math.h),XFORM_XYZ表示旋转顺序为x、y、z;
vector rot = chv('ang');
@orient = eulertoquaternion(rot, XFORM_XYZ);
@P = qrotate(@orient, @P);
quaterniontoeuler —— 从表示四元数的vector4创建欧拉角
vector quaterniontoeuler(vector4 orient, int order)
- 单位为弧度,可使用degree转化为角度;
- 需指定旋转顺序,使用常数(被定义在$HH/vex/include/math.h),XFORM_XYZ表示旋转顺序为x、y、z;
qconvert —— 将表示四元数的vector4转化为matrix3
matrix3 qconvert(vector4 quaternion)
//转化,并应用一个偏移 matrix qconvert(vector4 quaternion, vector offset)
//转化为angle/axis矢量 vector qconvert(vector4 quaternion)