如何将位置映射到网格并返回?

时间:2018-04-12 15:52:07

标签: c# .net geometry

所以我有一个空格说int(从0到990)。我想将其中的所有字体映射到30个项目网格和后面。 This is我想出了。

set

Resuts似乎是正确的,但我不能只围绕那些addusing System; public class Program { public static int MapToGrid(int pos = 123) { var xfactor = 990 / 29; return pos / xfactor; } public static float MapToSpace(int idx = 10) { var xfactor = 990 / 30; return (float)(idx * xfactor) + xfactor * 0.5f; } public static void Main() { Console.WriteLine((990 / 30).ToString()); Console.WriteLine(MapToGrid(990).ToString()); Console.WriteLine(MapToGrid(0).ToString()); Console.WriteLine(MapToGrid(34).ToString()); Console.WriteLine(MapToSpace(1).ToString()); Console.WriteLine(MapToSpace(0).ToString()); Console.WriteLine(MapToSpace(29).ToString()); } } 魔术数字......任何人都可以解释如何将位置映射到网格并返回?

1 个答案:

答案 0 :(得分:1)

简单的高中代数。假设您有一个大小为W(例如= 990)和单元格数N(= 30)的网格:

  • MapToGrid返回坐标[0, N - 1]落入

    的单元格的索引(范围p

    规范化坐标p / W(范围[0, 1])给出,因此索引是此次数的最大索引(N - 1)。因此公式为index = p * (N - 1) / W,其中(N - 1) / W = 1 / xfactor

  • MapToSpace返回此单元格的中点

    W / N = xfactor是每个单元格的宽度。因此,单元格index的左边界由index * xfactor给出。添加0.5 * xfactor(即宽度的一半)以获得中点。