使用x和y坐标来定位2d细胞

时间:2018-05-06 04:26:52

标签: c# algorithm

我想创建一个名为point的类,它可以计算给定坐标和电子表格大小的位置。如果电子表格的大小为3X3:

,以下是GetPosition方法预期的结果

enter image description here

  

坐标(0,0)表示0位置

     

坐标(0,1)表示1个位置

     

坐标(0,2)表示2位置

     

坐标(1,0)表示3个位置

     

坐标(1,1)表示4个位置

     

坐标(1,2)表示5个位置

     

坐标(2,0)表示6位

     

坐标(2,1)表示7位

     

坐标(2,2)表示8位

parse

3 个答案:

答案 0 :(得分:1)

公式为(x * columns) + y

(0,0) = (0 * 3) + 0 = 0
(0,1) = (0 * 3) + 1 = 1
(0,2) = (0 * 3) + 2 = 2
(1,0) = (1 * 3) + 0 = 3
(1,1) = (1 * 3) + 1 = 4
(1,2) = (1 * 3) + 2 = 5
(2,0) = (2 * 3) + 0 = 6
(2,1) = (2 * 3) + 1 = 7
(2,2) = (2 * 3) + 2 = 8

或者,如果观察模式,这些坐标与它们各自的数字之间存在关系:

您实际上是将数字从Base 3(列数)转换为Base 10:

例如,坐标(1,1)可以读为11但在 Base 3 中。如果将其转换为 Base 10 ,则会得到4.同样,当您将Base 3中的21转换为Base 10并获得7 ...等等时

然而,将数字转换为不同的数字并不是C#中内置的。因此,你可以使用上面的公式,除非你想要经历将数字转换为不同基数的麻烦。

答案 1 :(得分:0)

你遇到的第一个问题是你的示例屏幕截图中的X坐标有4个可能的值(0,1,2,3)因为有4行而你的Y坐标只有3个可能的值(0 ,1,2)因为只有3列,所以它应该是4x3,而不是3x4。我建议使用行和列而不是x和y,这样你就不会感到困惑。 修复后,对于任何给定为(row,col)的单元格,您可以使用以下公式获取位置:row * TotalNoOfColumns + col其中row和col是基于零的索引。

答案 2 :(得分:-3)

请尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<List<Point>> points = new List<List<Point>>() {
                new List<Point>() { new Point(0,0),new Point(0,1),new Point(0,2),},
                new List<Point>() { new Point(1,0),new Point(1,1),new Point(1,2),},
                new List<Point>() { new Point(2,0),new Point(2,1),new Point(2,2),},
                new List<Point>() { new Point(3,0),new Point(3,1),new Point(3,2),}
            };

        }
    }
}