R, Persp program example (14' JYU)
코딩 공부/R-전산 통계학 2020. 2. 23. 16:44주인장의 블로그 글중에서 "구 만들기" 와 관련된 글이 있었음을 기억하고 계십니까?
# Persp 강의
https://smbar.tistory.com/entry/전산통계학-9주차-강의?category=814595
# Persp 응용문제 (구 만들기)
https://smbar.tistory.com/entry/전산통계학-9주차-강의?category=814595
그 결과로 위의 사진처럼 육안으로 보기에 완벽한 구를 힘들게 만들 수 있었지만, 시험에서 갑자기 "반 구를 만드세요" 라던지, "구가 아닌 원기둥을 만드세요" 라고 할 수도 있는 것이 교수님 마음 아니겠습니까? 그래서 대비를 하기로 했습니다
# 반 구
x <- seq(-1,0, len=50) ; y <- seq(-1,1, len=50)
z1 <- outer(x,y, function(x,y) sqrt(1-x^2-y^2))
for (i in 1: nrow(z1)) {for (j in 1: ncol(z1)) {
if(x[i]^2+y[j]^2> 0.98 & x[i]^2+y[j]^2< 1.04 ) z1[i,j]=0
if(x[i]==0) z1[i,j]=0}}
z2 <- outer(x,y, function(x,y) -sqrt(1-x^2-y^2))
for (i in 1: nrow(z2)) {for (j in 1: ncol(z2)) {
if(x[i]^2+y[j]^2> 0.98 & x[i]^2+y[j]^2< 1.04 ) z2[i,j]=0
if(x[i]==0) z2[i,j]=0}}
view1 <- persp(x,y,z1, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=F, theta=15)
par(new=T)
view2 <- persp(x,y,z2, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=T, theta=15)
# 1/4 구
x <- seq(-1,0, len=45) ; y <- seq(-1,1, len=45)
z1 <- outer(x,y, function(x,y) sqrt(1-x^2-y^2))
for (i in 1: nrow(z1)) {for (j in 1: ncol(z1)) {
if(x[i]^2+y[j]^2> 0.98 & x[i]^2+y[j]^2< 1.04 ) z1[i,j]=0
if(x[i]==0) z1[i,j]=0}}
z2 <- matrix(0, nrow=length(x), ncol=length(y))
for (i in 1:nrow(z2)) {for (j in 1:ncol(z2)) {
if(x[i]^2+y[j]^2>1.04) z2[i,j]=NA
}}
view1 <- persp(x,y,z1, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=F, theta=15)
par(new=T)
view2 <- persp(x,y,z2, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=T, theta=15)
# 1/8 구
x <- seq(-1,0, len=45) ; y <- seq(-1,0, len=45)
z1 <- outer(x,y, function(x,y) sqrt(1-x^2-y^2))
for (i in 1: nrow(z1)) {for (j in 1: ncol(z1)) {
if(x[i]^2+y[j]^2> 0.98 & x[i]^2+y[j]^2< 1.04 ) z1[i,j]=0
if(x[i]==0) z1[i,j]=0
if(y[j]==0) z1[i,j]=0}}
z2 <- matrix(0, nrow=length(x), ncol=length(y))
for (i in 1:nrow(z2)) {for (j in 1:ncol(z2)) {
if(x[i]^2+y[j]^2>1.03) z2[i,j]=NA
}}
view1 <- persp(x,y,z1, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=F, theta=15)
par(new=T)
view2 <- persp(x,y,z2, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=T, theta=15)
# 정육면체
x <- seq(-1,1, len=50) ; y <- seq(-1,1, len=50)
z1 <- matrix(1, length(x),length(y))
for(i in 1:nrow(z1)) {for(j in 1:ncol(z1)) {if(x[i]==1|x[i]==-1|y[j]==1|y[j]==-1) z1[i,j]=0}}
z2 <- matrix(-1, length(x),length(y))
for( i in 1: nrow(z2)) {for (j in 1:ncol(z2)) { if(x[i]==1 |x[i]==-1 | y[j]==1 | y[j]==-1) z2[i,j]=0}}
view1 <- persp(x,y,z1, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=F, theta=15, phi=30)
par(new=T)
view2 <- persp(x,y,z2, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=F, theta=15, phi=30)
# 원기둥
x <- seq(-1,1, len=60) ; y <- seq(-1,1, len=60)
z1 <- matrix(1, length(x),length(y))
for(i in 1:nrow(z1)) {for(j in 1:ncol(z1)) {
if(x[i]^2+y[j]^2>0.97 & x[i]^2+y[j]^2<=1.03) z1[i,j]=0
if(x[i]^2+y[j]^2>1.03) z1[i,j]=NA
}}
z2 <- matrix(-1, length(x),length(y))
for( i in 1: nrow(z2)) {for (j in 1:ncol(z2)) { if(x[i]^2+y[j]^2>0.97 & x[i]^2+y[j]^2<=1.03) z2[i,j]=0
if(x[i]^2+y[j]^2>1.03) z2[i,j]=NA
}}
view1 <- persp(x,y,z1, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=F, theta=15, phi=30)
par(new=T)
view2 <- persp(x,y,z2, zlim=c(-1,1), xlim=c(-1,1), ylim=c(-1,1),
col="transparent", border="orange",
zlab="", xlab="", ylab="",
box=T, theta=15, phi=30)