1. 程式人生 > >{R語言}中國國旗-慶祝祖國69歲生日

{R語言}中國國旗-慶祝祖國69歲生日

明天就是國慶,用自己的方式慶祝偉大的祖國建立69週年。

利用R語言畫中國國旗

效果預覽: People's Republic of China 程式碼:

#畫五角星的函式
star<-function(posXY,size=1,theta=0,color="yellow")
{
  alpha<-2*pi/5
  R<-size
  r<-sin(pi/10)*R/sin(7*pi/10)
  
  pointpos<-matrix(0,nrow=10,ncol=2)
  
  Beta<-(pi/10+theta)+(0:4)*alpha
  pointpos[seq(1,9,2),]<-cbind(cos(Beta)*R+posXY[1],sin(Beta)*R+posXY[2])
  
  Beta<-(3*pi/10+theta)+(0:4)*alpha
  pointpos[seq(2,10,2),]<-cbind(cos(Beta)*r+posXY[1],sin(Beta)*r+posXY[2])
  
  polygon(pointpos,col=color,border=color)
}

#計算小五角星旋轉角度的函式
rotTheta<-function(posxy,posXY)
{
  atan((posXY[2]-posxy[2])/(posXY[1]-posxy[1]))+pi/2
}

#常量設定
width<-3
height<-2*width/3
d<-width/30
yshift<-height/2

#國旗的座標
Flag<-cbind(c(0,width,width,0),c(0,0,height,height))
#大五角星座標
posXY<-c(5*d,yshift+5*d)
#小五角星座標
posxy<-matrix(c(10,8,12,6,12,3,10,1),ncol=2,byrow=T)*d+matrix(c(0,yshift),nrow=4,ncol=2,byrow=T)
#小五角星旋轉角度
rottheta<-rep(0,nrow(posxy))
rottheta<-apply(posxy,1,rotTheta,posXY)

#畫紅色的國旗底面
plot(Flag,type="n",col="red",axes=F,xlim=c(0,width),ylim=c(0,height),xlab="",ylab="",main="People's Republic of China",asp=1)
polygon(Flag,density=NULL,col="red",border="red")

#畫出大五角星
star(posXY,size=3*height/20,theta=0,color="yellow")

#畫出四顆小星
for(i in 1:nrow(posxy))
{
  star(posxy[i,],size=height/20,theta=rottheta[i],color="yellow")
}