UNPKG

@dromney/gear-gen

Version:

A set of types and pattern generators for working with front-end gears

96 lines (95 loc) 3.07 kB
import { Gear } from "../core/Gear.js"; const randomInRange = (min, max) => Math.floor(Math.random() * (max - min + 1) + min); export function RandomGearsDiagonalLeft() { const minPitch = 7; const maxPitch = 12; const pitch = randomInRange(minPitch, maxPitch); const minNumberofGears = 8; const maxNumberofGears = 30; const numberOfGears = randomInRange(minNumberofGears, maxNumberofGears); const minPressureAngle = 22; const maxPressureAngle = 32; const pressureAngle = randomInRange(minPressureAngle, maxPressureAngle); const minNumberOfTeeth = 8; const maxNumberOfTeeth = 20; const minJointAngle = -90; const maxJointAngle = 0; const gears = []; const firstGear = new Gear({ N: randomInRange(minNumberOfTeeth, maxNumberOfTeeth), P: pitch, PADeg: pressureAngle }); gears.push(firstGear); for (let i = 1; i <= numberOfGears; i++) { const gear = new Gear({ N: randomInRange(minNumberOfTeeth, maxNumberOfTeeth), parent: gears[i - 1], jointAngleDeg: randomInRange(minJointAngle, maxJointAngle) }); gears.push(gear); } return gears; } export function RandomSpiralGears(n) { const minPitch = 7; const maxPitch = 12; const pitch = randomInRange(minPitch, maxPitch); const minNumberOfTeeth = 8; const maxNumberOfTeeth = 15; const minPressureAngle = 22; const maxPressureAngle = 32; const pressureAngle = randomInRange(minPressureAngle, maxPressureAngle); const gears = []; const firstGear = new Gear({ N: randomInRange(minNumberOfTeeth, maxNumberOfTeeth), P: pitch, PADeg: pressureAngle }); gears.push(firstGear); let a = 0; for (let i = 1; i <= n; i++) { const gear = new Gear({ N: randomInRange(minNumberOfTeeth, maxNumberOfTeeth), parent: gears[i - 1], jointAngleDeg: a }); gears.push(gear); a -= 17; } return gears; } export function RandomBackAndForth(rasters) { const minPitch = 9; const maxPitch = 12; const pitch = randomInRange(minPitch, maxPitch); const minNumberOfTeeth = 8; const maxNumberOfTeeth = 10; const minPressureAngle = 24; const maxPressureAngle = 28; const pressureAngle = randomInRange(minPressureAngle, maxPressureAngle); const gears = []; const firstGear = new Gear({ N: randomInRange(minNumberOfTeeth, maxNumberOfTeeth), P: pitch, PADeg: pressureAngle }); gears.push(firstGear); const perRaster = 7; let a = 0; for (let i = 1; i <= perRaster * rasters; i++) { if (i % perRaster === 0) a = -90; else if (i % (2 * perRaster) < perRaster) a = -15; else a = -175; const gear = new Gear({ N: randomInRange(minNumberOfTeeth, maxNumberOfTeeth), parent: gears[i - 1], jointAngleDeg: a }); gears.push(gear); } return gears; }