Repository navigation
logic gauge zh
laurel Lin edited this page Aug 22, 2026
·
2 revisions
把玩家输入的轨距换算成机械动力(Create)用于计算弯道的比例常数——二次多项式 y = a·x² + b·x + c
精确穿过三个锚点(克拉默法则求解)。纯函数,可在 Node 中单测。
换算基准:1 格方块 = 1 米 = 1000mm = 16px,即 px = mm × 16 / 1000(1 px = 62.5mm);
1 英寸 = 25.4mm。轨距度量 = 左右钢轨中心距。
export interface GaugeAnchor {
gaugeMM: number; // 轨距(mm)
scale: number; // Create 弯道比例常数
}三个已知锚点(实测于游戏):
export const GAUGE_ANCHORS: GaugeAnchor[] = [
{ gaugeMM: 1435, scale: 0.755 }, // 标准轨
{ gaugeMM: 1600, scale: 0.965 }, // Create 默认轨
{ gaugeMM: 1000, scale: 0.525 }, // 米轨
];export interface QuadraticCoeffs {
a: number;
b: number;
c: number;
}export const DEFAULT_FIT: QuadraticCoeffs = fitQuadratic(GAUGE_ANCHORS)!;Create 默认标称轨距 1600mm 与其对应的模型 px(1600mm → 25.6px)。
export const DEFAULT_GAUGE_MM = 1600;
export const DEFAULT_GAUGE_PX = mmToPx(DEFAULT_GAUGE_MM); // 25.6// 用克拉默法则求过三点的二次多项式系数;点数不足或 x 重复时返回 null
export function fitQuadratic(points: GaugeAnchor[]): QuadraticCoeffs | null;
export function gaugeMMToScale(gaugeMM: number, coeffs: QuadraticCoeffs = DEFAULT_FIT): number; // mm → 比例常数
export function scaleForPx(gaugePx: number, coeffs: QuadraticCoeffs = DEFAULT_FIT): number; // px → 比例常数(先转 mm 再拟合)
// 把系数格式化为人类可读公式(负数系数显示为「−」而非「+ -」),如 y = 1.24e-6·x² - 0.0025·x + 1.7756
export function formatFit(coeffs: QuadraticCoeffs = DEFAULT_FIT): string;export function mmToPx(gaugeMM: number): number; // mm → 模型轨距 px(1/16 方块)
export function pxToMM(gaugePx: number): number; // 模型轨距 px → mm
export function mmToInch(gaugeMM: number): number; // mm → 英寸
export function inchToMM(gaugeInch: number): number; // 英寸 → mm
export function inchToPx(gaugeInch: number): number; // 英寸 → 模型轨距 px
export function pxToInch(gaugePx: number): number; // 模型轨距 px → 英寸← 返回中文接口文档