20

バックグラウンド

興味深いビデオトランジション(グレースケール)を作成しようとしています。

問題

閉じた対称的な形状を表す方程式が与えられた場合、輪郭をプロットし、その中心に向かって同心円状に形状をシェーディングします。

次の方程式を考えてみましょう。

x = 16 * sin(t)^3
y = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t)
t = [0:2 * pi]

プロットした場合:

陰影を付けると、次のようになります(完全に陰影を付けて表示することはできませんが、アイデアを示すには十分です)。

シェーディングは外側が最も暗く(たとえば、#000000 RGB hex)、中央に近づくにつれて明るくなります。中央は白い(たとえば、#FFFFFF)ドットになります。

質問

  1. 上の影付きのハートのように、高解像度で同心円状に影付きのグレースケール画像を生成するための最も便利な方法は何でしょうか。
  2. そのような閉じた対称的な形状は、正式には何と呼ばれていますか?

ありがとうございました!

アイデア

  • http://code.google.com/p/jmathplot/などのライブラリを使用します
  • GNUPlotを使用する
  • Rを使用する
  • Wolfram Alphaを使用してプロットし、ImageMagickを使用してより小さな同心バージョンを作成します
4

2 に答える 2

32

Rでこれを試してください:

# create palette
greyScale <- colorRampPalette(c("black","white"))

# function to draw shape
plotHeart <- function(r, col){
  t <- seq(0,2*pi,length.out=100)
  x <- r*sin(t)^3
  y <- (13*r/16)*cos(t) - (5*r/16)*cos(2*t) - (2*r/16)*cos(3*t) - (r/16)*cos(4*t)
  polygon(x,y,col=col,border=NA)
}



# create new plot canvas
plot.new()
# limits are approximate here
plot.window(xlim=c(-16,16),ylim=c(-16,13))

# use mapply to loop
mapply(plotHeart,seq(16,0,length.out=100),greyScale(100))

その結果:

満たされたハートプロット

これは、サイズが小さく、色が異なる塗りつぶされたポリゴンを重ねて描画することで機能します。あなたの質問に答えるには:

(1)これは私のマシン(控えめなCore 2 duoラップトップ)によって0.09秒で作成されました。それらはより高速な他の言語/実装かもしれませんが、これは私には十分に速いようです。

(2)他の線と交差しない線で構成される平面形状は、通常、単純な多角形と呼ばれます。

于 2011-07-01T10:30:59.930 に答える
1

2Dグラフィックスを使用して、このでは、を使用して同心円の透明度を変更しdrawOval()、同様の効果を実現しますが、このアプローチは、インターフェイスをdraw()実装する任意のクラスに拡張できShapeます。のcreateTransformedShape()方法をAffineTransform使用して、アウトラインを同心円状に平行移動および拡大縮小することができます。

于 2011-07-01T03:07:54.673 に答える