あるポリゴンを別のポリゴンのエッジでクリッピングするための Sutherland-Hodgman アルゴリズムの適切で機能する実装を見つけるのに苦労しています。入力ポリゴンは常に、4 つのポイントで構成される四角形です。
私が見つけることができる最高のC実装はこれで、完璧で信じられないほど高速に見えますが、残念なことに、特定の入力でクラッシュし、アルゴリズムの何が間違っているのかを正確に判断するほど賢くありません (いくつかの入力値で動作し、壊れます)。他の人と)。これは、クラッシュするクワッドの値の例です。
vec_t c[] = {{400,400}, {200,200}, {400,200}, {200,400}};
vec_t s[] = {{300,300}, {100,100}, {300,100}, {100,300}};
poly_t clipper = {4, 0, c};
poly_t subject = {4, 0, s};
poly res = poly_clip(&subject, &clipper);
誰かがそのアルゴリズムの問題を提案したり、同じスタイルの入力 (アウトライン ポイント) で機能するより良い実装を提案したりできますか? C が推奨されますが、すべてのステップが実装されている限り、どの実装でも作業できます (C で書き直す必要があります)。レンダリング時に 2D 四角形の数学的クリッピングを実行するには、これが必要です。
上記の例では、入力四角形は両方とも四角形ですが、実際には任意の凸四角形にすることができます。出力は 3 から 8 ポイントの範囲である可能性があります (上記の例では 4 ポイントのポリゴンを出力する必要があります)。