所以我有一个空格说int(从0到990)。我想将其中的所有字体映射到30个项目网格和后面。 This is我想出了。
set
Resuts似乎是正确的,但我不能只围绕那些add
和using 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());
}
}
魔术数字......任何人都可以解释如何将位置映射到网格并返回?
答案 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
(即宽度的一半)以获得中点。