package ubertask; import javax.swing.*; import java.awt.*; /** * * @author Максим */ public class Drawer extends JPanel { int NS1=1; //Number of sids in first polygon int LS1=1; int X1=1; int Y1=1; double R1=1; int NS2=1; int LS2=1; int X2=1; int Y2=1; double R2=1; int Xmax, Ymax, Xmin, Ymin; Polygon p1 = new Polygon(); Polygon p2 = new Polygon(); void Drawer() { //p1 = new Polygon(); //p2 = new Polygon(); } public void setFilds(int fNS1, int fLS1, int fX1, int fY1, int fNS2, int fLS2, int fX2, int fY2) { NS1 = fNS1; LS1 = fLS1; X1 = fX1; Y1 = fY1; NS2 = fNS2; LS2 = fLS2; X2 = fX2; Y2 = fY2; R1 = LS1/(2*Math.sin(360/NS1/2/57.295779)); R2 = LS2/(2*Math.sin(360/NS2/2/57.295779)); this.repaint(); } public void paint(Graphics g) { g.clearRect(0, 0, getSize().width, getSize().height); g.setColor(Color.black); double X1p = X1+(int)R1; double Y1p = Y1; double X1n = X1p; double Y1n = Y1p; Xmax = (int) X1p; Xmin = (int) X1p; Ymin = (int) Y1p; Ymax = (int) Y1p; p1.addPoint((int)X1n, (int) Y1n); for(int i=1; i!=NS1; i++) { X1n = (int) ( X1+(X1p-X1)*Math.cos(360/NS1/57.295779)-(Y1p-Y1)*Math.sin(360/NS1/57.295779) ); // знаю медлено Y1n = (int) ( Y1+(X1p-X1)*Math.sin(360/NS1/57.295779)+(Y1p-Y1)*Math.cos(360/NS1/57.295779) ); g.drawLine((int)X1p, (int)Y1p, (int) X1n, (int)Y1n); X1p = X1n; Y1p = Y1n; p1.addPoint((int)X1n, (int) Y1n); if(Xmax < X1n) { Xmax = (int) X1n; } if(Xmin > X1n) { Xmin = (int) X1n; } if(Ymax < Y1n) { Ymax = (int) Y1n; } if(Ymin > Y1n) { Ymin = (int) Y1n; } } X1n = X1+(int)R1; Y1n = Y1; g.drawLine((int)X1p,(int) Y1p,(int) X1n, (int) Y1n); X1p = X1n; Y1p = Y1n; double X2p = X2+(int)R2; double Y2p = Y2; double X2n = X2p; double Y2n = Y2p; p2.addPoint((int)X2n, (int) Y2n); if(Xmax < X2n) { Xmax = (int) X2n; } if(Xmin > X2n) { Xmin = (int) X2n; } if(Ymax < Y2n) { Ymax = (int) Y2n; } if(Ymin > Y2n) { Ymin = (int) Y2n; } for(int i=1; i!=NS2; i++) { X2n = ( X2+(X2p-X2)*Math.cos(360/NS2/57.295779)-(Y2p-Y2)*Math.sin(360/NS2/57.295779) ); // знаю медлено Y2n = ( Y2+(X2p-X2)*Math.sin(360/NS2/57.295779)+(Y2p-Y2)*Math.cos(360/NS2/57.295779) ); g.drawLine((int)X2p, (int)Y2p, (int) X2n,(int) Y2n); X2p = X2n; Y2p = Y2n; p2.addPoint((int)X2n, (int) Y2n); if(Xmax < X2n) { Xmax = (int) X2n; } if(Xmin > X2n) { Xmin = (int) X2n; } if(Ymax < Y2n) { Ymax = (int) Y2n; } if(Ymin > Y2n) { Ymin = (int) Y2n; } } X2n = X2+(int)R2; Y2n = Y2; g.drawLine((int)X2p, (int)Y2p, (int) X2n, (int) Y2n); X2p = X2n; Y2p = Y2n; //System.out.println(Xmax+" "+Xmin+" "+Ymax+" "+Ymin); g.setColor(Color.green); for(int x=Xmin-20; x<Xmax+20; x++ ) { for(int y=Ymin-20; y<Ymax+20; y++ ) { if( p1.contains(x, y)) { if(p2.contains(x, y)) { g.drawLine(x, y, x, y); } } } } p1.reset(); p2.reset(); } } |
1 answer
Memory does not flow, Swing uses an event model, i.e. somewhere an object of type Event is created and placed in the processing queue. The “event” object itself takes its place, and it will be destroyed only when gc is told. In general, if you monitor the work, you will most likely see something like a saw, according to the occupied memory. those. the memory will be filled until the collector decides to release it. here is a good article not on the issue itself, but it opens up to many eyes :) http://habrahabr.ru/post/112676/
|