欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言绘制五星红旗

程序员文章站 2022-04-16 15:43:31
...
#画五角星的函数
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 *",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")
}
相关标签: R语言 r r语言