📄 threetimes.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 + -