【问题标题】:Select diagonals that pass from a point in 2d array选择从二维数组中的一个点经过的对角线
【发布时间】:2015-04-10 15:44:26
【问题描述】:

我有网格,其中项目被放置在行和列中,但这不是我们需要关心的,因为每个元素都绑定了 XY 属性,所以我们只需要将元素与正确的坐标匹配List

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

实际上,我设法编写了一些代码,只突出显示第一个对角线,而没有突出显示相反的对角线。 (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();

    }

但我被困在这里。

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

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

【问题讨论】:

    标签: c# matrix windows-runtime diagonal


    【解决方案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 距离的每个单元格。

    【讨论】:

    • 这太令人沮丧了!我在一张纸上写下了大量的方案,而您提出了一个单行解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2014-11-17
    • 2011-05-25
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多