黄金長方形というものがあります。ウィキペディアでは黄金四角形でしたけど、某マンガでは黄金長方形となっていました。私も某マンガにのっとって黄金長方形と呼ばしてもらいます。
その黄金長方形をRで作図するというプログラムを作成してみました。
なにぶん昔に作ったプログラム&ごり押しなのでぐちゃぐちゃですが、黄金長方形が作図されていきます。
数学的な仕組みとしては黄金比がφ = -2・sin(666°) から得られるのを利用しています。
myplot <- function() {
matplot(0,0,ylim=c(-0.2,1.2),xlim=c(-0.8+(-2*sin(666/180*pi))/2,0.8+(-2*sin(666/180*pi))/2),
type="l",xlab="",ylab="")
}
mycircle <- function(a,b,times) {
gold <- function(vector) return(1/(-2*sin(666/180*pi))^(vector-1))
y <- function(x) return(b+((gold(times))^2-(x-a)^2)^0.5)
y2 <- function(x) return(b-((gold(times))^2-(x-a)^2)^0.5)
a <- a + gold(times)
matlines(seq(a,(a-gold(times)),by=-0.001), y(seq(a,(a-gold(times)),by=-0.001)),lwd=3)
times <- times + 1
Sys.sleep(0.5)
b <- b + gold(times-1)-gold(times)
matlines(seq(a,(a+gold(times)),by= 0.001), y(seq(a,(a+gold(times)),by= 0.001)),lwd=3)
times <- times + 1
Sys.sleep(0.5)
a <- a + gold(times-1)-gold(times)
matlines(seq(a,(a+gold(times)),by= 0.001),y2(seq(a,(a+gold(times)),by= 0.001)),lwd=3)
times <- times + 1
Sys.sleep(0.5)
b <- b -(gold(times-1)-gold(times))
matlines(seq(a,(a-gold(times)),by=-0.001),y2(seq(a,(a-gold(times)),by=-0.001)),lwd=3)
Sys.sleep(0.5)
a <- a - gold(times)
times <- times + 1
return(c(a,b,times))
}
jojo <- function(x,y,times) {
gold <- function(vector) return(1/(-2*sin(666/180*pi))^(vector-1))
matlines(c(x+gold(times),x+gold(times)),c(y,y+gold(times)),lwd=3)
x <- x + gold(times)
y <- y + gold(times)
times <- times + 1
Sys.sleep(0.5)
matlines(c(x,x+gold(times)),c(y-gold(times),y-gold(times)),lwd=3)
x <- x + gold(times)
y <- y - gold(times)
times <- times + 1
Sys.sleep(0.5)
matlines(c(x-gold(times),x-gold(times)),c(y,y-gold(times)),lwd=3)
x <- x - gold(times)
y <- y - gold(times)
times <- times + 1
Sys.sleep(0.5)
matlines(c(x,x-gold(times)),c(y+gold(times),y+gold(times)),lwd=3)
x <- x - gold(times)
y <- y + gold(times)
times <- times + 1
Sys.sleep(0.5)
return(c(x,y,times))
}
################################
myplot()
rect(0,0,-2*sin(666/180*pi),1,lwd=3)
hoge <- c(0,0,1)
for (i in 1:4) {
hoge <- jojo(hoge[1],hoge[2],hoge[3])
}
hoge <- c(0,0,1)
for (i in 1:4) {
hoge <- mycircle(hoge[1],hoge[2],hoge[3])
}
一度、関数を読み込ませるとそれ以降は#より下の部分を実行するだけで、プロットすることができます。
全然役に立たない関数なので、お暇な方のみぜひどうぞ。
公開日:4月22日