R, Persp program example (14' JYU)

코딩 공부/R-전산 통계학 2020. 2. 23. 16:44
반응형

주인장의 블로그 글중에서 "구 만들기" 와 관련된 글이 있었음을 기억하고 계십니까?

# Persp 강의

https://smbar.tistory.com/entry/전산통계학-9주차-강의?category=814595

 

전산통계학 9주차 강의

Graph 그리기는 다음과 같은 순서를 기억 High-Level Plot Functions ; 우선 그래프부터 그리고 난 후에 Low-Level Plot Functions ; 입력되어 있는 high lever 의 안에다가 y=x 처럼 문자를 투입시킬 수 있다 Hig..

smbar.tistory.com

 


# Persp 응용문제 (구 만들기)

https://smbar.tistory.com/entry/전산통계학-9주차-강의?category=814595

 

전산통계학 9주차 강의

Graph 그리기는 다음과 같은 순서를 기억 High-Level Plot Functions ; 우선 그래프부터 그리고 난 후에 Low-Level Plot Functions ; 입력되어 있는 high lever 의 안에다가 y=x 처럼 문자를 투입시킬 수 있다 Hig..

smbar.tistory.com


그 결과로 위의 사진처럼 육안으로 보기에 완벽한 구를 힘들게 만들 수 있었지만, 시험에서 갑자기 "반 구를 만드세요" 라던지, "구가 아닌 원기둥을 만드세요" 라고 할 수도 있는 것이 교수님 마음 아니겠습니까? 그래서 대비를 하기로 했습니다


# 반 구

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)

TAG