//
/* ----------------------------------------------------------------------------------------------
transistor.java トランジスタ ver. 1.00 (JDK 1.02)
ueyama@infonet.co.jp 1999.03.26
---------------------------------------------------------------------------------------------- */
import java.applet.Applet;
import java.awt.*;
import java.lang.Math;
import java.util.*;
public class transistor extends Applet implements Runnable
{
int Ib=0; // ベース電流
int Sw=0; // コレクタ SW 0:OFF 1:ON
int Wait=128; // 表示変更待ち時間 (msec)
int Ex[]=new int[128], Ey[]=new int[128]; // エミッタ電子位置座標
int Cx[]=new int[80], Cy[]=new int[80]; // コレクタ電子位置座標
int Bx[]=new int[80], By[]=new int[80]; // ベース正孔位置座標
int Qe0, Qb0, Qc0; // 電子・正孔初期数
int Qem, Qbm; // 電子・正孔増加目標数
int Qtye, Qtyc, Qtyb; // 電子・正孔数
boolean Run=true;
boolean Er[]=new boolean[128], Cr[]=new boolean[80], Br[]=new boolean[80];
boolean Ec[]=new boolean[128];
Image Gif;
Image buf=null;
Thread th=null;
int R,G,B;
Random Rnd=new Random();
int Rt=8;
public void init()
{
R=Integer.parseInt(getParameter("bg_red"));
G=Integer.parseInt(getParameter("bg_green"));
B=Integer.parseInt(getParameter("bg_blue"));
setBackground(new Color(R,G,B));
MediaTracker mt=new MediaTracker(this);
Gif=getImage(getCodeBase(),"npn_tr.gif");
mt.addImage(Gif, 0);
try
{
mt.waitForID(0);
}
catch(InterruptedException e){};
buf=createImage(size().width,size().height);
Qem=Qtye=Qe0=16; Qbm=Qtyb=Qb0=6; Qtyc=Qc0=16; // 電子・正孔初期数
carrier_initialize();
}
public void start()
{
if(th==null)
{
th=new Thread(this);
th.start();
}
}
public boolean inside(int x, int a, int b)
{
return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
}
public void carrier_initialize() // 電子・正孔の初期配置
{
int i,j,k,m,x,y;
for(i=0;i0)
{
Qem=Qe0*((Sw==1)?3:2)*(Ib+1)/2;
Qbm=Qb0*2*(Ib+1)/2;
}
else
{
Qtyc=Qc0; Qtye=Qem=Qe0; Qtyb=Qbm=Qb0;
}
}
public int move_x() // 電子・正孔の進行
{
int x=Math.abs(Rnd.nextInt())%100;
if(x<8) return 0;
else if(x<16) return 1;
else if(x<32) return 2;
else if(x<64) return 3;
else return 4;
}
public int move_y() // 電子・正孔の揺動
{
int x=Math.abs(Rnd.nextInt())%100;
if(x<10) return 2;
else if(x<20) return 1;
else if(x<30) return -1;
else if(x<40) return -2;
else return 0;
}
public int new_electron(int y, int n, int dis) // 電子の供給
{
int i,j=0,x=105;
for(i=0;i
戻る