XScript 매뉴얼 · Chapter 31
MATH — 수학 유틸리티
MATH 는 삼각함수·거리·각도·비교 등 장비 제어에서 자주 쓰는 수학 함수를 모아둔
글로벌 객체입니다. 각도 기반 API 는 Degree 단위 가 기본입니다.
기본 예제
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 Sqrt(double value) | 제곱근 |
double Pow(double base, double exp) | 거듭제곱 |
double Log10(double value) / Log(double value) | 로그 |
double Exp(double value) | 지수 |
double Round(double value, int digits = 0) | 반올림 |
double Ceiling(double value) / 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) | 역삼각함수 (반환은 radian, 필요 시 RadToDeg) |
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) | 점 (sx,sy) 를 중심 (cx,cy) 기준 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 역변환 |