特定の角度で「角を切る」ことを可能にする特殊な線衝突アルゴリズムを作成する助けが必要です。
次の図で、青い四角がプレイヤーを表し、黒い四角が壁を表すとします。白い四角はプレイヤーの「視線」内の四角 (有効な四角) を表し、灰色の四角はプレイヤーの「視線」の外にある四角 (無効な四角) を表します。
2 番目の画像は、手抜きを開始すると、より興味深いものになります。
壁の角を通過しても許可されているこの線を詳しく見てみましょう。
この行は次の理由で許可されています。
- dx <= 0.5 (正方形が 1x1 の場合)
- dx/dy は特定の比率を超えています (たとえば、2 - これらの画像で表されている正確な値はわかりません)。
(この場合は dy/dx の) 比率が低すぎるため、逆の行は許可されません。
または、正方形からの入口と出口の角度について話すべきかもしれません....
私が抱えている主な問題は、グリッド上の 2 点間を任意の角度で移動するベクトルの解を一般化する方法がわからないことです。三角法を使用する必要があるかどうか、または何を使用するかを決定できません。これまでの私の最も近い解決策は、各正方形を dx および dy として線切片の小数部分を使用し、線の傾きとそれがどの象限にあるかに基づいて許可されているかどうかを確認することでした.
誰でも助けることができますか?
また、他の行アルゴリズムを借用したり、開始したりすることも検討しましたが、あまり有用なものは見つかりませんでした。私が見たそれらのほとんどは、(x1, y1) から (x2, y2) への線が (x2, y2) から (x1, y1) への線と同じであることを望んでいるため、この問題はまったく異なります。