「java雪花特效」java 雪花算法生成id

博主:adminadmin 2023-03-23 02:06:06 949

今天给各位分享java雪花特效的知识,其中也会对java 雪花算法生成id进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

详解如何用java实现Koch雪花的绘制

Koch雪花其实就是一种Koch曲线。

Koch曲线是一个数学曲线,同时也是早期被描述的一种分形曲线。它由瑞典数学家Helge von Koch在1904年发表的一篇题为“从初等几何构造的一条没有切线的连续曲线”的论文中提出。有一种Koch曲线是象雪花一样,被称为Koch雪花(或Koch星),它是由三条Koch曲线围成的等边三角形。至于更详细的请读者百度百科。

如图所示:

解决方案

设想从一个线段开始,根据下列规则构造一个Koch曲线:

1.三等分一条线段;

2.用一个等边三角形替代第一步划分三等分的中间部分;

3.在每一条直线上,重复第二步。

Koch曲线是以上步骤地无限重复的极限结果。

Koch曲线的长度为无穷大,因为以上的变换都是一条线段变四条线段,每一条线段的长度是上一级的1/3,因此操作n步的总长度是(4/3)n:若n→∞,则总长度趋于无穷。Koch曲线的分形维数是log 4/log 3 ≈ 1.26,其维数大于线的维数(1),小于Peano填充曲线的维数(2)。

Koch曲线是连续的,但是处处不可导的。

Koch雪花的面积是 2* √3 * ssup2;/5 ,这里的s是最初三角形的边长,Koch雪花的面积是原三角形面积的8/5,它成为一条无限长的边界围绕着一个有限的面积的几何对象。

java 能否实现桌面下雪花的效果?使用swing?

/*

*实现在窗体上随机布满300个雪花("*"),滚动

*在上次的课基础上增加了for循环(一次要产生300个变量),随机数,数组 ;

*下面的序号为步骤

*/ import java.awt.* ; //(3)导入awt包

public class Star {

public static void main(String args[]) {

Frame w = new Frame() ; //(1)绘制窗体

w.setSize(1024,768) ; //(4)把窗体布满全屏

w.setBackground(Color.BLACK) ; //(5)背景为黑颜色

MyPanel mp = new MyPanel() ; //(7)把MyPanel对象mp,添加到窗体w上

w.add(mp) ;

Thread t = new Thread(mp) ;

t.start() ; //(12)启动线程

w.show(); //(2)显示窗体

}

}

//(6)继承Panel类

class MyPanel extends Panel implements Runnable { //(11)实现Runnable接口

int x[] = new int[300] ;

int y[] = new int[300] ; //(8)定义300个数组变量 MyPanel(){

for(int i = 0;i 300; i++) {

x[i] = (int)(Math.random()*1024) ;

y[i] = (int)(Math.random()*768) ; //(9)当程序走到第6步的时候程序就会调用构成函数

} //由于随机数是从0-1之间的数任意产出所以x乘以1024,y乘以768再转换为int类型

}

public void paint(Graphics g) {

for(int i = 0;i 300; i++) {

g.setColor(Color.WHITE) ;

g.drawString("*",x[i],y[i]) ;

//g.drawString("*",30,30) ;(7)绘制一个星星在屏幕的x=30,y=30的位置上

} //(10)绘制300个雪花,把坐标30,30,改成x[i],y[i] ;

} //做到这步可以实现在黑色的天空布满300个星星

public void run() {

while(true) { //(13)实现产生300个雪花往下落死循环

for(int i = 0 ; i 300; i++) {

y[i]++ ; //(14)y坐标不断的+1

if(y[i] 768){ //(18)如果y轴坐标大于768时,则y = 0,回到窗体的顶部

y[i] = 0 ;

}

}

try{ //(16)用try,catch解决线程休眠的异常

Thread.sleep(20) ; //(15)在每次y轴坐标+1后线程休眠20毫秒

}catch(Exception e) {}

repaint() ; //(17)雪花在新的位置重画

}

}

}

求用JAVA制作的飘雪花的效果

import java.applet.Applet;

import java.awt.*;

import javax.swing.JFrame;

import java.awt.image.BufferedImage;

import java.util.Random;

public class SnowPic extends Applet implements Runnable{

    Thread mainThread;

    Image offScreen,gAlc[];

    Random rand;

    int stopFlag,snows,wind,threadSleep,snowSize;

    int[] snowX,snowY;

    long stopTime =0;

    Dimension dim;

    MediaTracker mt;

    public SnowPic(){

    }

    int getParameter(String s1,int s2){

        String s=null;

        try{

            s=getParameter(s1);

        }catch(NullPointerException ex){

        }

        return(s !=null)?Integer.parseInt(s):s2;

    }

    int getParameter(String s1, int s2, int max, int min){

        String s=null;

        try{

            s=getParameter(s1);

        }catch(NullPointerException ex){

        }

        if(s!=null){

            if((s2=Integer.parseInt(s))max){

                return max;

            }else if (s2min){

                return min;

            }else{

                return s2;

            }

            

        }else{

            return s2;

        }

    }

    String getParameter(String s1 , String s2){

        String s=null;

        try{

            s=getParameter(s1);

        }catch(NullPointerException ex){

        }

        return (s!=null)?s:s2;

    }

    

    public void init(){

        rand =new Random();

        dim =getSize();

        snows       =getParameter("snows", 100, 500,0);

        snowSize    =getParameter("snowSize",3,10,3);

        threadSleep =getParameter("threadSleep",80,1000,10);

        snowX = new int [snows];

        snowY = new int [snows];

        for( int i=0;isnows;i++){

            snowX[i]=rand.nextInt()%(dim.width/2)+dim.width/2;

            snowY[i]=rand.nextInt()%(dim.height/2)+dim.height/2;

        }

        mt =new MediaTracker(this);

        gAlc= new Image[1];

        try{

            gAlc[0]=getImage(getDocumentBase(), getParameter("graphic","test.gif"));

            offScreen=createImage(dim.width, dim.height);

        }catch(Exception ex){

            gAlc[0]=new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB );

            offScreen=new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB );

        }

        mt.addImage(gAlc[0],0);

        try{

            mt.waitForID(0);

        }catch(InterruptedException ex) {

            return;

        }

        stopFlag =0;

    }

    public void start(){

        if (mainThread==null){

            mainThread=new Thread(this);

            mainThread.start();

        }

    }

    public void stop(){

        mainThread =null;

    }

    public void run(){

        while(mainThread !=null){

            try{

                Thread.sleep(threadSleep);

            }catch(InterruptedException ex) {return;}

            repaint();

        }

    }

    public void drawBackSnow(Graphics g){

        g.setColor(Color.white);

        for(int i=0;isnows;i++){

            g.fillOval(snowX[i],snowY[i],snowSize,snowSize);

            snowX[i]+=rand.nextInt()%2+wind;

            snowY[i]+=(rand.nextInt()%6+5)/5+1;

            if(snowX[i]=dim.width) snowX[i]=0;

            if(snowX[i]0) snowX[i]=dim.width -1;

            if(snowY[i]=dim.height ||snowY[i]0){

                snowX[i] =Math.abs(rand.nextInt()%dim.width);

                snowY[i] =0;

            }

        }

        wind =rand.nextInt()%5 -2;

    }

    public void paint(Graphics g){

        offScreen.getGraphics().setColor(Color.black);

        offScreen.getGraphics().fillRect(0,0,dim.width,dim.height);

        offScreen.getGraphics().drawImage(gAlc[0],0,0,this);

        drawBackSnow(offScreen.getGraphics());

        g.drawImage(offScreen,0,0,null);

    }

    public void update(Graphics g){

        paint(g);

    }

    

    public static void main(String args[]){

        SnowPic snow=new SnowPic();

        snow.setBounds(0,0, 500, 500);

        snow.init();

        JFrame jf=new JFrame("SnowPic");

        jf.setSize(500, 500);

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jf.add(snow);

        jf.setVisible(true);

        snow.start();

    }

}

请参考

Java求雪花堆积效果

基本上正确,但是有几个地方需要改改。

第一点:

// 建议用JFrame来弄,并在关闭时退出程序 

JFrame w = new JFrame();// 创建一个面板

w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭窗口时退出程序

w.setSize(800, 600);// 设置面板大小

MyJPanel p = new MyJPanel();// 创建了一个画布

p.setBackground(Color.BLACK);// 设置背景颜色为黑色

w.add(p);

第二点:随机数放到run的for循环生成

for (int i = 0; i  100; i++) {

   x[i] = (int) (Math.random() * 800);

   y[i] = (int) (Math.random() * 600);

}

java雪花特效的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 雪花算法生成id、java雪花特效的信息别忘了在本站进行查找喔。