2009-06-25 6 views
2

私はキャンバス上にPolygonsの全体の束を描きます。その大部分は、少なくとも1つの他のポリゴンとエッジを共有しています。ポリゴンが輪郭を描くことによってポリゴンが「特殊」であることを示したいと思いますが、ポリゴン上の線が部分的に別のポリゴンに引き寄せられて、ストロークがより薄く見える傾向があります。さらに、描画順に応じて、ポリゴンの周りにはポリゴンのストロークがほぼ完全に覆われていることがあります。ポリゴン間の目に見える隙間は、この「細い卒中」の問題よりはるかに好ましくないので、ポリゴンの間隔を外すことは非常に魅力的な選択肢ではありません。ポリゴンから「内部ストローク」エフェクトを構築する

私は、各ポリゴンを代わりにポリゴンのペアとして生成することで、目的の効果が得られると考えています。この場合、一方のポリゴンはもう一方のポリゴンに完全に含まれています。ポリゴンの外側のストロークをオーバーラップさせます)。内側のポリゴンは常に透明な塗りつぶしを持ち、非透明のストロークはポリゴンのペアが「特別」であることを示したいときにのみ使用します。

私の質問は、外側のポリゴンからそのような内側のポリゴンを派生させるにはどうしたらいいですか?

問題のポリゴンは、必要に応じてregular polygonsに制限することができ、ストロークはファンシー・マイターなどがない単純な1太い実線です。私はある時点でストロークの厚さを調整できるようにしたいと思っていますが、それよりも魅力的なものはありません。

+0

ここではポリゴンオフセット問題について説明します:http://stackoverflow.com/questions/1109536/an-algorithm-for-inflating-deflating-offsetting-buffering-polygons – user4891

+0

特殊ポリゴンが最後に描かれた? –

+0

多角形が関与しているので、高価になります。彼らがお互いに接していないという保証もありません。 –

答えて

1

実際にあなたが望むものを達成するにはいくつかの方法があると思います。

まず、オリジナルのポリゴン内にもう少し小さなポリゴンを描画するという独自のアイデアを考えてみましょう。それは悪い考えではない。小さなポリゴンを生成する方法についての元の質問に答えるには、各ポリゴンの重心を見つけて、そのポリゴンの重心点までの距離のパーセンテージで各頂点をオフセットして、小さなポリゴンを取得します。これは喜ばしい効果を与えるはずです。

もう1つの方法は、zオーダーを使用し、「太い」ポリゴンを少し負のz距離でオフセットすることです。

さらに別の方法は、描画命令を利用することです。最後に太いポリゴンを描画します。これにより、周囲のポリゴンによってオーバードローされないようになります。

あなたのニーズに応じて機能する別のアイデアは、ポリゴンをまったく描画するのではなく、一連の線を描くだけで、線の一部を太くすることです。

試してみる方法はたくさんあります。あなたがうまくいくものを見つけることを願っています!

+0

スケーリングのアイデアは面白いです。 2つの「特別な」ポリゴンが互いに接していれば、Zオーダーと描画命令の操作は失敗しますが、これは私が疑う余地のない珍しいことではありません。濃い線も面白いですが、私はパフォーマンスのコストについて心配しています。 –

+0

太さの異なる線の描画は、共有するエッジごとに2回ではなく1回描画するので、描画ポリゴンよりもかなり速いはずです。 –

+0

私はあなたの最初の提案に少しばらつきがあります。スケールダウンするのではなく、新しいポイントが古いものから離れたStrokeThicknessになるように、各ポイントを「中心」に向かってどのくらい移動させるかを正確に把握するためにトリグを実行しました。 –

関連する問題