Skip to content

Instantly share code, notes, and snippets.

@monkekode
Created December 6, 2021 17:25
Show Gist options
  • Save monkekode/0e5acc2b98cb05cd2397adaca889c3c5 to your computer and use it in GitHub Desktop.
Save monkekode/0e5acc2b98cb05cd2397adaca889c3c5 to your computer and use it in GitHub Desktop.
export function windMouse(start: Coordinates, dest: Coordinates, G0: number = 9, W0: number = 3, M0: number = 15, D0: number = 12): Coordinates[] {
let startX = start.x;
let startY = start.y;
const destX = dest.x;
const destY = dest.y;
let currentX = startX
let currentY = startY
let vX = 0, vY = 0, Wx = 0, Wy = 0
const coordinates : Coordinates[] = [];
while (true) {
let dist = Math.hypot(destX - startX, destY - startY);
if (dist < 1) break;
let Wmag = Math.min(W0, dist);
if (dist >= D0) {
Wx = Wx / sqrt3 + (2 * Math.random() - 1) * Wmag / sqrt5;
Wy = Wy / sqrt3 + (2 * Math.random() - 1) * Wmag / sqrt5;
} else {
Wx /= sqrt3
Wy /= sqrt3
if (M0 < 3) {
M0 = Math.random() * 3 + 3;
} else {
M0 /= sqrt3
}
}
vX += Wx + G0 * (destX - startX) / dist
vY += Wy + G0 * (destY - startY) / dist
let vMag = Math.hypot(vX, vY);
if (vMag > M0) {
let vClip = M0 / 2 + Math.random() * M0 / 2;
vX = (vX / vMag) * vClip;
vY = (vY / vMag) * vClip;
}
startX += vX
startY += vY
let moveX = Math.round(startX)
let moveY = Math.round(startY)
if (currentX != moveX || moveY != currentY) {
currentX = moveX
currentY = moveY
coordinates.push({x: currentX, y: currentY});
}
}
return coordinates;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment