import java.applet.*;
import java.math.*;
import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

import javax.swing.*;
import java.math.*;



class cl_SchwingRech 
{

	double l = 100;
	double EI = 40000;
	double c = 0.6;
	
	double A = 100;
	void rech(double x,double omega, double m, double F)
	{
		double c1,c2,c3,c4;
		double k = Math.sqrt(Math.sqrt(785*A*omega*omega/EI));
		c1=-(c*Math.sinh(l*k)*F)/(2*c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*
				Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k)-(c*Math.sin(l*k)*F)/(2*c*
				Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*
				c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k);
		c2=(c*Math.cosh(l*k)*F)/(2*c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*
				Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k)+(c*Math.cos(l*k)*F)/(2*c*
				Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*
				c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k);
		c3=(c*Math.sinh(l*k)*F)/(2*c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*
				Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k)+(c*Math.sin(l*k)*F)/(2*c*
				Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*
				c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k);
		c4=-(c*Math.cosh(l*k)*F)/(2*c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*
				Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k)-(c*Math.cos(l*k)*F)/(2*c*
				Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-2*c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+2*k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+2*k*k*k*m*omega*omega-2*
				c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-2*c*k*k*k);
		f=-(c*Math.cos(l*k)*Math.sinh(l*k)*F)/(c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+
				k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+k*k*k*m*omega*omega-c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-c*k*k*k)+(c*Math.cosh(l*k)*Math.sin(l*k)*F
				)/(c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+k*k*k*m*omega*omega-c*
				k*k*k*Math.cos(l*k)*Math.cosh(l*k)-c*k*k*k)-(k*k*k*Math.cos(l*k)*Math.cosh(l*k)*F)/(c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-c*
				Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+k*k*k*m*omega*omega-c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-c*k*k*k)-
				(k*k*k*F)/(c*Math.cos(l*k)*Math.sinh(l*k)*m*omega*omega-c*Math.cosh(l*k)*Math.sin(l*k)*m*omega*omega+k*k*k*Math.cos(l*k)*Math.cosh(l*k)*m*omega*omega+
				k*k*k*m*omega*omega-c*k*k*k*Math.cos(l*k)*Math.cosh(l*k)-c*k*k*k);
		nq = c1*Math.cos(k*x)+c2*Math.sin(k*x)+c3*Math.cosh(k*x)+c4*Math.sinh(k*x);
		System.out.println(f);
	}
	double f;
	double Tq;
	double nq;
}

public class Cl_Tilgung_app extends Applet{
	Scrollbar sb_omega, sb_masse, sb_federk;
	TextField tx_omega, tx_masse, tx_federk;
	double Erg_Plot[] = new double[101];//double[Anzahl der t-schritte]

	
	double omega = 0.25;
	//double Feinheit = 0.01;
	double Federk = 0.5;
	double masse1 = 0.5;
	double ausl;
    Graphics Buffergrafik;
    Image offscreen;
	

	public class Tl_Panel extends JPanel
	{
		cl_SchwingRech rechnen = new cl_SchwingRech();
		public class Th_rech extends Thread
		{
			
			
			public void run()
			{
				for(int i = 0; i< 100; i++)
				{
					rechnen.rech((double)i/10, omega, masse1, Federk);
					Erg_Plot[i] = rechnen.nq;
				}
				this.stop();
				ausl = rechnen.f-Erg_Plot[100];
			}
		}
		public void paint(Graphics g)
		{
			int ym = getHeight()/2;
	        int xm = getWidth();
			if (offscreen == null){
		    	offscreen  = createImage(getWidth(),getHeight());}
			Buffergrafik = offscreen.getGraphics(); 
			Buffergrafik.clearRect(0, 0, getWidth(), getHeight());
			double yskal =1;//= skali*getHeight();
			Thread rechnen = new Th_rech();
			rechnen.run();
			Buffergrafik.drawLine(20, ym , 520, ym);
			Buffergrafik.drawLine(20, ym-15 , 20, ym+15);
			Buffergrafik.setColor(Color.BLUE);
		    for (int z = 0; z < 99; z++)
	        {
		    	Buffergrafik.drawLine( (int)(20+ z*5),(int)(ym-  Erg_Plot[z]*yskal ),(int) (20+ (z +1)*5),(int)  (ym-(Erg_Plot[z+1]*yskal)));
	        	
	        }
		    Buffergrafik.setColor(Color.RED);
		    Buffergrafik.drawLine( (int)(515),(int)(ym-  Erg_Plot[99]*yskal ),(int) 515,(int)(ym+ausl+10) );
        	Buffergrafik.drawOval(505, (int)(ym+ausl), 20, 20);
			 if (offscreen != null)
	  	    	 g.drawImage(offscreen, 0, 0, this);
		}
		public void update(Graphics g)
		{
			paint(g);
		}
	}
	public void init()
	{
		setLayout(null);
		
		Tl_Panel C_Panel = new Tl_Panel();
		C_Panel.setBounds(100, 10, 600, 440);
		add(C_Panel);
		
		Label l_omega = new Label("omega");
		l_omega.setBounds(40, 15, 46, 20);
		add(l_omega);
		
		Label l_masse = new Label("Masse");
		l_masse.setBounds(740, 15, 46, 20);
		add(l_masse);
		
		Label l_federk = new Label("Federkonstante");
		l_federk.setBounds(810, 15, 116, 20);
		add(l_federk);
		
		tx_omega = new TextField();
		tx_omega.setBounds(40, 280, 46, 20);
		tx_omega.setText("0.25");
		tx_omega.disable();
		add(tx_omega);
		
		tx_federk = new TextField();
		tx_federk.setBounds(840, 280, 46, 20);
		tx_federk.setText("0.25");
		tx_federk.disable();
		add(tx_federk);
		
		tx_masse = new TextField();
		tx_masse.setBounds(730, 280, 46, 20);
		tx_masse.setText("0.5");
		tx_masse.disable();
		add(tx_masse);
		
		sb_federk = new Scrollbar(Scrollbar.VERTICAL, 0,1,1,100);
		sb_federk.setBounds(859, 40, 17, 231);
		sb_federk.setValue(25);
		add(sb_federk);
		class fChange implements AdjustmentListener{
		    public void adjustmentValueChanged(AdjustmentEvent ae){
		    	Federk = sb_federk.getValue();
		    	Federk = Federk/100;
		    	repaint();
		    	tx_federk.setText(String.valueOf(Federk));
		    }
		  }
		sb_federk.addAdjustmentListener(new fChange());
		
		sb_omega = new Scrollbar(Scrollbar.VERTICAL, 0,1,1,100);
		sb_omega.setBounds(59, 40, 17, 231);
		sb_omega.setValue(25);
		add(sb_omega);
		class oChange implements AdjustmentListener{
		    public void adjustmentValueChanged(AdjustmentEvent ae){
		    	omega = sb_omega.getValue();
		    	omega = omega/100;
		    	repaint();
		    	tx_omega.setText(String.valueOf(omega));
		    }
		  }
		sb_omega.addAdjustmentListener(new oChange());
		
		sb_masse = new Scrollbar(Scrollbar.VERTICAL, 0,1,1,100);
		sb_masse.setBounds(759, 40, 17, 231);
		sb_masse.setValue(25);
		add(sb_masse);
		class mChange implements AdjustmentListener{
		    public void adjustmentValueChanged(AdjustmentEvent ae){
		    	masse1 = sb_masse.getValue();
		    	masse1 = masse1/50;
		    	System.out.print(masse1);
		    	repaint();
		    	tx_masse.setText(String.valueOf(masse1));
		    }
		  }
		sb_masse.addAdjustmentListener(new mChange());
	}
}
