这是另一个问题的一个分支,与Keith Randall对该问题的回答有关。请快速查看那里的图像,看看下面的功能正在尝试做什么。
x2 != x1
简而言之,如果和 ,则 2D 网格上的任何两点都会有两个对角线交点y2 != y1
。我实现了以下功能,但无法弄清楚如何确定要从哪个单元格中减去 delta 以及要添加到哪个单元格。结果,对于某些坐标对,结果是准确的,而对于其他坐标,结果是相反的。
// This class is the same as [Point] except
// it uses BigInteger instead of Int32 types.
public class Cell
{
System.Numerics.BigInteger X = 0;
System.Numerics.BigInteger Y = 0;
}
public List<Cell> GetIntersections (Cell c1, Cell c2)
{
List<Cell> cells = new List<Cell>();
System.Numerics.BigInteger delta = 0;
System.Numerics.BigInteger deltaHalf = 0;
System.Numerics.BigInteger width = 0;
System.Numerics.BigInteger height = 0;
width = System.Numerics.BigInteger.Abs(c2.X - c1.X);
height = System.Numerics.BigInteger.Abs(c2.Y - c1.Y);
delta = System.Numerics.BigInteger.Abs(height - width);
deltaHalf = System.Numerics.BigInteger.Divide(delta, 2);
// INTRODUCE CONDITIONS HERE TO DETERMINE +/- COMBINATION.
cells.Add(new Cell(c1.X - deltaHalf, c1.Y + deltaHalf));
cells.Add(new Cell(c2.X + deltaHalf, c2.Y - deltaHalf));
return (cells);
}
起初我认为这是一个简单的梯度/斜率问题,但我似乎无法找到slope
和+/- deltaHalf
组合之间的一致相关性。
重要提示:请注意,可接受的答案只能进行 x1、y1、x2、y2 比较。由于性能损失,实际上计算线的斜率不是一种选择。我们已经在进行除以 2 且无法再进行除法。