私は宿題/課題を解決したくないので、今はコードを投稿しません。しかし、私はいくつかのヒントを投稿します。以下の画像で
ルック:
はどのように我々はC
がOB
とD
が外にあるエッジOA
との間にあることを知ることができますか?簡単なことですが、いくつかの角度を比較します。OC
とOA
の間の角度がOB
とOA
の間の角度より小さい場合、Cは明らかにOA
よりもOB
に近いです。
今、角度をいくつかのベクトルだけを知るようにするにはどうすればよいですか?我々は単調な余弦を使うことができます:それは引数の増加とともに減少します。従って、OC
とOA
との間の角度の余弦は、OB
とOA
の間の角度の余弦よりも大きく、角度の余弦は、OD
とOA
の間の余弦よりも大きい。
次のステップは、余弦を計算する方法を理解することです。ベクトルのドット積は、その値がオペランドの長さの積より大きい角度の余弦であることを助けます。つまり:
cos(OC; OA) = dotproduct(OC; OA)/(length(OA) * length(OC))
2Dでのドット積は単純です:
あなたはあなたのポイントが
C
として、あるいは
D
と同じ状況にあるかどうかを確認する簡単なテストを持っている必要があり、上記のすべてを組み合わせる
dotproduct(OC; OA) = (C.x - O.x) * (A.x - O.x) + (C.x - O.x) * (A.x - O.x)
:前のエッジよりも1つのエッジに近いか否か。
これで、ポリゴンのすべてのエッジでこれを繰り返す必要があります。テストが述語である場合はfold
でこれを行うことができます。
注:これは、ポリゴンが凸である場合にのみ機能します。凹面ポリゴンの場合は、さらにテストを追加する必要があります。
セカンドノート:D
またはC
またはその両方がOA
線以下である場合の図では、何が起こるのだろうか?これを考えて、上記のfold
メソッドのいくつかの変更があるかどうかを確認してください。
最後のメモ:数週間後に、割り当てが終了したと仮定して、完全なコードを投稿します。また、その時私は上記の注釈の質問に答えるでしょう。
凸状または凹状のポリゴンですか?それとも単なる長方形ですか? –
それらはすべて凹面多角形です。申し訳ありませんが、私はそれについて言及することさえ考えませんでした。 – AdamMc331