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

📄 三次自然样条.txt

📁 三次自然样条插值算法
💻 TXT
字号:
import java.util.*;
import java.awt.*;
import javax.swing.*;
public class chazhi
{
	public static void main(String args[])
	{
		new CH().init(); 
	}
}
class CH extends JFrame
{
	public void init()
	{
		Container con=getContentPane();
		con.add(new MyPanel());
		setSize(1000,400);
		setVisible(true);
		validate();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

class MyPanel extends JPanel implements Runnable 
{
	double x[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
	double y[]={0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400};
	double a[]=new double[20];
	double x1,y1;
	int n=20;
	double t,m;
	double nx=0,ny=0;
	double cx=0,cy=0;
	public MyPanel()
	{
		new Thread(this).start();
	}

	
	public void run()
	{
		double h[] = new double[20];
		double ai[] = new double[20];
		double c[] = new double[20];
		double d[] = new double[20];
		double b[] = new double[20];
		double sd = 0;
		double sdd[] = new double[20];
			
		for(int k = 0; k < 19; k++)
		{
			h[k] = x[k + 1] - x[k];
		}
			
		ai[1] = 2 * (h[0] + h[1]);
			
		for(int k = 2; k < 19; k++)
		{
			a[k] = 2 * (h[k - 1] + h[k]) - h[k] * h[k] /a[k - 1];
		}
			
		for(int k = 1; k < 20; k++)
		{
			c[k] = (y[k] - y[k - 1])/h[k - 1];
		}
			
		for(int k = 1; k < 19; k++)
		{
			d[k] = 6 * (c[k + 1] - c[k]);
		}
			
		b[1] = d[1];
			
		for(int k = 2; k < 19; k++)
		{
			b[k] = d[k] - b[k - 1] * h[k - 1] / a[k - 1];
		}
			
		sdd[0] = 0;
		sdd[19] = 0;
			
		for(int k = 0; k < 19; k++)
		{
			for(cx = x[k]; cx <= x[k + 1]; cx += 0.01)
			{
				sd = c[k + 1] - sdd[k + 1] * h[k] / 6 - sdd[k] * h[k] / 3;
				cy = y[k] + sd * (cx - x[k]) + sdd[k] * (cx - x[k]) * (cx - x[k]) / 2 + (sdd[k + 1] - sdd[k]) * (cx - x[k]) * (cx - x[k]) * (cx - x[k]) / (6 * h[k]);
				m=cy;
				repaint();
				try
				{
					Thread.sleep(1);
				}
				catch(InterruptedException Ie3){}
			}
		}
	}



	public void paintComponent(Graphics g)
	{
		g.setColor(Color.red);
		g.drawLine(100,0,100,400);
		g.drawLine(0,200,200,200);

		g.setColor(Color.green);
		for (int i=0;i<n;i++)
		{
			g.fillOval((int)(x[i]*5+100),(int)((-y[i]+200)),3,3);
		}


		g.setColor(Color.black);
		g.fillOval((int)(cx*5+100),(int)(-m+200),2,2);
	}
}

⌨️ 快捷键说明

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