XScript 手册 · Chapter 31
MATH — 数学工具
MATH 是汇集了三角函数、距离、角度、比较等设备控制中常用数学函数的
全局对象。基于角度的 API 默认使用 度(Degree)单位。
基础示例
xscript
double x1 = 0.0;
double y1 = 0.0;
double x2 = 100.0;
double y2 = 100.0;
double dist = MATH.CalcDistance(x1, y1, x2, y2);
Log("DIST = {0}", dist);
double angle = MATH.CalcAngle(x1, y1, x2, y2);
Log("ANGLE = {0}", angle);
double a = 10.2;
double b = 9.3;
double min = MATH.Min(a, b);主要方法
三角函数(Degree)
| 签名 | 说明 |
|---|---|
double Sin(double deg) | Sine |
double Cos(double deg) | Cosine |
double Tan(double deg) | Tangent |
double ASin(double value) / ACos(double value) / ATan(double value) | 反函数 |
double ATan2(double y, double x) | 考虑象限的反正切 |
基础数学
| 签名 | 说明 |
|---|---|
double Abs(double value) | 绝对值 |
double Round(double value, int fix) | 在小数点后 fix 位四舍五入(两个参数必填,无默认值) |
double Floor(double value) | 向下取整 |
比较 · 集合
| 签名 | 说明 |
|---|---|
double Min(double a, double b) / Max(double a, double b) | 最小/最大 |
double Clamp(double value, double min, double max) | 范围固定 |
坐标几何
| 签名 | 说明 |
|---|---|
double CalcDistance(double x1, double y1, double x2, double y2) | 两点距离 |
double CalcAngle(double x1, double y1, double x2, double y2) | 两点角度(°) |
double DegToRad(double deg) / RadToDeg(double rad) | 角度转换 |
提示
- 三角函数默认使用 Degree。如需 Radian,请先用
DegToRad转换。 - 在软限位、速度限制中积极使用
Clamp,可使条件语句更简洁。 - 在比较运算中担心浮点误差时,可用
MATH.Abs(a - b) < eps模式。
MATH 全函数参考(XUtilMath)
依据 C# 源码 — 脚本可直接调用的所有函数。
基础 / 比较
| 函数 | 含义 |
|---|---|
MATH.Abs(value) | 绝对值 |
MATH.Min(a, b) / MATH.Max(a, b) | 最小 / 最大 |
MATH.Clamp(int, min, max) / (double, min, max) | 范围限制 |
MATH.Floor(value) | 向下取整 |
MATH.Round(value, fix) | 在小数点后 fix 位四舍五入 |
三角函数(角度单位 = degree)
| 函数 | 含义 |
|---|---|
MATH.Sin(deg) / MATH.Cos(deg) / MATH.Tan(deg) | 正弦 · 余弦 · 正切 |
MATH.ASin(value) / MATH.ACos(value) / MATH.ATan(value) | 反三角函数(返回单位为 degree) |
MATH.ATan2(y, x) | 保留象限的反正切 |
MATH.DegToRad(angle) / MATH.RadToDeg(angle) | 角度单位转换 |
坐标几何
| 函数 | 含义 |
|---|---|
MATH.CalcDistance(x1, y1, x2, y2) | 两点之间距离 |
MATH.CalcAngle(x1, y1, x2, y2) | 两点之间角度(degree) |
MATH.CalcRotate(cx, cy, sx, sy, angle, ref tx, ref ty) | 以中心 (cx,cy) 为基准将点 (sx,sy) 旋转 angle° → (tx,ty) |
MATH.CalcOffsetPoint(cx, cy, sx, sy, offset, ref tx, ref ty) | 两点之间距离 offset 位置上的点 |
MATH.TransformTrapezoidToSquare(x1..y4, x, y, ref newX, ref newY) | 四边形坐标系 → 单位正方形坐标系校正(畸变校正) |
MATH.FindCrossPointTwoLines(...) | 两直线的交点(4 种重载 — 点·角度 / 两点 / Point 型) |
MATH.FindIntersection(p1, p2, p3, p4, ...) | 两线段的交点 |
MATH.FindCircle(a, b, c, out center, out radius) | 三点定圆 |
MATH.CalcPointDistance(pt1, pt2) | Point 型两点距离 |
MATH.CalcPointAngle(pt1, pt2) | Point 型两点角度 |
线性转换器(LCVT — Linear Converter Table)
用于物理单位 ↔ 机械单位(编码器脉冲、voltage、raw 等)转换的多项式/分段线性插值表。
| 函数 | 含义 |
|---|---|
MATH.LCVT_SetName(index, name) | 为槽位命名 |
MATH.LCVT_Clear(index) | 初始化槽位 |
MATH.LCVT_Add(index, x, y, log=true) | 添加校正点 |
MATH.LCVT_GetValueY(index, x, ref y) | x 输入 → y 插值结果 |
MATH.LCVT_GetValueX(index, y, ref x) | y 输入 → x 反变换 |