请选择 进入手机版 | 继续访问电脑版

技术控

    今日:22| 主题:54092
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 国庆节,我们用代码来画个国旗~

[复制链接]
另一种晚安 发表于 2016-10-4 10:25:18
290 3

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~

如果你刚好闲的无聊,想想以前每次放假,本来放假前想好出去干啥干啥的,最后都是窝在家里敲代码了。可能很多人还是如此,那么怎样给这一天的代码的添上一点色彩?为何不做点有意思的东西?  Use your CODE!  恰巧是国庆,那就让我们以一种不同的方式来庆祝她。庆祝祖国的67岁生日。让我们用不同的语言来编织我们的五星红旗……(分别是Java、HTML、Python、R、C、C++)
   第一个:HTML + JavaScript (来自:  RunJS   )
  代码(测试通过):
  1. <html>
  2. <head>
  3. <script>
  4. var col=new Array("red","brown");
  5. var ticker=0;
  6. var step=0;
  7. function drawBackground(){
  8. var g=document.getElementById("background").getContext("2d");
  9. var grd=g.createLinearGradient(-560+ticker, 0, 1400+ticker,0);
  10. for (var i=0; i<10; i++)
  11. grd.addColorStop(i/10,col[(i + step)%col.length]);
  12. ticker=ticker+10;
  13. if (ticker>=196){
  14.         ticker=0;
  15.         step++;
  16.         }
  17. g.fillStyle=grd;
  18. g.fillRect(0,0,1600,700);
  19. }
  20. function preperation(){
  21.         setInterval('drawBackground()',100);
  22.   }
  23. </script>
  24. <style type="text/css">
  25. #myCanvas{
  26. z-index:2;       
  27. position:absolute; left:0px; top:-5px;
  28. }
  29. #background{
  30.         z-index:1;
  31.         position:absolute;
  32.         left:0px;
  33.         top:0px;
  34. }
  35. </style>
  36. </head>
  37. <body onLoad="preperation()">
  38. <canvas id="myCanvas" width="900" height="600" >
  39. Your browser does not support the HTML5 canvas tag.
  40. </canvas>
  41. <canvas id="background" width="1600" height="700" ></canvas>
  42. <script>
  43. var x=new Array(0,12,54,18,28,0,-28,-18,-54,-12,0);    //五角星样品坐标xx数组
  44. var y=new Array(-53,-17,-17,1,45,19,45,1,-17,-17,-53); //五角星样品坐标y数组
  45. var c=document.getElementById("myCanvas");
  46. var ctx=c.getContext("2d"); //获得画笔
  47. //样品数组x轴坐标 a , 和y轴坐标 b
  48. //指定位置[locationX,locationY]
  49. //真实五角星的大小,与样品五角星尺寸之比 f
  50. //五角星画完后,旋转的角度 rotation
  51. function star(a,b,locationX,locationY,f,rotation){
  52. ctx.save();//记录画图(画笔)的初始环境
  53. ctx.translate(locationX,locationY);
  54. ctx.rotate(rotation*Math.PI/180.0);
  55. ctx.beginPath();
  56. ctx.moveTo(Math.round(a[0]*f),Math.round(b[0]*f));
  57. for (var i=1;i<a.length;i++)
  58. ctx.lineTo(Math.round(a[i]*f),Math.round(b[i]*f));
  59. ctx.closePath();
  60. ctx.fillStyle="yellow";
  61. ctx.fill();
  62. ctx.restore();//还原画图(画笔)的初始环境
  63. }
  64. star(x,y,165,165,1.4,0);//画大五角星
  65. star(x,y,301,65,0.5,30);//画小五角星
  66. star(x,y,362,126,0.5,-30);//画小五角星
  67. star(x,y,359,216,0.5,0);//画小五角星
  68. star(x,y,301,273,0.5,30);//画小五角星
  69. </script>
  70. </body>
  71. </html>
复制代码
运行效果截图:
   

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~
第二个:Java (  java 五星红旗   )
  代码(测试通过):
  1. import java.awt.RenderingHints;
  2. import java.awt.geom.AffineTransform;
  3. import java.awt.geom.GeneralPath;
  4. import javax.swing.JFrame;
  5. public class NationalFlag extends JFrame {
  6.     private int width = 288,height = width/3*2;  
  7.     private double maxR = 0.15, minR = 0.05;  
  8.     private double maxX = 0.50, maxY = 0.50;  
  9.     private double[] minX = {0.75, 0.85, 0.85, 0.75};  
  10.     private double[] minY = {0.35, 0.45, 0.60, 0.70};  
  11.      
  12.     public NationalFlag() {
  13.         setTitle("国旗  - by fants(铂金小鸟)");
  14.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  15.     }
  16.      
  17.     @Override
  18.     public void paint(java.awt.Graphics graphics) {
  19.         super.paint(graphics);
  20.         java.awt.Graphics2D g = (java.awt.Graphics2D)graphics;
  21.         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  22.          
  23.         //棋面
  24.         g.setColor(java.awt.Color.red);
  25.         g.fillRect(50, 50, width, height);
  26.         g.setColor(java.awt.Color.yellow);
  27.         //画大星星
  28.         double ox = height*maxX, oy = height*maxY;
  29.         g.fill(createPentacle(ox,oy,height*maxR,-Math.PI/2));  
  30.          
  31.         //画小星星
  32.         for(int idx =0;idx < 4;idx ++){  
  33.             double sx = minX[idx]*height, sy = minY[idx]*height;  
  34.             double theta = Math.atan2(oy-sy,ox-sx);  
  35.             g.fill(createPentacle(sx,sy,height*minR,theta));  
  36.         }  
  37.     }
  38.     /**
  39.      * 创建一个五角星形状. 该五角星的中心坐标为(sx,sy),中心到顶点的距离为radius,其中某个顶点与中心的连线的偏移角度为theta(弧度)
  40.      *
  41.      * @return pentacle 一个☆
  42.      */
  43.     public static java.awt.Shape createPentacle(double sx, double sy, double radius,double theta) {
  44.         final double arc = Math.PI / 5;
  45.         final double rad = Math.sin(Math.PI / 10) / Math.sin(3 * Math.PI / 10);
  46.         GeneralPath path = new GeneralPath();
  47.         path.moveTo(1, 0);
  48.         for (int idx = 0; idx < 5; idx++) {
  49.             path.lineTo(rad * Math.cos((1 + 2 * idx) * arc),rad * Math.sin((1 + 2 * idx) * arc));
  50.             path.lineTo(Math.cos(2 * (idx + 1) * arc),Math.sin(2 * (idx + 1) * arc));
  51.         }
  52.         path.closePath();
  53.         AffineTransform atf = AffineTransform.getScaleInstance(radius, radius);
  54.         atf.translate(sx / radius, sy / radius);
  55.         atf.rotate(theta);
  56.         return atf.createTransformedShape(path);
  57.     }
  58.     public static void main(String[] args) {
  59.         NationalFlag flag = new NationalFlag();
  60.         flag.setBounds(100, 100, 400, 400);
  61.         flag.setVisible(true);
  62.     }
  63. }
复制代码
运行效果截图:
  

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~
   第三个:Python(版本是2.7,如果是3.x的请自行进行一些修改来完成国旗哟!具体修改看一看评论区哟。)(  python,求一份画五星红旗的代码   )
  代码(测试通过):
  1. #coding=utf-8
  2. '''
  3. Created on 2014-11-17
  4. @author: Neo
  5. '''
  6. import turtle
  7. import math
  8. def draw_polygon(aTurtle, size=50, n=3):
  9.     ''' 绘制正多边形
  10.     args:
  11.         aTurtle: turtle对象实例
  12.         size: int类型,正多边形的边长
  13.         n: int类型,是几边形        
  14.     '''
  15.     for i in xrange(n):
  16.         aTurtle.forward(size)
  17.         aTurtle.left(360.0/n)
  18. def draw_n_angle(aTurtle, size=50, num=5, color=None):
  19.     ''' 绘制正n角形,默认为黄色
  20.     args:
  21.         aTurtle: turtle对象实例
  22.         size: int类型,正多角形的边长
  23.         n: int类型,是几角形   
  24.         color: str, 图形颜色,默认不填色
  25.     '''
  26.     if color:
  27.         aTurtle.begin_fill()
  28.         aTurtle.fillcolor(color)
  29.     for i in xrange(num):
  30.         aTurtle.forward(size)
  31.         aTurtle.left(360.0/num)
  32.         aTurtle.forward(size)
  33.         aTurtle.right(2*360.0/num)
  34.     if color:
  35.         aTurtle.end_fill()
  36. def draw_5_angle(aTurtle=None, start_pos=(0,0), end_pos=(0,10), radius=100, color=None):
  37.     ''' 根据起始位置、结束位置和外接圆半径画五角星
  38.     args:
  39.         aTurtle: turtle对象实例
  40.         start_pos: int的二元tuple,要画的五角星的外接圆圆心
  41.         end_pos: int的二元tuple,圆心指向的位置坐标点
  42.         radius: 五角星外接圆半径
  43.         color: str, 图形颜色,默认不填色   
  44.     '''
  45.     aTurtle = aTurtle or turtle.Turtle()
  46.     size = radius * math.sin(math.pi/5)/math.sin(math.pi*2/5)
  47.     aTurtle.left(math.degrees(math.atan2(end_pos[1]-start_pos[1], end_pos[0]-start_pos[0])))
  48.     aTurtle.penup()
  49.     aTurtle.goto(start_pos)
  50.     aTurtle.fd(radius)
  51.     aTurtle.pendown()
  52.     aTurtle.right(math.degrees(math.pi*9/10))
  53.     draw_n_angle(aTurtle, size, 5, color)
  54. def draw_5_star_flag(times=20.0):
  55.     ''' 绘制五星红旗
  56.     args:
  57.         times: 五星红旗的规格为30*20, times为倍数,默认大小为10倍, 即300*200
  58.     '''
  59.     width, height = 30*times, 20*times
  60.     # 初始化屏幕和海龟
  61.     window = turtle.Screen()
  62.     aTurtle = turtle.Turtle()
  63.     aTurtle.hideturtle()
  64.     aTurtle.speed(10)
  65.     # 画红旗
  66.     aTurtle.penup()
  67.     aTurtle.goto(-width/2, height/2)
  68.     aTurtle.pendown()
  69.     aTurtle.begin_fill()
  70.     aTurtle.fillcolor('red')
  71.     aTurtle.fd(width)
  72.     aTurtle.right(90)
  73.     aTurtle.fd(height)
  74.     aTurtle.right(90)
  75.     aTurtle.fd(width)
  76.     aTurtle.right(90)
  77.     aTurtle.fd(height)
  78.     aTurtle.right(90)   
  79.     aTurtle.end_fill()
  80.     # 画大星星
  81.     draw_5_angle(aTurtle, start_pos=(-10*times, 5*times), end_pos=(-10*times, 8*times), radius=3*times, color='yellow')  
  82.     # 画四个小星星
  83.     stars_start_pos = [(-5, 8), (-3, 6), (-3, 3), (-5, 1)]
  84.     for pos in stars_start_pos:
  85.         draw_5_angle(aTurtle, start_pos=(pos[0]*times, pos[1]*times), end_pos=(-10*times, 5*times), radius=1*times, color='yellow')  
  86.     # 点击关闭窗口
  87.     window.exitonclick()
  88. if __name__ == '__main__':
  89.     draw_5_star_flag()
复制代码
运行效果截图:
  

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~
   第四个:R(抱歉不会R,这一个没有在本地测试过:  使用R画国旗_xiaoou_hu_新浪博客   )
  代码(没有测试):
  1. star<-function(posXY,size=1,theta=0,color="yellow")
  2. {
  3. alpha<-2*pi/5
  4. R<-size
  5. r<-sin(pi/10)*R/sin(7*pi/10)
  6. pointpos<-matrix(0,nrow=10,ncol=2)
  7. Beta<-(pi/10+theta)+(0:4)*alpha
  8. pointpos[seq(1,9,2),]<-cbind(cos(Beta)*R+posXY[1],sin(Beta)*R+posXY[2])
  9. Beta<-(3*pi/10+theta)+(0:4)*alpha
  10. pointpos[seq(2,10,2),]<-cbind(cos(Beta)*r+posXY[1],sin(Beta)*r+posXY[2])
  11. polygon(pointpos,col=color,border=color)
  12. }
  13. #计算小五角星旋转角度的函数
  14. rotTheta<-function(posxy,posXY)
  15. {
  16. atan((posXY[2]-posxy[2])/(posXY[1]-posxy[1]))+pi/2
  17. }
  18. #常量设置
  19. width<-3
  20. height<-2*width/3
  21. d<-width/30
  22. yshift<-height/2
  23. #国旗的坐标
  24. Flag<-cbind(c(0,width,width,0),c(0,0,height,height))
  25. #大五角星坐标
  26. posXY<-c(5*d,yshift+5*d)
  27. #小五角星坐标
  28. 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)
  29. #小五角星旋转角度
  30. rottheta<-rep(0,nrow(posxy))
  31. rottheta<-apply(posxy,1,rotTheta,posXY)
  32. #画红色的国旗底面
  33. 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)
  34. polygon(Flag,density=NULL,col="red",border="red")
  35. #画出大五角星
  36. star(posXY,size=3*height/20,theta=0,color="yellow")
  37. #画出四颗小星
  38. for(i in 1:nrow(posxy))
  39. {
  40. star(posxy[i,],size=height/20,theta=rottheta[i],color="yellow")
  41. }
复制代码
运行效果截图:
   

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~
用C、和C++去画国旗,给两个参考链接,然后留给你们去测试吧~
    C语言也能画国旗   、  使用C++画中国国旗   、  C语言画国旗——窗口编程实现   
  

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~
  
       
  • 程序员常用的技术网站 - 学习编程 - 知乎专栏   
  • 如何学习Python爬虫[入门篇]? - 学习编程 - 知乎专栏   
  • 哪些知乎收藏夹关注数超过一万? - 学习编程 - 知乎专栏  
   

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~
  掘金   是一个高质量的技术社区,从 Swift 到 React Native,性能优化到开源类库,让你不错过把互联网开发的每一个技术干货。当然你可以选择下载他们的app:点击  链接   或者各大应用市场搜索「掘金」,技术干货尽在掌握中。赶紧去看看吧。

国庆节,我们用代码来画个国旗~

国庆节,我们用代码来画个国旗~



上一篇:Hack Crashes Linux Distros with 48 Characters of Code
下一篇:整系数Discrete Fourier transform技巧
頭痛~出賣了我 发表于 2016-10-18 11:11:51
我只想安静地做个美男子
回复 支持 反对

使用道具 举报

岸上的鱼儿 发表于 2016-10-26 16:54:59
楼主,你妈妈喊你回家吃饭!
回复 支持 反对

使用道具 举报

兰兴 发表于 2016-11-9 19:40:53
轻轻的手滑
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )

© 2001-2017 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表