我有一个N x N矩阵,所有值都等于零,然后我需要得到一个三角形的坐标,并将这个三角形内的值设置为一(1)。
如何确定构成三角形面的矩阵中每个元素的位置?
像这个10x10矩阵一样,我有一个三角形设置为(9,1),(5,5)和(9,5):
0000000000
0000000000
0000000000
0000000000
0000000000
0000010000
0000110000
0001010000
0010010000
0111110000
我不需要为我制作的代码,我想检查是否有正确的方法(可能使用数学)来获得"坐标"。
答案 0 :(得分:0)
当你有两个点x1,y1和x2,y2时,你可以使用这些点来创建一个使用“point-slope form”的线的公式
使用m = (y1 - y2) / (x1 - x2)
然后你的公式为y - y1 = m(x - x1)
这进一步转到y = m(x - x1) + y1
因此,在(9,1),(5,5)
的示例中,您计算了m = (1 - 5) / (9 - 5) = (-4) / (4) = -1
然后你的公式变为y = (-1)(x - 9) + 1
然后在5到9之间迭代。
f(5) = -(5-9) + 1 = -(-4) + 1 = 4 + 1 = 5
f(6) = -(6-9) + 1 = -(-3) + 1 = 3 + 1 = 4
f(7) = -(7-9) + 1 = -(-2) + 1 = 2 + 1 = 3
f(8) = -(8-9) + 1 = -(-1) + 1 = 1 + 1 = 2
f(9) = -(9-9) + 1 = -(0)) + 1 = 0 + 1 = 1
答案 1 :(得分:0)
三角形具有很好的属性,允许非常简单的算法就足够了。
找到Ymax,即三角形中最顶部的Y坐标。然后对于Ymax,找到该行中设置的最左和最右像素的Xmin和Xmax。现在有2例。如果Xmin == Xmax,则一个顶点是(Xmin,Ymax),否则两个坐标是(Xmin,Ymax)和(Xmax,Ymax)。
有了这个,您就找到了最顶部的坐标或坐标。
继续这种推理以找到其他推理非常简单。我会让你为了好玩而谜题......
您可以将上述算法中的min和max-finding与根据问题第二部分所需的填充算法结合起来。