import java.awt.Color; public abstract class TakistusKomponent{ /** * Tegelik pinge klemmidel komponendi osalemisel vooluahelas. */ double tegelikPinge; /** * Tegelik komponenti läbiv vool osalemisel vooluahelas. */ double tegelikVool; /** * X-koordinaat komponendi graafilise paigutuse juures. */ int x; /** * Y-koordinaat komponendi graafilise paigutuse juures. */ int y; int valjaX, valjaY; int klemmiraadius=3; public double ymarda1koht(double arv){ return Math.round(arv*10)/10.0; } public boolean kasPihtas(int hx, int hy){ int dx=hx-x; int dy=hy-y; return Math.sqrt(dx*dx+dy*dy)<=klemmiraadius; } /** * Komponendi kuvamine etteantud graafilisse konteksti. * Näidatakse välja suurim lubatud ning tegelik võimsus, * komponendi tüüp ja kirjeldus. */ public void joonista(java.awt.Graphics g){ if(kysiTegelikV6imsus()<=suurimLubatudV6imsus()){ g.setColor(Color.black); } else { g.setColor(Color.red); } g.drawString(getClass().getName(), x, y+15); g.drawOval(x-klemmiraadius, y-klemmiraadius, 2*klemmiraadius, 2*klemmiraadius); g.drawOval(valjaX-klemmiraadius, valjaY-klemmiraadius, 2*klemmiraadius, 2*klemmiraadius); } public void joonistaAndmetega(java.awt.Graphics g){ joonista(g); g.drawString(ymarda1koht(kysiTegelikV6imsus())+"W/"+ ymarda1koht(suurimLubatudV6imsus())+"W", x, y-15); g.drawString(kirjeldus(), x, y); g.drawString(getClass().getName(), x, y+15); } public String kirjeldus(){ return koguTakistus()+" Ohm "+kysiTegelikVool()+"A "+ kysiTegelikPinge()+"V"; } public void paiguta(int ux, int uy){ paiguta(ux, uy, ux, uy+20); } public void paiguta(int ux, int uy, int uvx, int uvy){ x=ux; y=uy; valjaX=uvx; valjaY=uvy; } public void pingesta(double v){ tegelikPinge=v; tegelikVool=v/koguTakistus(); arvutaAlamelementideAndmed(tegelikVool); } public void vooluAlla(double a){ tegelikPinge=a*koguTakistus(); tegelikVool=a; arvutaAlamelementideAndmed(a); } public double kysiTegelikV6imsus(){ return tegelikPinge*tegelikVool; } public double kysiTegelikPinge(){ return tegelikPinge;} public double kysiTegelikVool(){ return tegelikVool;} public abstract void arvutaAlamelementideAndmed(double uusVool); public TakistusKomponent leiaAlamelementKohal(int hx, int hy){ if(kasPihtas(hx, hy)){ return this; } return null; } public abstract double koguTakistus(); public abstract double suurimLubatudPinge(); public boolean kasPingePiisavaltMadal(){ return suurimLubatudPinge()>=kysiTegelikPinge(); } double suurimLubatudVool(){ return suurimLubatudPinge()/koguTakistus(); } public double suurimLubatudV6imsus(){ return suurimLubatudPinge()*suurimLubatudVool(); } }