モノトーンポリゴンがポリゴンの三角形分割で重要な役割を果たすことはよく知られています。
定義: Aポリゴン平面では直線に関して単調と呼ばれるへのすべての行が直交する場合は、Lと交差P最も二回で。
ラインとポリゴンPが与えられた場合、ポリゴンがLに関して単調かどうかを判断する効率的なアルゴリズムはありますか?
モノトーンポリゴンがポリゴンの三角形分割で重要な役割を果たすことはよく知られています。
定義: Aポリゴン平面では直線に関して単調と呼ばれるへのすべての行が直交する場合は、Lと交差P最も二回で。
ラインとポリゴンPが与えられた場合、ポリゴンがLに関して単調かどうかを判断する効率的なアルゴリズムはありますか?
回答:
ヒント:一般的な、単純なポリゴンに関して単調であるそれはその正確に一つの頂点がある場合にのみ-axis -座標隣国よりも小さくなっているが。この観察結果は、少なくともポリゴンのエッジが垂直でない場合、タイムアルゴリズムをすぐに示唆します。
ネタバレ:
IsMonotone(X [0..n-1]、Y [0..n-1]) local_mins←0 for i←0からn-1 if(X [i] <X [i + 1 mod n])および(X [i] <X [i-1 mod n]) local_mins←local_mins + 1 戻り値(local_mins = 1)
ポリゴンに垂直エッジがあるのではないかと心配している場合は、比較の代わりに次のサブルーチンを使用して、X[i] < X[j]
一貫性を保ちます。
IsLess(X, i, j):
return ((X[i] < X[j]) or (X[i] = X[j] and i < j))
最後に、が形式の他の行である場合は、次のように変更します。IsLess
IsLess(X, Y, i, j):
Di ← a·X[i] + b·Y[i]
Dj ← a·X[j] + b·Y[j]
return ((Dj < Dj) or (Di = Dj and i < j))