⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threetimes.java

📁 数值算法,三次样条算法源码,动态演示过程,JAVA源码
💻 JAVA
字号:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class threeTimes {
        
    /**
     * Creates a new instance of <code>Newton</code>.
     */
    public threeTimes() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new newFrame().init();
        
    }
}


class newFrame extends JFrame
{
    public void init()  
    {
    	MyPanel hello=new MyPanel();
        getContentPane().add(hello);
        hello.thread.start();

        //以下代码设置JFrame窗体的外观
        setSize(400,400);
        setLocation(200,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}

class MyPanel extends JPanel implements Runnable
{
    Thread thread;
    
    double xpoint[],ypoint[];
    double x[]={0,10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0};
    //double y[]={1.0,1.414214,1.732051,2.0,2.236068,2.449490,2.645751};
    double y[]={0.0,5,20,45,80,125,180,245,320};
    double h[],a[],c[],d[],b[],s2[],s1,s;
    double m;
    
    int N=9,i=0;
    int num;
    public MyPanel() 
    {
    	xpoint=new double[90];
    	ypoint=new double[90];
        setSize(500, 500);  
        	                 
        thread=new Thread(this);
        
        h=new double[N];
        a=new double[N];
        c=new double[N];
        d=new double[N];
        b=new double[N];
        //s1=new double[N];
        s2=new double[N];
        
        for(int k=0;k<N-1;k++)
        {
        	h[k]=x[k+1]-x[k];	
        }
        a[1]=2*(h[0]+h[1]);
        
        for(int k=2;k<N-1;k++)
        {
        	a[k]=2*(h[k-1]+h[k])-h[k-1]*h[k-1]/a[k-1];
        }
        for(int k=1;k<N;k++)
        {
        	c[k]=(y[k]-y[k-1])/h[k-1];
        }
        for(int k=0;k<N-1;k++)
        {
        	d[k]=6*(c[k+1]-c[k]);
        }
        b[1]=d[1];
        for(int k=2;k<N-1;k++)
        {
        	b[k]=d[k]-b[k-1]*h[k-1]/a[k];
        }
        /*s2[N-1]=b[N-1]/a[N-1];
        for(int k=N-2;k>0;k--)
        {
        	s2[k]=(b[k]-h[k]*s2[k+1])/a[k];
        }*/
        s2[0]=0;s2[N-1]=0;
        for(int k=0;k<N-1;k++)
        {
        	for(m=x[k];m<=x[k+1];m++)
        	{   
        		xpoint[i]=m;
        		s1=c[k+1]-s2[k+1]*h[k]/6-s2[k]*h[k]/3;
        		//s=y[k]+s1*(m-x[k])+s2[k]*(m-x[k])*(m-x[k])+(s2[k+1]-s2[k])*(m-x[k])*(m-x[k])*(m-x[k])/(6*h[k]);
        		s=y[k] + s1 * (m - x[k]) + s2[k] * (m - x[k]) * (m - x[k]) / 2 + (s2[k + 1] - s2[k]) * (m - x[k]) * (m - x[k]) * (m - x[k]) / (6 * h[k]);
        		ypoint[i]=s;
        		i++;
        	}
        }
        
    }

    public void run()  
    {
    	for(num=2;num<79;num++)          //显示前num个点
    	{
    		repaint();
    		try{
    			thread.sleep(50);		
    		}
    		catch(InterruptedException e)
    		{
    		}
    	}
    	
    }

     public void paintComponent(Graphics g)   
     {
         g.setColor(Color.white);              
         g.clearRect(0, 0, 400, 440);   

         g.setColor(Color.red);     
         g.drawLine(0, 300, 400, 300);   
         g.drawLine(200, 400, 200, 0); 
         
         g.translate(200,300);
         
         g.setColor(Color.blue);
         
         for(int i=0;i<num;i++)
         {
         	g.drawLine((int)xpoint[i],-(int)(ypoint[i]),(int)xpoint[i+1],-(int)(ypoint[i+1]));
         }
         
         g.setColor(Color.black);
         g.drawString("x[ ]={0,10,20,30,40,50,60,70,80}",-190,-280);
         g.drawString("y[ ]={0.0,5,20,45,80,125,180,245,320}",-190,-260);
         
         g.drawString("三次自然样条",-180,-200);
         //g.drawString(""+xpoint[60]+"    "+ypoint[60],-180,-150);
     }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -