加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用R画国旗

(2010-12-13 15:50:18)
标签:

教育

分类: 技术流的逆袭

灵感来自国庆节前人人网上看到的帖子。

 

————————————————————————————

国旗尺寸的主要参考资料:

http://zhidao.baidu.com/question/77159113.html?si=1

————————————————————————————

 

主要结果:

http://s5/middle/7015676c49745ebfbe2a4&690&690

—————————————————————————————

PS:新浪博客不支持矢量格式的pdf等格式,否则会更加清晰。

—————————————————————————————

代码如下:

—————————————————————————————

#画五角星的函数
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")
}

—————————————————————————————

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有