1import type { GridPoint } from "@/lib/shikaku/types.ts";23interface BoardRect {4 left: number;5 top: number;6 width: number;7 height: number;8}910interface PointerPosition {11 clientX: number;12 clientY: number;13}1415interface BoardDimensions {16 rows: number;17 cols: number;18}1920export function getGridPointFromBoardPosition(21 rect: BoardRect,22 pointer: PointerPosition,23 dimensions: BoardDimensions,24): GridPoint {25 const relativeX = clamp(pointer.clientX - rect.left, 0, rect.width - 1);26 const relativeY = clamp(pointer.clientY - rect.top, 0, rect.height - 1);2728 const col = Math.floor((relativeX / rect.width) * dimensions.cols);29 const row = Math.floor((relativeY / rect.height) * dimensions.rows);3031 return {32 row: clamp(row, 0, dimensions.rows - 1),33 col: clamp(col, 0, dimensions.cols - 1),34 };35}3637function clamp(value: number, min: number, max: number): number {38 return Math.min(Math.max(value, min), max);39}