39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
// /var/www/makearmy.io/app/app/laser-toolkit/_lib/conversions.ts
|
|
|
|
// ---------- DPI / LPI / DPCM ----------
|
|
export function dpiToLpi(dpi: number) {
|
|
return dpi; // 1:1 if treating “lines” as rows in raster (common convention)
|
|
}
|
|
export function dpiToDpcm(dpi: number) {
|
|
return dpi / 2.54;
|
|
}
|
|
export function lpiToDpi(lpi: number) {
|
|
return lpi; // same note as above
|
|
}
|
|
export function lpiToDpcm(lpi: number) {
|
|
return lpi / 2.54;
|
|
}
|
|
export function dpcmToDpi(dpcm: number) {
|
|
return dpcm * 2.54;
|
|
}
|
|
export function dpcmToLpi(dpcm: number) {
|
|
return dpcm * 2.54;
|
|
}
|
|
|
|
// ---------- Power & Lens Scaler ----------
|
|
// Simple “keep energy density roughly constant” heuristic:
|
|
// newSpeed ≈ oldSpeed * (toPower / fromPower) * (fromField / toField)
|
|
export function scaleSpeed(
|
|
oldSpeed_mm_s: number,
|
|
fromPower_W: number,
|
|
toPower_W: number,
|
|
fromField_mm: number,
|
|
toField_mm: number
|
|
) {
|
|
if (fromPower_W <= 0 || toPower_W <= 0 || fromField_mm <= 0 || toField_mm <= 0) {
|
|
return oldSpeed_mm_s;
|
|
}
|
|
const k = (toPower_W / fromPower_W) * (fromField_mm / toField_mm);
|
|
return oldSpeed_mm_s * k;
|
|
}
|
|
|