我想创建一个名为point的类,它可以计算给定坐标和电子表格大小的位置。如果电子表格的大小为3X3:
,以下是GetPosition方法预期的结果坐标(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
答案 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),}
};
}
}
}