formulab 0.1.11 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/CHANGELOG.md +107 -10
  2. package/README.md +181 -22
  3. package/dist/automotive/brakingDistance.d.ts +16 -0
  4. package/dist/automotive/brakingDistance.d.ts.map +1 -0
  5. package/dist/automotive/brakingDistance.js +47 -0
  6. package/dist/automotive/brakingDistance.js.map +1 -0
  7. package/dist/automotive/index.d.ts +2 -1
  8. package/dist/automotive/index.d.ts.map +1 -1
  9. package/dist/automotive/index.js +1 -0
  10. package/dist/automotive/index.js.map +1 -1
  11. package/dist/automotive/types.d.ts +16 -0
  12. package/dist/automotive/types.d.ts.map +1 -1
  13. package/dist/battery/batteryPackConfig.d.ts +10 -0
  14. package/dist/battery/batteryPackConfig.d.ts.map +1 -0
  15. package/dist/battery/batteryPackConfig.js +28 -0
  16. package/dist/battery/batteryPackConfig.js.map +1 -0
  17. package/dist/battery/bmsBalancing.d.ts +11 -0
  18. package/dist/battery/bmsBalancing.d.ts.map +1 -0
  19. package/dist/battery/bmsBalancing.js +47 -0
  20. package/dist/battery/bmsBalancing.js.map +1 -0
  21. package/dist/battery/cRate.d.ts +10 -0
  22. package/dist/battery/cRate.d.ts.map +1 -0
  23. package/dist/battery/cRate.js +29 -0
  24. package/dist/battery/cRate.js.map +1 -0
  25. package/dist/battery/chargingProfile.d.ts +11 -0
  26. package/dist/battery/chargingProfile.d.ts.map +1 -0
  27. package/dist/battery/chargingProfile.js +38 -0
  28. package/dist/battery/chargingProfile.js.map +1 -0
  29. package/dist/battery/cycleLife.d.ts +11 -0
  30. package/dist/battery/cycleLife.d.ts.map +1 -0
  31. package/dist/battery/cycleLife.js +70 -0
  32. package/dist/battery/cycleLife.js.map +1 -0
  33. package/dist/battery/energyDensity.d.ts +10 -0
  34. package/dist/battery/energyDensity.d.ts.map +1 -0
  35. package/dist/battery/energyDensity.js +20 -0
  36. package/dist/battery/energyDensity.js.map +1 -0
  37. package/dist/battery/index.d.ts +12 -0
  38. package/dist/battery/index.d.ts.map +1 -0
  39. package/dist/battery/index.js +12 -0
  40. package/dist/battery/index.js.map +1 -0
  41. package/dist/battery/internalResistance.d.ts +11 -0
  42. package/dist/battery/internalResistance.d.ts.map +1 -0
  43. package/dist/battery/internalResistance.js +18 -0
  44. package/dist/battery/internalResistance.js.map +1 -0
  45. package/dist/battery/selfDischarge.d.ts +10 -0
  46. package/dist/battery/selfDischarge.d.ts.map +1 -0
  47. package/dist/battery/selfDischarge.js +17 -0
  48. package/dist/battery/selfDischarge.js.map +1 -0
  49. package/dist/battery/stateOfHealth.d.ts +11 -0
  50. package/dist/battery/stateOfHealth.d.ts.map +1 -0
  51. package/dist/battery/stateOfHealth.js +33 -0
  52. package/dist/battery/stateOfHealth.js.map +1 -0
  53. package/dist/battery/thermalRunaway.d.ts +11 -0
  54. package/dist/battery/thermalRunaway.d.ts.map +1 -0
  55. package/dist/battery/thermalRunaway.js +28 -0
  56. package/dist/battery/thermalRunaway.js.map +1 -0
  57. package/dist/battery/types.d.ts +175 -0
  58. package/dist/battery/types.d.ts.map +1 -0
  59. package/dist/battery/types.js +5 -0
  60. package/dist/battery/types.js.map +1 -0
  61. package/dist/chemical/dilution.d.ts.map +1 -1
  62. package/dist/chemical/dilution.js +21 -24
  63. package/dist/chemical/dilution.js.map +1 -1
  64. package/dist/chemical/heatTransfer.d.ts +16 -0
  65. package/dist/chemical/heatTransfer.d.ts.map +1 -0
  66. package/dist/chemical/heatTransfer.js +85 -0
  67. package/dist/chemical/heatTransfer.js.map +1 -0
  68. package/dist/chemical/index.d.ts +3 -1
  69. package/dist/chemical/index.d.ts.map +1 -1
  70. package/dist/chemical/index.js +2 -0
  71. package/dist/chemical/index.js.map +1 -1
  72. package/dist/chemical/pipeFlow.d.ts +17 -0
  73. package/dist/chemical/pipeFlow.d.ts.map +1 -0
  74. package/dist/chemical/pipeFlow.js +112 -0
  75. package/dist/chemical/pipeFlow.js.map +1 -0
  76. package/dist/chemical/reactor.js +2 -2
  77. package/dist/chemical/reactor.js.map +1 -1
  78. package/dist/chemical/types.d.ts +82 -10
  79. package/dist/chemical/types.d.ts.map +1 -1
  80. package/dist/construction/index.d.ts +2 -1
  81. package/dist/construction/index.d.ts.map +1 -1
  82. package/dist/construction/index.js +1 -0
  83. package/dist/construction/index.js.map +1 -1
  84. package/dist/construction/momentOfInertia.d.ts +17 -0
  85. package/dist/construction/momentOfInertia.d.ts.map +1 -0
  86. package/dist/construction/momentOfInertia.js +204 -0
  87. package/dist/construction/momentOfInertia.js.map +1 -0
  88. package/dist/construction/pert.d.ts.map +1 -1
  89. package/dist/construction/pert.js +1 -17
  90. package/dist/construction/pert.js.map +1 -1
  91. package/dist/construction/types.d.ts +50 -0
  92. package/dist/construction/types.d.ts.map +1 -1
  93. package/dist/electronics/index.d.ts +2 -1
  94. package/dist/electronics/index.d.ts.map +1 -1
  95. package/dist/electronics/index.js +1 -0
  96. package/dist/electronics/index.js.map +1 -1
  97. package/dist/electronics/ohmsLaw.d.ts +12 -0
  98. package/dist/electronics/ohmsLaw.d.ts.map +1 -0
  99. package/dist/electronics/ohmsLaw.js +69 -0
  100. package/dist/electronics/ohmsLaw.js.map +1 -0
  101. package/dist/electronics/types.d.ts +24 -0
  102. package/dist/electronics/types.d.ts.map +1 -1
  103. package/dist/energy/carbonFootprint.d.ts.map +1 -1
  104. package/dist/energy/carbonFootprint.js +2 -1
  105. package/dist/energy/carbonFootprint.js.map +1 -1
  106. package/dist/energy/index.d.ts +2 -1
  107. package/dist/energy/index.d.ts.map +1 -1
  108. package/dist/energy/index.js +1 -0
  109. package/dist/energy/index.js.map +1 -1
  110. package/dist/energy/powerCost.d.ts.map +1 -1
  111. package/dist/energy/powerCost.js +2 -1
  112. package/dist/energy/powerCost.js.map +1 -1
  113. package/dist/energy/solarOutput.d.ts +14 -0
  114. package/dist/energy/solarOutput.d.ts.map +1 -0
  115. package/dist/energy/solarOutput.js +54 -0
  116. package/dist/energy/solarOutput.js.map +1 -0
  117. package/dist/energy/types.d.ts +20 -0
  118. package/dist/energy/types.d.ts.map +1 -1
  119. package/dist/environmental/emissionsIntensity.d.ts +11 -0
  120. package/dist/environmental/emissionsIntensity.d.ts.map +1 -0
  121. package/dist/environmental/emissionsIntensity.js +26 -0
  122. package/dist/environmental/emissionsIntensity.js.map +1 -0
  123. package/dist/environmental/energyIntensity.d.ts +11 -0
  124. package/dist/environmental/energyIntensity.d.ts.map +1 -0
  125. package/dist/environmental/energyIntensity.js +19 -0
  126. package/dist/environmental/energyIntensity.js.map +1 -0
  127. package/dist/environmental/esgSummary.d.ts +11 -0
  128. package/dist/environmental/esgSummary.d.ts.map +1 -0
  129. package/dist/environmental/esgSummary.js +39 -0
  130. package/dist/environmental/esgSummary.js.map +1 -0
  131. package/dist/environmental/gwpCalculator.d.ts +11 -0
  132. package/dist/environmental/gwpCalculator.d.ts.map +1 -0
  133. package/dist/environmental/gwpCalculator.js +31 -0
  134. package/dist/environmental/gwpCalculator.js.map +1 -0
  135. package/dist/environmental/index.d.ts +12 -0
  136. package/dist/environmental/index.d.ts.map +1 -0
  137. package/dist/environmental/index.js +12 -0
  138. package/dist/environmental/index.js.map +1 -0
  139. package/dist/environmental/productCarbonFootprint.d.ts +11 -0
  140. package/dist/environmental/productCarbonFootprint.d.ts.map +1 -0
  141. package/dist/environmental/productCarbonFootprint.js +29 -0
  142. package/dist/environmental/productCarbonFootprint.js.map +1 -0
  143. package/dist/environmental/scope1Emissions.d.ts +11 -0
  144. package/dist/environmental/scope1Emissions.d.ts.map +1 -0
  145. package/dist/environmental/scope1Emissions.js +35 -0
  146. package/dist/environmental/scope1Emissions.js.map +1 -0
  147. package/dist/environmental/scope2Emissions.d.ts +11 -0
  148. package/dist/environmental/scope2Emissions.d.ts.map +1 -0
  149. package/dist/environmental/scope2Emissions.js +49 -0
  150. package/dist/environmental/scope2Emissions.js.map +1 -0
  151. package/dist/environmental/scope3Emissions.d.ts +11 -0
  152. package/dist/environmental/scope3Emissions.d.ts.map +1 -0
  153. package/dist/environmental/scope3Emissions.js +36 -0
  154. package/dist/environmental/scope3Emissions.js.map +1 -0
  155. package/dist/environmental/types.d.ts +165 -0
  156. package/dist/environmental/types.d.ts.map +1 -0
  157. package/dist/environmental/types.js +5 -0
  158. package/dist/environmental/types.js.map +1 -0
  159. package/dist/environmental/vocEmissions.d.ts +11 -0
  160. package/dist/environmental/vocEmissions.d.ts.map +1 -0
  161. package/dist/environmental/vocEmissions.js +23 -0
  162. package/dist/environmental/vocEmissions.js.map +1 -0
  163. package/dist/environmental/waterFootprint.d.ts +11 -0
  164. package/dist/environmental/waterFootprint.d.ts.map +1 -0
  165. package/dist/environmental/waterFootprint.js +21 -0
  166. package/dist/environmental/waterFootprint.js.map +1 -0
  167. package/dist/index.d.ts +3 -0
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +3 -0
  170. package/dist/index.js.map +1 -1
  171. package/dist/logistics/cbm.d.ts +7 -2
  172. package/dist/logistics/cbm.d.ts.map +1 -1
  173. package/dist/logistics/cbm.js +7 -2
  174. package/dist/logistics/cbm.js.map +1 -1
  175. package/dist/logistics/fillRate.d.ts.map +1 -1
  176. package/dist/logistics/fillRate.js +1 -17
  177. package/dist/logistics/fillRate.js.map +1 -1
  178. package/dist/logistics/safetyStock.d.ts.map +1 -1
  179. package/dist/logistics/safetyStock.js +2 -55
  180. package/dist/logistics/safetyStock.js.map +1 -1
  181. package/dist/machining/boltCircle.d.ts +16 -0
  182. package/dist/machining/boltCircle.d.ts.map +1 -0
  183. package/dist/machining/boltCircle.js +36 -0
  184. package/dist/machining/boltCircle.js.map +1 -0
  185. package/dist/machining/boringBarDeflection.d.ts +17 -0
  186. package/dist/machining/boringBarDeflection.d.ts.map +1 -0
  187. package/dist/machining/boringBarDeflection.js +54 -0
  188. package/dist/machining/boringBarDeflection.js.map +1 -0
  189. package/dist/machining/cuspHeight.d.ts +15 -0
  190. package/dist/machining/cuspHeight.d.ts.map +1 -0
  191. package/dist/machining/cuspHeight.js +23 -0
  192. package/dist/machining/cuspHeight.js.map +1 -0
  193. package/dist/machining/cycleTimeEstimator.d.ts +18 -0
  194. package/dist/machining/cycleTimeEstimator.d.ts.map +1 -0
  195. package/dist/machining/cycleTimeEstimator.js +62 -0
  196. package/dist/machining/cycleTimeEstimator.js.map +1 -0
  197. package/dist/machining/effectiveDiameter.d.ts +17 -0
  198. package/dist/machining/effectiveDiameter.d.ts.map +1 -0
  199. package/dist/machining/effectiveDiameter.js +24 -0
  200. package/dist/machining/effectiveDiameter.js.map +1 -0
  201. package/dist/machining/gaugeBlockStack.d.ts +16 -0
  202. package/dist/machining/gaugeBlockStack.d.ts.map +1 -0
  203. package/dist/machining/gaugeBlockStack.js +138 -0
  204. package/dist/machining/gaugeBlockStack.js.map +1 -0
  205. package/dist/machining/index.d.ts +14 -0
  206. package/dist/machining/index.d.ts.map +1 -0
  207. package/dist/machining/index.js +14 -0
  208. package/dist/machining/index.js.map +1 -0
  209. package/dist/machining/radialChipThinning.d.ts +18 -0
  210. package/dist/machining/radialChipThinning.d.ts.map +1 -0
  211. package/dist/machining/radialChipThinning.js +30 -0
  212. package/dist/machining/radialChipThinning.js.map +1 -0
  213. package/dist/machining/sineBarHeight.d.ts +16 -0
  214. package/dist/machining/sineBarHeight.d.ts.map +1 -0
  215. package/dist/machining/sineBarHeight.js +32 -0
  216. package/dist/machining/sineBarHeight.js.map +1 -0
  217. package/dist/machining/threadOverWires.d.ts +21 -0
  218. package/dist/machining/threadOverWires.d.ts.map +1 -0
  219. package/dist/machining/threadOverWires.js +54 -0
  220. package/dist/machining/threadOverWires.js.map +1 -0
  221. package/dist/machining/toolDeflection.d.ts +16 -0
  222. package/dist/machining/toolDeflection.d.ts.map +1 -0
  223. package/dist/machining/toolDeflection.js +36 -0
  224. package/dist/machining/toolDeflection.js.map +1 -0
  225. package/dist/machining/triangleSolver.d.ts +21 -0
  226. package/dist/machining/triangleSolver.d.ts.map +1 -0
  227. package/dist/machining/triangleSolver.js +120 -0
  228. package/dist/machining/triangleSolver.js.map +1 -0
  229. package/dist/machining/truePosition.d.ts +19 -0
  230. package/dist/machining/truePosition.d.ts.map +1 -0
  231. package/dist/machining/truePosition.js +44 -0
  232. package/dist/machining/truePosition.js.map +1 -0
  233. package/dist/machining/types.d.ts +201 -0
  234. package/dist/machining/types.d.ts.map +1 -0
  235. package/dist/machining/types.js +2 -0
  236. package/dist/machining/types.js.map +1 -0
  237. package/dist/math.d.ts +26 -0
  238. package/dist/math.d.ts.map +1 -0
  239. package/dist/math.js +95 -0
  240. package/dist/math.js.map +1 -0
  241. package/dist/metal/bendAllowance.d.ts.map +1 -1
  242. package/dist/metal/bendAllowance.js +2 -1
  243. package/dist/metal/bendAllowance.js.map +1 -1
  244. package/dist/metal/bolt.d.ts.map +1 -1
  245. package/dist/metal/bolt.js +3 -3
  246. package/dist/metal/bolt.js.map +1 -1
  247. package/dist/metal/flangeSpec.d.ts +10 -0
  248. package/dist/metal/flangeSpec.d.ts.map +1 -0
  249. package/dist/metal/flangeSpec.js +81 -0
  250. package/dist/metal/flangeSpec.js.map +1 -0
  251. package/dist/metal/index.d.ts +4 -1
  252. package/dist/metal/index.d.ts.map +1 -1
  253. package/dist/metal/index.js +3 -0
  254. package/dist/metal/index.js.map +1 -1
  255. package/dist/metal/materialGradeConverter.d.ts +10 -0
  256. package/dist/metal/materialGradeConverter.d.ts.map +1 -0
  257. package/dist/metal/materialGradeConverter.js +78 -0
  258. package/dist/metal/materialGradeConverter.js.map +1 -0
  259. package/dist/metal/metalWeight.d.ts +13 -3
  260. package/dist/metal/metalWeight.d.ts.map +1 -1
  261. package/dist/metal/metalWeight.js +24 -35
  262. package/dist/metal/metalWeight.js.map +1 -1
  263. package/dist/metal/pipeSpec.d.ts +10 -0
  264. package/dist/metal/pipeSpec.d.ts.map +1 -0
  265. package/dist/metal/pipeSpec.js +96 -0
  266. package/dist/metal/pipeSpec.js.map +1 -0
  267. package/dist/metal/roughness.js +1 -1
  268. package/dist/metal/roughness.js.map +1 -1
  269. package/dist/metal/types.d.ts +86 -13
  270. package/dist/metal/types.d.ts.map +1 -1
  271. package/dist/metal/weldHeat.js +1 -1
  272. package/dist/metal/weldHeat.js.map +1 -1
  273. package/dist/metal/welding.d.ts.map +1 -1
  274. package/dist/metal/welding.js +3 -2
  275. package/dist/metal/welding.js.map +1 -1
  276. package/dist/quality/controlChart.d.ts +26 -0
  277. package/dist/quality/controlChart.d.ts.map +1 -0
  278. package/dist/quality/controlChart.js +216 -0
  279. package/dist/quality/controlChart.js.map +1 -0
  280. package/dist/quality/cpk.d.ts +16 -4
  281. package/dist/quality/cpk.d.ts.map +1 -1
  282. package/dist/quality/cpk.js +16 -4
  283. package/dist/quality/cpk.js.map +1 -1
  284. package/dist/quality/dpmo.d.ts.map +1 -1
  285. package/dist/quality/dpmo.js +1 -61
  286. package/dist/quality/dpmo.js.map +1 -1
  287. package/dist/quality/index.d.ts +2 -1
  288. package/dist/quality/index.d.ts.map +1 -1
  289. package/dist/quality/index.js +1 -0
  290. package/dist/quality/index.js.map +1 -1
  291. package/dist/quality/oee.d.ts +12 -1
  292. package/dist/quality/oee.d.ts.map +1 -1
  293. package/dist/quality/oee.js +21 -9
  294. package/dist/quality/oee.js.map +1 -1
  295. package/dist/quality/ppk.d.ts.map +1 -1
  296. package/dist/quality/ppk.js +1 -16
  297. package/dist/quality/ppk.js.map +1 -1
  298. package/dist/quality/ppm.d.ts.map +1 -1
  299. package/dist/quality/ppm.js +1 -80
  300. package/dist/quality/ppm.js.map +1 -1
  301. package/dist/quality/types.d.ts +31 -0
  302. package/dist/quality/types.d.ts.map +1 -1
  303. package/dist/safety/fallClearance.d.ts.map +1 -1
  304. package/dist/safety/fallClearance.js +5 -4
  305. package/dist/safety/fallClearance.js.map +1 -1
  306. package/dist/safety/index.d.ts +2 -1
  307. package/dist/safety/index.d.ts.map +1 -1
  308. package/dist/safety/index.js +1 -0
  309. package/dist/safety/index.js.map +1 -1
  310. package/dist/safety/nioshLifting.d.ts +19 -10
  311. package/dist/safety/nioshLifting.d.ts.map +1 -1
  312. package/dist/safety/nioshLifting.js +19 -10
  313. package/dist/safety/nioshLifting.js.map +1 -1
  314. package/dist/safety/types.d.ts +19 -0
  315. package/dist/safety/types.d.ts.map +1 -1
  316. package/dist/safety/ventilationRate.d.ts +12 -0
  317. package/dist/safety/ventilationRate.d.ts.map +1 -0
  318. package/dist/safety/ventilationRate.js +71 -0
  319. package/dist/safety/ventilationRate.js.map +1 -0
  320. package/dist/utility/index.d.ts +1 -1
  321. package/dist/utility/index.d.ts.map +1 -1
  322. package/dist/utility/types.d.ts +0 -16
  323. package/dist/utility/types.d.ts.map +1 -1
  324. package/dist/utils.d.ts +3 -2
  325. package/dist/utils.d.ts.map +1 -1
  326. package/dist/utils.js +6 -4
  327. package/dist/utils.js.map +1 -1
  328. package/package.json +34 -3
  329. package/dist/utility/qrcode.d.ts +0 -30
  330. package/dist/utility/qrcode.d.ts.map +0 -1
  331. package/dist/utility/qrcode.js +0 -30
  332. package/dist/utility/qrcode.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ import type { RadialChipThinningInput, RadialChipThinningResult } from './types.js';
2
+ /**
3
+ * Calculate adjusted feed per tooth to compensate for radial chip thinning.
4
+ *
5
+ * When ae < D/2, the actual chip thickness is less than the programmed fz.
6
+ * This function computes the adjusted (higher) fz needed to maintain the target chip load.
7
+ *
8
+ * @formula
9
+ * chipThinningFactor = D / (2 × √(ae × (D − ae)))
10
+ * adjustedFz = fz_target × chipThinningFactor
11
+ *
12
+ * @reference Harvey Tool — Radial Chip Thinning guide.
13
+ *
14
+ * @param input - Chip thinning parameters
15
+ * @returns RadialChipThinningResult with adjusted feed and thinning factor
16
+ */
17
+ export declare function radialChipThinning(input: RadialChipThinningInput): RadialChipThinningResult;
18
+ //# sourceMappingURL=radialChipThinning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radialChipThinning.d.ts","sourceRoot":"","sources":["../../src/machining/radialChipThinning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAe3F"}
@@ -0,0 +1,30 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate adjusted feed per tooth to compensate for radial chip thinning.
4
+ *
5
+ * When ae < D/2, the actual chip thickness is less than the programmed fz.
6
+ * This function computes the adjusted (higher) fz needed to maintain the target chip load.
7
+ *
8
+ * @formula
9
+ * chipThinningFactor = D / (2 × √(ae × (D − ae)))
10
+ * adjustedFz = fz_target × chipThinningFactor
11
+ *
12
+ * @reference Harvey Tool — Radial Chip Thinning guide.
13
+ *
14
+ * @param input - Chip thinning parameters
15
+ * @returns RadialChipThinningResult with adjusted feed and thinning factor
16
+ */
17
+ export function radialChipThinning(input) {
18
+ const { toolDiameter, radialDepthOfCut, chipLoadTarget } = input;
19
+ const D = toolDiameter;
20
+ const ae = radialDepthOfCut;
21
+ // Factor = D / (2 × √(ae × (D - ae)))
22
+ const factor = D / (2 * Math.sqrt(ae * (D - ae)));
23
+ const adjustedFz = chipLoadTarget * factor;
24
+ return {
25
+ adjustedFeedPerTooth: roundTo(adjustedFz, 4),
26
+ chipThinningFactor: roundTo(factor, 4),
27
+ effectiveChipLoad: roundTo(chipLoadTarget, 4),
28
+ };
29
+ }
30
+ //# sourceMappingURL=radialChipThinning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radialChipThinning.js","sourceRoot":"","sources":["../../src/machining/radialChipThinning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEjE,MAAM,CAAC,GAAG,YAAY,CAAC;IACvB,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAE5B,sCAAsC;IACtC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,CAAC;IAE3C,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5C,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { SineBarHeightInput, SineBarHeightResult } from './types.js';
2
+ /**
3
+ * Calculate the gauge block height for a sine bar setup.
4
+ *
5
+ * @formula
6
+ * H = L × sin(θ)
7
+ * actualAngle = arcsin(roundedH / L)
8
+ * error = actualAngle − θ
9
+ *
10
+ * @reference Oberg, E. et al. "Machinery's Handbook", 31st Ed. — Sine Bar section.
11
+ *
12
+ * @param input - Sine bar parameters
13
+ * @returns SineBarHeightResult with exact and optionally rounded height
14
+ */
15
+ export declare function sineBarHeight(input: SineBarHeightInput): SineBarHeightResult;
16
+ //# sourceMappingURL=sineBarHeight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sineBarHeight.d.ts","sourceRoot":"","sources":["../../src/machining/sineBarHeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CAqB5E"}
@@ -0,0 +1,32 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate the gauge block height for a sine bar setup.
4
+ *
5
+ * @formula
6
+ * H = L × sin(θ)
7
+ * actualAngle = arcsin(roundedH / L)
8
+ * error = actualAngle − θ
9
+ *
10
+ * @reference Oberg, E. et al. "Machinery's Handbook", 31st Ed. — Sine Bar section.
11
+ *
12
+ * @param input - Sine bar parameters
13
+ * @returns SineBarHeightResult with exact and optionally rounded height
14
+ */
15
+ export function sineBarHeight(input) {
16
+ const { angle, sineBarLength, roundToBlock } = input;
17
+ const angleRad = (angle * Math.PI) / 180;
18
+ const height = sineBarLength * Math.sin(angleRad);
19
+ const result = {
20
+ height: roundTo(height, 4),
21
+ };
22
+ if (roundToBlock !== undefined && roundToBlock > 0) {
23
+ const rounded = Math.round(height / roundToBlock) * roundToBlock;
24
+ result.roundedHeight = roundTo(rounded, 4);
25
+ const actualAngleRad = Math.asin(rounded / sineBarLength);
26
+ const actualAngleDeg = (actualAngleRad * 180) / Math.PI;
27
+ result.actualAngle = roundTo(actualAngleDeg, 6);
28
+ result.angleError = roundTo(actualAngleDeg - angle, 6);
29
+ }
30
+ return result;
31
+ }
32
+ //# sourceMappingURL=sineBarHeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sineBarHeight.js","sourceRoot":"","sources":["../../src/machining/sineBarHeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAErD,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACzC,MAAM,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,MAAM,GAAwB;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;KAC3B,CAAC;IAEF,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC;QACjE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,cAAc,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ThreadOverWiresInput, ThreadOverWiresResult } from './types.js';
2
+ /**
3
+ * Calculate thread measurement over wires (3-wire method).
4
+ *
5
+ * @formula (for 60° thread angle — metric/unified):
6
+ * bestWire = P / √3 ≈ 0.57735 × P
7
+ * d₂ = d − 0.6495 × P (pitch diameter for 60°)
8
+ * M = d₂ + 3W − 1.5155 × P
9
+ *
10
+ * General formula:
11
+ * bestWire = P / (2 × cos(α/2))
12
+ * For 55° (Whitworth): bestWire = P / (2 × cos(27.5°))
13
+ * For 29° (Acme): bestWire = P / (2 × cos(14.5°))
14
+ *
15
+ * @reference Oberg, E. et al. "Machinery's Handbook", 31st Ed. — Thread measurement.
16
+ *
17
+ * @param input - Thread over wires parameters
18
+ * @returns ThreadOverWiresResult with measurement, best wire, and pitch diameter
19
+ */
20
+ export declare function threadOverWires(input: ThreadOverWiresInput): ThreadOverWiresResult;
21
+ //# sourceMappingURL=threadOverWires.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threadOverWires.d.ts","sourceRoot":"","sources":["../../src/machining/threadOverWires.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAmClF"}
@@ -0,0 +1,54 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate thread measurement over wires (3-wire method).
4
+ *
5
+ * @formula (for 60° thread angle — metric/unified):
6
+ * bestWire = P / √3 ≈ 0.57735 × P
7
+ * d₂ = d − 0.6495 × P (pitch diameter for 60°)
8
+ * M = d₂ + 3W − 1.5155 × P
9
+ *
10
+ * General formula:
11
+ * bestWire = P / (2 × cos(α/2))
12
+ * For 55° (Whitworth): bestWire = P / (2 × cos(27.5°))
13
+ * For 29° (Acme): bestWire = P / (2 × cos(14.5°))
14
+ *
15
+ * @reference Oberg, E. et al. "Machinery's Handbook", 31st Ed. — Thread measurement.
16
+ *
17
+ * @param input - Thread over wires parameters
18
+ * @returns ThreadOverWiresResult with measurement, best wire, and pitch diameter
19
+ */
20
+ export function threadOverWires(input) {
21
+ const { majorDiameter, pitch, threadAngle = 60 } = input;
22
+ const halfAngleRad = ((threadAngle / 2) * Math.PI) / 180;
23
+ const cosHalfAngle = Math.cos(halfAngleRad);
24
+ // Best wire size
25
+ const bestWire = pitch / (2 * cosHalfAngle);
26
+ const wireSize = input.wireSize ?? bestWire;
27
+ // Pitch diameter
28
+ let pitchDiameter;
29
+ if (threadAngle === 60) {
30
+ pitchDiameter = majorDiameter - 0.6495 * pitch;
31
+ }
32
+ else if (threadAngle === 55) {
33
+ pitchDiameter = majorDiameter - 0.6403 * pitch;
34
+ }
35
+ else if (threadAngle === 29) {
36
+ pitchDiameter = majorDiameter - 0.5 * pitch;
37
+ }
38
+ else {
39
+ // 30° (trapezoidal)
40
+ pitchDiameter = majorDiameter - 0.5 * pitch;
41
+ }
42
+ // Measurement over wires (M)
43
+ // General: M = d₂ + W × (1 + 1/sin(α/2)) - P × cot(α/2) / 2
44
+ // For 60°: M = d₂ + 3W - 1.5155P
45
+ const sinHalfAngle = Math.sin(halfAngleRad);
46
+ const M = pitchDiameter + wireSize * (1 + 1 / sinHalfAngle) - (pitch * cosHalfAngle) / (2 * sinHalfAngle);
47
+ return {
48
+ measurementOverWires: roundTo(M, 4),
49
+ bestWireSize: roundTo(bestWire, 4),
50
+ pitchDiameter: roundTo(pitchDiameter, 4),
51
+ wireSize: roundTo(wireSize, 4),
52
+ };
53
+ }
54
+ //# sourceMappingURL=threadOverWires.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threadOverWires.js","sourceRoot":"","sources":["../../src/machining/threadOverWires.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IAEzD,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE5C,iBAAiB;IACjB,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAE5C,iBAAiB;IACjB,IAAI,aAAqB,CAAC;IAC1B,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;QACvB,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;IACjD,CAAC;SAAM,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;QAC9B,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;IACjD,CAAC;SAAM,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;QAC9B,aAAa,GAAG,aAAa,GAAG,GAAG,GAAG,KAAK,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,aAAa,GAAG,aAAa,GAAG,GAAG,GAAG,KAAK,CAAC;IAC9C,CAAC;IAED,6BAA6B;IAC7B,4DAA4D;IAC5D,iCAAiC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IAE1G,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ToolDeflectionInput, ToolDeflectionResult } from './types.js';
2
+ /**
3
+ * Calculate end mill deflection using cantilever beam theory.
4
+ *
5
+ * @formula
6
+ * I = π × d⁴ / 64
7
+ * δ = F × L³ / (3 × E × I)
8
+ * k = F / δ
9
+ *
10
+ * @reference Oberg, E. et al. "Machinery's Handbook", 31st Ed. — Beam deflection.
11
+ *
12
+ * @param input - Tool deflection parameters
13
+ * @returns ToolDeflectionResult with deflection, inertia, and stiffness
14
+ */
15
+ export declare function toolDeflection(input: ToolDeflectionInput): ToolDeflectionResult;
16
+ //# sourceMappingURL=toolDeflection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolDeflection.d.ts","sourceRoot":"","sources":["../../src/machining/toolDeflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAC;AAU1F;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAgB/E"}
@@ -0,0 +1,36 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Young's modulus for common tool materials (GPa)
4
+ */
5
+ const TOOL_MODULUS = {
6
+ carbide: 550,
7
+ hss: 200,
8
+ };
9
+ /**
10
+ * Calculate end mill deflection using cantilever beam theory.
11
+ *
12
+ * @formula
13
+ * I = π × d⁴ / 64
14
+ * δ = F × L³ / (3 × E × I)
15
+ * k = F / δ
16
+ *
17
+ * @reference Oberg, E. et al. "Machinery's Handbook", 31st Ed. — Beam deflection.
18
+ *
19
+ * @param input - Tool deflection parameters
20
+ * @returns ToolDeflectionResult with deflection, inertia, and stiffness
21
+ */
22
+ export function toolDeflection(input) {
23
+ const { toolDiameter, stickout, cuttingForce, material = 'carbide' } = input;
24
+ const E = input.youngsModulus ?? TOOL_MODULUS[material];
25
+ const E_MPa = E * 1000; // GPa → MPa (N/mm²)
26
+ const I = (Math.PI * Math.pow(toolDiameter, 4)) / 64;
27
+ const delta = (cuttingForce * Math.pow(stickout, 3)) / (3 * E_MPa * I);
28
+ const stiffness = delta > 0 ? cuttingForce / delta : Infinity;
29
+ return {
30
+ deflection: roundTo(delta, 6),
31
+ momentOfInertia: roundTo(I, 4),
32
+ stiffness: roundTo(stiffness, 2),
33
+ youngsModulus: E,
34
+ };
35
+ }
36
+ //# sourceMappingURL=toolDeflection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolDeflection.js","sourceRoot":"","sources":["../../src/machining/toolDeflection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,MAAM,YAAY,GAAiC;IACjD,OAAO,EAAE,GAAG;IACZ,GAAG,EAAE,GAAG;CACT,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7E,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,oBAAoB;IAE5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE9D,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { TriangleSolverInput, TriangleSolverResult } from './types.js';
2
+ /**
3
+ * Solve a triangle given at least 3 known values (sides/angles).
4
+ *
5
+ * Supported cases:
6
+ * - SSS: three sides → law of cosines
7
+ * - SAS: two sides + included angle → law of cosines
8
+ * - ASA/AAS: two angles + one side → law of sines
9
+ * - SSA: two sides + non-included angle → law of sines (ambiguous case)
10
+ *
11
+ * @formula
12
+ * Law of cosines: c² = a² + b² − 2ab·cos(C)
13
+ * Law of sines: a/sin(A) = b/sin(B) = c/sin(C)
14
+ * Area (Heron): √(s(s−a)(s−b)(s−c)), s = (a+b+c)/2
15
+ *
16
+ * @param input - Triangle sides and/or angles (degrees)
17
+ * @returns TriangleSolverResult with all sides, angles, area, and perimeter
18
+ * @throws Error if insufficient or invalid input
19
+ */
20
+ export declare function triangleSolver(input: TriangleSolverInput): TriangleSolverResult;
21
+ //# sourceMappingURL=triangleSolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triangleSolver.d.ts","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK5E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA2F/E"}
@@ -0,0 +1,120 @@
1
+ import { roundTo } from '../utils.js';
2
+ const DEG = Math.PI / 180;
3
+ const RAD = 180 / Math.PI;
4
+ /**
5
+ * Solve a triangle given at least 3 known values (sides/angles).
6
+ *
7
+ * Supported cases:
8
+ * - SSS: three sides → law of cosines
9
+ * - SAS: two sides + included angle → law of cosines
10
+ * - ASA/AAS: two angles + one side → law of sines
11
+ * - SSA: two sides + non-included angle → law of sines (ambiguous case)
12
+ *
13
+ * @formula
14
+ * Law of cosines: c² = a² + b² − 2ab·cos(C)
15
+ * Law of sines: a/sin(A) = b/sin(B) = c/sin(C)
16
+ * Area (Heron): √(s(s−a)(s−b)(s−c)), s = (a+b+c)/2
17
+ *
18
+ * @param input - Triangle sides and/or angles (degrees)
19
+ * @returns TriangleSolverResult with all sides, angles, area, and perimeter
20
+ * @throws Error if insufficient or invalid input
21
+ */
22
+ export function triangleSolver(input) {
23
+ let { a, b, c, A, B, C } = input;
24
+ // Count known values
25
+ const knownSides = [a, b, c].filter(v => v !== undefined).length;
26
+ const knownAngles = [A, B, C].filter(v => v !== undefined).length;
27
+ // If two angles known, compute the third
28
+ if (knownAngles === 2) {
29
+ if (A === undefined)
30
+ A = 180 - B - C;
31
+ else if (B === undefined)
32
+ B = 180 - A - C;
33
+ else if (C === undefined)
34
+ C = 180 - A - B;
35
+ }
36
+ // SSS: three sides known
37
+ if (knownSides === 3 && a !== undefined && b !== undefined && c !== undefined) {
38
+ A = Math.acos((b * b + c * c - a * a) / (2 * b * c)) * RAD;
39
+ B = Math.acos((a * a + c * c - b * b) / (2 * a * c)) * RAD;
40
+ C = 180 - A - B;
41
+ }
42
+ // SAS: two sides + included angle
43
+ else if (knownSides === 2 && knownAngles >= 1) {
44
+ if (a !== undefined && b !== undefined && C !== undefined) {
45
+ c = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(C * DEG));
46
+ A = Math.asin((a * Math.sin(C * DEG)) / c) * RAD;
47
+ B = 180 - A - C;
48
+ }
49
+ else if (a !== undefined && c !== undefined && B !== undefined) {
50
+ b = Math.sqrt(a * a + c * c - 2 * a * c * Math.cos(B * DEG));
51
+ A = Math.asin((a * Math.sin(B * DEG)) / b) * RAD;
52
+ C = 180 - A - B;
53
+ }
54
+ else if (b !== undefined && c !== undefined && A !== undefined) {
55
+ a = Math.sqrt(b * b + c * c - 2 * b * c * Math.cos(A * DEG));
56
+ B = Math.asin((b * Math.sin(A * DEG)) / a) * RAD;
57
+ C = 180 - A - B;
58
+ }
59
+ // SSA (ambiguous): two sides + non-included angle
60
+ else if (a !== undefined && b !== undefined && A !== undefined) {
61
+ const sinB = (b * Math.sin(A * DEG)) / a;
62
+ if (sinB > 1)
63
+ throw new Error('No valid triangle exists');
64
+ B = Math.asin(sinB) * RAD;
65
+ C = 180 - A - B;
66
+ c = (a * Math.sin(C * DEG)) / Math.sin(A * DEG);
67
+ }
68
+ else if (a !== undefined && c !== undefined && A !== undefined) {
69
+ const sinC = (c * Math.sin(A * DEG)) / a;
70
+ if (sinC > 1)
71
+ throw new Error('No valid triangle exists');
72
+ C = Math.asin(sinC) * RAD;
73
+ B = 180 - A - C;
74
+ b = (a * Math.sin(B * DEG)) / Math.sin(A * DEG);
75
+ }
76
+ else if (b !== undefined && c !== undefined && B !== undefined) {
77
+ const sinC = (c * Math.sin(B * DEG)) / b;
78
+ if (sinC > 1)
79
+ throw new Error('No valid triangle exists');
80
+ C = Math.asin(sinC) * RAD;
81
+ A = 180 - B - C;
82
+ a = (b * Math.sin(A * DEG)) / Math.sin(B * DEG);
83
+ }
84
+ }
85
+ // ASA/AAS: two angles + one side (third angle already computed above)
86
+ else if (knownSides === 1 && knownAngles >= 2) {
87
+ if (A !== undefined && B !== undefined && C !== undefined) {
88
+ if (a !== undefined) {
89
+ b = (a * Math.sin(B * DEG)) / Math.sin(A * DEG);
90
+ c = (a * Math.sin(C * DEG)) / Math.sin(A * DEG);
91
+ }
92
+ else if (b !== undefined) {
93
+ a = (b * Math.sin(A * DEG)) / Math.sin(B * DEG);
94
+ c = (b * Math.sin(C * DEG)) / Math.sin(B * DEG);
95
+ }
96
+ else if (c !== undefined) {
97
+ a = (c * Math.sin(A * DEG)) / Math.sin(C * DEG);
98
+ b = (c * Math.sin(B * DEG)) / Math.sin(C * DEG);
99
+ }
100
+ }
101
+ }
102
+ if (a === undefined || b === undefined || c === undefined ||
103
+ A === undefined || B === undefined || C === undefined) {
104
+ throw new Error('Insufficient data to solve triangle');
105
+ }
106
+ // Heron's formula for area
107
+ const s = (a + b + c) / 2;
108
+ const area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
109
+ return {
110
+ a: roundTo(a, 4),
111
+ b: roundTo(b, 4),
112
+ c: roundTo(c, 4),
113
+ A: roundTo(A, 4),
114
+ B: roundTo(B, 4),
115
+ C: roundTo(C, 4),
116
+ area: roundTo(area, 4),
117
+ perimeter: roundTo(a + b + c, 4),
118
+ };
119
+ }
120
+ //# sourceMappingURL=triangleSolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triangleSolver.js","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { TruePositionInput, TruePositionResult } from './types.js';
2
+ /**
3
+ * Calculate GD&T True Position (diametral method).
4
+ *
5
+ * @formula
6
+ * Δx = actualX − nominalX
7
+ * Δy = actualY − nominalY
8
+ * radial = √(Δx² + Δy²)
9
+ * TP = 2 × radial
10
+ * MMC bonus = featureSize − mmcSize (when feature is larger than MMC)
11
+ * effectiveTol = tolerance + bonus
12
+ *
13
+ * @reference ASME Y14.5-2018 — Positional tolerance.
14
+ *
15
+ * @param input - True position parameters
16
+ * @returns TruePositionResult with TP value and optional tolerance evaluation
17
+ */
18
+ export declare function truePosition(input: TruePositionInput): TruePositionResult;
19
+ //# sourceMappingURL=truePosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truePosition.d.ts","sourceRoot":"","sources":["../../src/machining/truePosition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA6BzE"}
@@ -0,0 +1,44 @@
1
+ import { roundTo } from '../utils.js';
2
+ /**
3
+ * Calculate GD&T True Position (diametral method).
4
+ *
5
+ * @formula
6
+ * Δx = actualX − nominalX
7
+ * Δy = actualY − nominalY
8
+ * radial = √(Δx² + Δy²)
9
+ * TP = 2 × radial
10
+ * MMC bonus = featureSize − mmcSize (when feature is larger than MMC)
11
+ * effectiveTol = tolerance + bonus
12
+ *
13
+ * @reference ASME Y14.5-2018 — Positional tolerance.
14
+ *
15
+ * @param input - True position parameters
16
+ * @returns TruePositionResult with TP value and optional tolerance evaluation
17
+ */
18
+ export function truePosition(input) {
19
+ const { actualX, actualY, nominalX, nominalY, tolerance, featureSize, mmcSize } = input;
20
+ const dx = actualX - nominalX;
21
+ const dy = actualY - nominalY;
22
+ const radial = Math.sqrt(dx * dx + dy * dy);
23
+ const tp = 2 * radial;
24
+ const result = {
25
+ truePosition: roundTo(tp, 4),
26
+ deviationX: roundTo(dx, 4),
27
+ deviationY: roundTo(dy, 4),
28
+ radialDeviation: roundTo(radial, 4),
29
+ };
30
+ if (featureSize !== undefined && mmcSize !== undefined) {
31
+ const bonus = Math.max(0, featureSize - mmcSize);
32
+ result.mmcBonus = roundTo(bonus, 4);
33
+ if (tolerance !== undefined) {
34
+ const effectiveTol = tolerance + bonus;
35
+ result.effectiveTolerance = roundTo(effectiveTol, 4);
36
+ result.inTolerance = tp <= effectiveTol;
37
+ }
38
+ }
39
+ else if (tolerance !== undefined) {
40
+ result.inTolerance = tp <= tolerance;
41
+ }
42
+ return result;
43
+ }
44
+ //# sourceMappingURL=truePosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truePosition.js","sourceRoot":"","sources":["../../src/machining/truePosition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAExF,MAAM,EAAE,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IAEtB,MAAM,MAAM,GAAuB;QACjC,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;KACpC,CAAC;IAEF,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,GAAG,EAAE,IAAI,YAAY,CAAC;QAC1C,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,WAAW,GAAG,EAAE,IAAI,SAAS,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}