4
線を使用して画像を再現する
トゥルーカラーRGBイメージI、描画する最大行数L、および各行の最小mおよび最大Mの長さを取り込むプログラムを作成します。出力画像Oのようなできるだけ見えるとIとを用いて描画さLの間のユークリッド長有する全てがまたはより少ない直線、MおよびMを。 各ラインは単色で、Oの境界内に両方の端点があり、Bresenhamのラインアルゴリズムを使用して描画されている必要があります(ほとんどのグラフィックライブラリは既に対応しています)。個々の線の太さは1ピクセルのみです。 長さ0の行も含め、すべての行は少なくとも1ピクセルを占める必要があります。線は互いに重ねて描画できます。 線を描画する前に、Oの背景を任意の単色に初期化できます(Iに依存する場合があります)。 詳細 OはIと同じ次元である必要があります。 Lは常に非負の整数です。Iの面積よりも大きい場合があります。 mおよびMは、M > = mの非負の浮動小数点数です。2つのピクセル間の距離は、それらの中心間のユークリッド距離です。この距離がm未満またはMより大きい場合、これらのピクセル間の線は許可されません。 ラインはアンチエイリアス処理されるべきではありません。 不透明度とアルファは使用しないでください。 あなたのプログラムは、100万ピクセル未満でLが10,000未満の画像で、最新のコンピューターで実行するのに1時間以上かかることはありません。 テスト画像 もちろん、最も正確または興味深い出力画像を表示する必要があります(LがIのピクセル数の5%から25%の間であり、mおよびMが対角サイズの約10分の1である場合に発生します)。 ここにいくつかのテスト画像があります(オリジナルをクリックしてください)。また、自分で投稿することもできます。 よりシンプルな画像: これは人気コンテストです。最も投票数の多い提出が勝ちです。 ノート 絶対値と同様に、Iの合計ピクセルの割合からLを導出すると役立つ場合があります。例えば、同じことだろうかの8×8画素の画像でした。mとMについても同様のことができます。これは必須ではありません。>>> imageliner I=img.png L=50% m=10 M=20>>> imageliner I=img.png L=32 m=10 M=20img.png 行は境界を越えることができないため、可能な最長の行はIの対角線の長さです。持つMをこれ以上のことは何もかかわらを壊すべきではありません。 当然、mが0で、LがIのピクセル数以上の場合、各ピクセル位置に長さ0の「ライン」を持たせることで、OはIと同じになります。この動作は必須ではありません。 間違いなく、Iの形を再現することは、色を再現することよりも重要です。エッジ検出を検討することもできます。