C# 如何将位置映射到栅格并返回?

C# 如何将位置映射到栅格并返回?,c#,.net,geometry,C#,.net,Geometry,所以我有一个空间,比如int(从0到990)。我想把所有的桥都映射到30个项目的网格上。我想出的那个 using System; public class Program { public static int MapToGrid(int pos = 123) { var xfactor = 990 / 29; return pos / xfactor; } public static float MapToSpace(int

所以我有一个空间,比如int(从0到990)。我想把所有的桥都映射到30个项目的网格上。我想出的那个

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());
    }
}

结果似乎是正确的,但我不能只是把我的头绕在
29
30
神奇的数字上。。。有人能解释一下如何将位置映射到网格和网格吗?

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

  • MapToGrid
    返回坐标
    p
    所属单元格的索引(范围
    [0,N-1]

    标准化坐标由
    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
    (即宽度的一半)以获得中点


我不确定您所说的“我想将其中的所有桥映射到30项网格并返回”是什么意思。如果您不理解这些数字,您是如何得出这些数字的?它们感觉很合适-数组从0开始到29,共有30个项目。这就是我得到29分和30分的地方,但我真的不明白为什么这一切都很好。。。感觉更像是整体编程。。。