LeetCode469 - 凸多角形 - ミディアム(パイソン)

この多角形が凸である場合、順次接合場合多角形を形成ポイントのリストを与えられ、検索  (凸ポリゴンの定義)

[0,0]、[0,1]、[1,1]、[1,0] 

回答:真
[[0、0]、[0,10]、[10]、[10]、[10,0]、[5,5]] 

回答:偽

のアイデア:この質問はポイントにポリゴンのシリーズを要求され、それがあると判断されましたそれが凸であるかどうか。より良い方法は、すべての点を順次同じに従って配置されているかどうかを確認するために判定され、全てのこのような点を順次時計回り、反時計回りまたはラインと整列されます。
ここで誰かがコンテンツにLeetCodeロバート・セッジウィックのアルゴリズムコース上のPOを使用し、方向性を決定する方法です。
三点が一方向に配列されているか否かを判定し、我々が可能な第1の計算(B [0] -a [0 ])*(C [1] -a [1]) - (B [1] -a [1]) *(C [0] -a [ 0])。この値がゼロよりも大きい場合、その次に、時計回り、反時計回りであればゼロ未満であることを意味します。
0に等しい場合は、同じ行に配置されていることを意味します。我々は三点をオンにすることができますので、上記式の各ポイントはよく保存し、三時までに3点を今回の方向などとして、計算され、存在しない場合、我々は単にすることができます
Falseを返します。音符iが0 = iが点が正確にポイント[-2]、ポイントを決定するとき、= 0から、この計算も開始すること[-1 ]、点[0]。
難しい問題は、どのようにこの決意でありますコンベックス。

クラスソリューション:
     DEF isConvex(自己、点:リスト[リストの[int]]) - > BOOL:
         DEF 方向(A、B、C):
             リターン(B [0] -a [0])*(C [1] -a [1]) - (B [1] -a [1])*(C [0] - [0])
        D = なし
          I における範囲(LEN(点)): =方向(ポイント[ I-2]、ポイント[I-1 ]、ポイント[i])と
             の場合 == 0:続ける
            場合は D ==なし:D = もし:* D <0 の戻りリターン
        
        

 

おすすめ

転載: www.cnblogs.com/sky37/p/12244380.html