近い方に丸める版
public class Program { public static void Main(string[] args) { var pos = new Position() { x = 122, y = 256 }; var fittedPos = FitToGrid(pos, 3); Console.WriteLine(pos); Console.WriteLine(fittedPos); Console.ReadKey(); } private static Position FitToGrid(Position sourcePosition, int gridPitch) { Position retPos; var diffPosX = sourcePosition.x % gridPitch; var diffPosY = sourcePosition.y % gridPitch; if ( gridPitch / 2 < diffPosX ) { retPos.x = sourcePosition.x + ( gridPitch - diffPosX ); } else { retPos.x = sourcePosition.x - diffPosX; } if ( gridPitch / 2 < diffPosY ) { retPos.y = sourcePosition.y + ( gridPitch - diffPosY ); } else { retPos.y = sourcePosition.y - diffPosY; } return retPos; } } public struct Position { public int x; public int y; public override string ToString() { return String.Format("座標:x={0}, y={1}", this.x, this.y); } }
実行結果
座標:x=122, y=256
座標:x=123, y=255