选择从2d数组中的点传递的对角线

时间:2015-04-10 15:44:27

标签: c# matrix windows-runtime diagonal

我有一个网格,其中项目放在行和列中,但这不是我们必须关心的,因为每个元素绑定XY属性所以我们只需匹配元素在List中使用右坐标。

当用户单击网格中的单元格时,形成teo对角线并穿过所选单元格的所有其他单元格必须更改其颜色。

grid

实际上我设法编写了一些仅突出显示第一个对角线的代码,但没有反向突出显示第一个对角线。 (10x10平方格)

    var t = // selected cell that contains X,Y coordinates

    var newX = (t.Y > t.X) ? 0 : t.X - t.Y;
    var newY = (t.Y > t.X) ? t.Y - t.X : 0;
    var maxOffset = ((newX > newY) ? newX : newY);

    for (int b = 0; b + maxOffset < GRID_SIZE; b++)
    {
        // this is selected cell, just skip it
        if ((newX + b) == t.X && (newY + b) == t.Y) continue;

        // select the cell to highlight
        var projection = this.items.Where((i) => (i.X == (newX + b) && i.Y == (newY + b))).First();

    }

但我被困在这里。

  • 它不适用于矩形矩阵
  • 不突出反向对角线

我想突出显示从所选单元格传递的反向对角线,并可能使用相同的变量和循环。

1 个答案:

答案 0 :(得分:1)

如果您的单元格存储在一个数组中,循环将是一个很好的方法 - 但由于您已经拥有包含每个单元格的X和Y坐标的对象,您可以这样做:

var t = // selected cell that contains X,Y coordinates
var diagonals = cells.Where(n => Math.Abs(t.X - n.X) == Math.Abs(t.Y - n.Y));

这将查找与所选单元格的X距离等于距该单元格的Y距离的每个单元格。