これは別の質問から派生したものであり、問題に対する Keith Randall の回答と関係があります。下の関数が何をしようとしているのかを確認するために、そこにある画像を簡単に見てください。
つまり、 と の場合、2D グリッド上の任意の 2 点には 2 つの対角線交点がx2 != x1
ありy2 != y1
ます。次の関数を実装しましたが、デルタを減算するセルと加算するセルを決定する方法がわかりません。その結果、ある座標のペアでは結果が正確になり、他のペアでは結果が逆になります。
// 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 による除算を行っており、別の除算を行う余裕はありません。