Select 从二维数组中的一个点经过的对角线
Select diagonals that pass from a point in 2d array
我有网格,项目按行和列放置,但这不是我们必须关心的,因为每个元素绑定 X
和 Y
属性,所以我们只需要匹配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();
}
但我被困在这里了。
- 它不适用于矩形矩阵
- 不高亮反向对角线
我想突出显示从所选单元格传递的反向对角线,并可能使用相同的变量和循环。
如果您的单元格存储在一个数组中,循环将是一个很好的方法 - 但由于您已经拥有包含每个单元格的 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 距离的每个单元格。
我有网格,项目按行和列放置,但这不是我们必须关心的,因为每个元素绑定 X
和 Y
属性,所以我们只需要匹配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();
}
但我被困在这里了。
- 它不适用于矩形矩阵
- 不高亮反向对角线
我想突出显示从所选单元格传递的反向对角线,并可能使用相同的变量和循环。
如果您的单元格存储在一个数组中,循环将是一个很好的方法 - 但由于您已经拥有包含每个单元格的 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 距离的每个单元格。