裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

ハートを描くプログラム

2013年11月19日 | ブログラミング

中澤さんがハートを描くプログラムを書いていた。
----- 引用開始
簡単なのでRでコーディングしてみた。

fg = function(x,y) sqrt(abs(x))+y*sqrt(5-x^2)
= sqrt(5-1E-15)
curve(fg(x, 1), -s, s, ylim=c(-2,3), col=6)
curve(fg(x, -1), -s, s, col=6, add=TRUE)

境界線のみの図ができるし,これに続けて,

vfg = Vectorize(fg)
x1 = seq(s, -s, length=100)
x2 = rev(x1)
plot(c(-3, 3), c(-3, 4), type="n")
polygon(c(x1, x2), c(vfg(x1, 1), vfg(x2, -1)), border=6, col=6)

とすれば,これら2つの関数で囲まれた領域を塗りつぶした図ができる。
-----
引用終了
0 を含むようにするなら,length=101 のように,奇数にする方がよい(curve の n のデフォルトは 101 になっている)。そうしないと,ハートのとんがりとへこみがシャープにならない。

Vectorize という関数は,知らなかった。しかし,今回のプログラムでは fg はベクトライズされている。

fg = function(x, y) sqrt(abs(x)) + y * sqrt(ifelse(5 < x^2, 0, 5 - x^2))
n = 101
x = seq(sqrt(5), -sqrt(5), length = n)
x = c(x, rev(x))
s = rep(c(-1, 1), each = n)
plot(0, 0, type = "n", xlim = c(-3, 3), ylim = c(-3, 4), asp = 1)
polygon(x, fg(x, s), border = 2, col = 2) # 概形だけ描くなら col = 2 を除く

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 分析プログラムにより結果が... | トップ | 年齢の計算は暗算でもできる »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事