問題タブ [scanline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - アルゴリズム: 高さが最大の屋上を作成する
私は本でこの問題を見つけ、必死に解決しようとしています。質問自体は次のとおりです。最大の高さで屋上 (平らでない屋根) を作成します。壁は 90 度の角度または平行です。
私のアプローチ:
私はすべてのエッジポイントを持っています。したがって、スキャンラインアプローチを使用できます。すべてのポイントを x 軸、次に y 軸で並べ替えます。次に、ポイントのリスト全体を調べて、壁に対して 45° の線を引きます。すでに描いた現在の線と交差する線があるかどうかを確認します。一致しない場合は、次のポイントに移動して、壁に対して 45° の別の線を引きます。最後の 2 本の線が交差する可能性が高いので、交点に新しい点を作成します。
私が抱えている問題は、特殊なケースがたくさんあるということです。私が考えていなかったより簡単な方法はありますか?この種の問題により適した他のアルゴリズムはありますか? この種の問題に対するあなたの考えは何ですか?
例:
これは、屋根がどのように見えるかを想像するものです。
delphi - Delphi TBitmap - Pixels と ScanLine が異なるのはなぜですか?
32 ビットの TBitmap を使用しているときに、Canvas.Pixels から ScanLine に切り替えました。
次に、値を赤に設定しましたが、青として表示されていました。
理由はありますか?
コードの抜粋を次に示します。
どういうわけか TColor はメモリ内のものと同じではないようですが、それは意味がありません。
どんな提案でも大歓迎です。;)
java - スキャンライン:交点の検索
ポリゴンをスキャンライン アルゴリズムで塗りつぶしたいと考えています。このためには、スキャンラインがポリゴンと接触するすべてのポイントを知る必要があります。このためのループを書きましたが、明らかに機能していません (リストにポイントを追加することはありません。これは、ポリゴンをカットするポイントを見つけることができないことを意味します)。ポリゴンを作成し、そこからすべてのエッジを取得できます。
ポリゴンと交差するスキャンラインのポイントを取得するためのコードは次のとおりです。xmin、xmax、ymin、ymax はポリゴンの最大ポイントです。それらも正しいです。contains() は、java.awt.Polygon クラスを使用して、Point がポリゴンの内側にあるかどうかをチェックします。これも機能しています。wasInside にはブール値が含まれており、最後にチェックされたポイントがポリゴンの内側にあるかどうかにかかわらず、古い状態が保存されます。
java - スキャンライン アルゴリズム: 交点の計算方法
教授からスキャンライン アルゴリズムを実装する必要がありますが、スキャンラインからポリゴンとの交点を取得する方法がよくわかりません。アルゴリズムは次のとおりです。
独自のポリゴン ( などのメソッドを使用) を既に実装してpaint()
おりcontains()
、ポリゴンのすべてのエッジが次のような配列に保存されています。
xとyの最小値と最大値が保存されています
したがって、最初に考えたのは0,ymin
、次の点がポリゴンの内側にあるかどうかから開始してループをチェックインするスキャンラインを作成する必要があるということです。このメソッドを次のように実装しました。
したがって、次のポイントがポリゴンの内側にある場合、交点などがあります。このために、私はこのループを持っています:
しかし、stackoverflow questionから、これは適切な解決策ではないというヒントを得ました。
教授からアルゴリズムの実装を開始するにはどうすればよいですか?x1、y1、x2、y2、c ポイントはどこで取得できますか? これらがエッジであることはわかっていますが、どのエッジを使用する必要があるかをどのように知ることができますか?
編集:OK、これですべてのエッジが y 値でソートされました。与えられた式 Sx=x1+(x2-x1)/... で交点を計算できますか? 私の最初の試みは次のようになります。
しかし、これは間違っているようですintersectionPoints
。
image - RGB32 とインデックス タイプのイメージの両方からイメージの色情報を取得する
QImage で画像の色にアクセスしようとしています。
私がドキュメントで最も見つけた方法は、スキャンライン関数に基づいています...
私が試したところ、うまくいきました... RGB32画像で。正確な方法を使用して 8 ビットのインデックス付き画像またはモノクロ画像のカラー データを取得すると、驚くべき結果と不快な結果が得られました。
これは私のコードでした:
8 ビットのインデックス付きまたはモノクロの画像で同じコードを実行すると、色を取得する際にエラーが発生しました。ドキュメントによると、スキャンラインは 32b の倍数に揃えられていますが、これは 8 と 2 の倍数であるため、問題になるとは思いませんでした。
すべての種類の入力画像で正しい結果が得られないことがわかったら、次のように変更しました
完全に動作します...遅くなったり、他の予期しない動作が発生したりするのでしょうか? 結局のところ、インデックス付きの画像であっても、ピクセル()関数を使用して色情報を取得していますが、実際には別の方法で保存する必要があります...失敗するはずです...
スキャンラインを使用して最初のバージョンを他の画像タイプで機能させる方法はありますか?
スキャンラインを使用してデータを取得する方法が推奨されるのはなぜですか?
c++ - c++ opengl スキャン ライン アルゴリズム
コードが与えられた場合 ( C++ のスキャンライン フィル OpenGL/GLUT アルゴリズムから取得):
re[500]
およびle[500]
配列とは そして、なぜ500?
javascript - スキャンライン アルゴリズムの実装
配列と色として3点を指定して、ランダムな三角形のスキャンライン塗りつぶしアルゴリズムを実装しようとしています。なんか変な結果になってるな コードの最適化は無視してください。コードを機能させてから最適化しようとしているだけです。ブレゼンハム ライン アルゴリズムを使用して線を描画する方法があります。なぜこれらの結果が得られるのかわかりません。 http://postimg.org/image/qh1sdizwv/
opengl - OpenGL でポリゴンの色を動的に塗りつぶす方法
ユーザーが適切なオプションを選択して画面上でマウスの左ボタンをドラッグすることで、画面上に線や円を描くことができる glut を使用して、OpenGL でプログラムを作成しています。また、マウスの右ボタンをクリックしたときに、ユーザーが多角形 (複数の線の組み合わせで描画できる) に色を塗りつぶせるようにしたいと考えています。
glReadPixels() を使用してすべてのピクセルの色を再帰的に決定するフラッド フィル アルゴリズムを実装しようとしましたが、遅すぎてサイズの大きいピクセルのスタック オーバーフローが発生します。
(最初は、マウスの右ボタンをクリックして RGB 値を 3 つの float 要素の backColor 配列に格納する時点でこの命令を実行しています)
私が実装したフラッドフィルのコードは -
では、マウスの右クリックで多角形 (おそらく凹面多角形) に色を付ける最良の方法は何ですか? また、プログラムをより効率的にするためのさまざまな方法は何ですか? たとえば。ピクセル値を GL_FLOAT として保存し、すべてのピクセルの 3 つの浮動小数点数を比較することは、私が感じる最も効率的な方法ではないかもしれませんが、ピクセル値を比較できる他の方法が何であるかはわかりません。
しかし、最も重要なことは、これに最適なアルゴリズムは何ですか?