public class Bubbles
{
//----------------------------------------------------
//Parameter anderer Klassen übernehmen
int r1 = Zeichnung.r1;
int bOeffnung=Zeichnung.bOeffnung;
//----------------------------------------------------------------
// Parameter für Leitlinien
int rEin = (Zeichnung.r1-Zeichnung.r9)/2+15;
int LaengeArray=13;
int alpha=0;
int alphadelta=10;
int xMitte=GlobalVar.Mp1[0]+GlobalVar.Achsabstand/2;
int yMitte=GlobalVar.Mp1[1];
int[][] Linie1 = new int[LaengeArray][2];
int[][] Linie2 = new int[LaengeArray][2];
int[][] Linie3 = new int[LaengeArray][2];
int[][] Linie4 = new int[LaengeArray][2];
public static BufferedImage ImgLinie1= new BufferedImage(GlobalVar.xsize1, GlobalVar.ysize1, BufferedImage.TYPE_INT_ARGB);
int[] xpkt1 = new int [LaengeArray];
int[] ypkt1 = new int [LaengeArray];
public static BufferedImage ImgLinie2= new BufferedImage(GlobalVar.xsize1, GlobalVar.ysize1, BufferedImage.TYPE_INT_ARGB);
int[] xpkt2 = new int [LaengeArray];
int[] ypkt2 = new int [LaengeArray];
public static BufferedImage ImgLinie3= new BufferedImage(GlobalVar.xsize1, GlobalVar.ysize1, BufferedImage.TYPE_INT_ARGB);
int[] xpkt3 = new int [LaengeArray];
int[] ypkt3 = new int [LaengeArray];
public static BufferedImage ImgLinie4= new BufferedImage(GlobalVar.xsize1, GlobalVar.ysize1, BufferedImage.TYPE_INT_ARGB);
int[] xpkt4 = new int [LaengeArray];
int[] ypkt4 = new int [LaengeArray];
//----------------------------------------------------------------
// Parameter für Bubbles
int MinGroesseBub=5;
int MaxGroesseBub=25;
public static int [][] BubbleArray = new int [10][3];
public static BufferedImage ImgBubbles= new BufferedImage(GlobalVar.xsize1, GlobalVar.xsize1, BufferedImage.TYPE_INT_ARGB);
public static int [][] BubbleArrayVorh = new int[10][3];
public static BufferedImage ImgBubblesVorh= new BufferedImage(GlobalVar.xsize1, GlobalVar.xsize1, BufferedImage.TYPE_INT_ARGB);
Color BubblesColor = new Color(138,208,218);
int DistanzZ1;
int DistanzZ2;
int AbstandLinie1=0;
int AbstandMin=1000; //muss auf einen hohen Wert gesetzt werden
int PosMinAbstand=0;
double Bewegungwinkel=0;
double Abschnittslaenge=0;
double GeschwBasis=0;
double rm = Zeichnung.r1-Zeichnung.r9;
double aktGeschwBzglD=0;
double aktGeschwBzglL=0;
double aktGeschwBzgl=0;
double lLBasis= Math.round(rEin*Math.PI/180*alphadelta); //Länge der letzten 2 Punkte der Leitlinie
public void BubblesBewegen()
{
Graphics2D g2d1 = ImgBubbles.createGraphics();
Graphics2D g2d2 = ImgBubblesVorh.createGraphics();
if (BubbleArray[0][0]==0)
{
return;
}
// Berechnung Geschwindigkeit für die Mitte des Zahnrades, Bewegung des Punktes immerhalb des Zeitintervalls
GeschwBasis= Zeichnung.r1 * Math.PI/180*GlobalVar.DrehwinkelDelta; //Pixel pro Timerzeit
//Berechnung des nächsten Punktes eines jeden Bubbles
for(int k=0; k < BubbleArray.length; k++)
{
if (BubbleArray[k][0]>0)
{
DistanzZ1=(int) Math.sqrt(Math.pow((BubbleArray[k][0]-GlobalVar.Mp1[0]),2)+Math.pow((BubbleArray[k][1]-GlobalVar.Mp1[1]),2));
DistanzZ2=(int) Math.sqrt(Math.pow((BubbleArray[k][0]-GlobalVar.Mp2[0]),2)+Math.pow((BubbleArray[k][1]-GlobalVar.Mp2[1]),2));
if (BubbleArray[k][0] <= xMitte && BubbleArray[k][1] <= yMitte && DistanzZ1 > Zeichnung.r1+BubbleArray[k][2])
{
for(int i=0; i < Linie1.length; i++)
{
// Abstand zur Leitlinie wird ermittelt und Position des minimlalen Abstands festgehalten
AbstandLinie1=(int) Math.round(Math.sqrt(Math.pow((BubbleArray[k][0]-Linie1[i][0]),2)+Math.pow((BubbleArray[k][1]-Linie1[i][1]),2)));
if (BubbleArray[k][0] > Linie1[i][0])
{
AbstandLinie1=AbstandLinie1*-1; //wird benötigt für spätere Geschwindigkeitsberechnung, Geschwindigkeit entsprechend Durchmesser
}
if (Math.abs(AbstandLinie1) <= Math.abs(AbstandMin))
{
PosMinAbstand=i;
AbstandMin=AbstandLinie1;
}
else
{
//break;
}
}
//Ermittlung des Winkels der Leitlinie
Bewegungwinkel = Math.tan((Linie1[PosMinAbstand][0]-Linie1[PosMinAbstand+1][0])/(Linie1[PosMinAbstand+1][1]-Linie1[PosMinAbstand][1]));
Abschnittslaenge = Math.sqrt(Math.pow((Linie1[PosMinAbstand][0]-Linie1[PosMinAbstand+1][0]),2)+Math.pow((Linie1[PosMinAbstand+1][1]-Linie1[PosMinAbstand][1]),2));
//Berechnung der neuen Position
aktGeschwBzglD = GeschwBasis/rm*(rm+AbstandMin);
aktGeschwBzglL = aktGeschwBzglD*lLBasis/Abschnittslaenge;
BubbleArray[k][0]=BubbleArray[k][0]+(int) Math.round(aktGeschwBzglL*Math.sin(Math.PI/180*Bewegungwinkel));
BubbleArray[k][1]=BubbleArray[k][1]+(int) Math.round(aktGeschwBzglL*Math.cos(Math.PI/180*Bewegungwinkel));
g2d2.setColor(Color.WHITE);
g2d2.drawOval(BubbleArrayVorh[k][0],BubbleArrayVorh[k][1],BubbleArrayVorh[k][2],BubbleArrayVorh[k][2]);
g2d2.setColor(Color.WHITE);
g2d2.fillOval(BubbleArrayVorh[k][0],BubbleArrayVorh[k][1],BubbleArrayVorh[k][2],BubbleArrayVorh[k][2]);
g2d1.setColor(Color.BLACK);
g2d1.drawOval(BubbleArray[k][0],BubbleArray[k][1],BubbleArray[k][2],BubbleArray[k][2]);
g2d1.setColor(BubblesColor);
g2d1.fillOval(BubbleArray[k][0],BubbleArray[k][1],BubbleArray[k][2],BubbleArray[k][2]);
BubbleArrayVorh = BubbleArray;
}
}
AbstandMin=1000;
}
}
public void BubblesErstellen()
{
// Bubble erzeugen und in Array ablegen
// x, y-Koordinate, Größe des Bubble
for (int i=0; i <BubbleArray.length; i++)
{
if (BubbleArray [i][0] == 0)
{
BubbleArray [i][2]=(int) Math.round(MinGroesseBub +Math.random()*(MaxGroesseBub-MinGroesseBub)); // Größe Bubble
BubbleArray [i][1]=Linie1[0][1]; // Stratpos. y
BubbleArray [i][0]=(int) Math.round(xMitte-bOeffnung/2+BubbleArray[i][2] + Math.random()*(bOeffnung-2*BubbleArray[i][2])); // Startpos. x
break;
}
}
//alle Bubbles in Image zeichnen
Graphics2D g2d = ImgBubbles.createGraphics();
for(int m=0; m < BubbleArray.length; m++)
{
g2d.setColor(Color.BLACK);
g2d.drawOval(BubbleArray[m][0],BubbleArray[m][1],BubbleArray[m][2],BubbleArray[m][2]);
g2d.setColor(BubblesColor);
g2d.fillOval(BubbleArray[m][0],BubbleArray[m][1],BubbleArray[m][2],BubbleArray[m][2]);
}
}
public void LeitlinienErstellen()
{
//Erstellung Linie links oben
Linie1[0][0] = GlobalVar.Mp1[0]+GlobalVar.Achsabstand/2-bOeffnung/4;
Linie1[0][1] = GlobalVar.Mp1[1]-Zeichnung.r1-50;
Linie1[1][0] = Linie1[0][0];
Linie1[1][1] = Linie1[0][1]+35;
Linie1[2][0] = Linie1[0][0];
Linie1[2][1] = GlobalVar.Mp1[1]-Zeichnung.r1;
for (int i=3; i<LaengeArray; i++)
{
Linie1[i][0] = (int) (Linie1[2][0]-rEin+rEin*Math.cos(Math.PI/180*alpha));
Linie1[i][1] = (int) (Linie1[2][1]+rEin*Math.sin(Math.PI/180*alpha));
alpha += alphadelta;
}
//Erstellung Linie rechts oben
for (int i=0; i<LaengeArray; i++)
{
Linie2[i][0] = Linie1[i][0]+2*(xMitte-Linie1[i][0]);
Linie2[i][1] = Linie1[i][1];
}
//Erstellung Linie links unten
for (int i=0; i<LaengeArray; i++)
{
Linie3[i][0] = Linie1[i][0];
Linie3[i][1] = Linie1[i][1]+2*(yMitte-Linie1[i][1]);
}
//Erstellung Linie rechts unten
for (int i=0; i<LaengeArray; i++)
{
Linie4[i][0] = Linie3[i][0]+2*(xMitte-Linie3[i][0]);
Linie4[i][1] = Linie3[i][1];
}
//----------------------------------------------------------------------
//Linien zeichnen (zur Kontrolle
for (int m=0; m <= Linie1.length-1; m++)
{
xpkt1[m] = Linie1[m][0];
ypkt1[m] = Linie1[m][1];
}
for (int m=0; m <= Linie2.length-1; m++)
{
xpkt2[m] = Linie2[m][0];
ypkt2[m] = Linie2[m][1];
}
for (int m=0; m <= Linie3.length-1; m++)
{
xpkt3[m] = Linie3[m][0];
ypkt3[m] = Linie3[m][1];
}
for (int m=0; m <= Linie4.length-1; m++)
{
xpkt4[m] = Linie4[m][0];
ypkt4[m] = Linie4[m][1];
}
Graphics2D g2d1 = ImgLinie1.createGraphics();
g2d1.setColor(Color.BLACK);
g2d1.drawPolyline(xpkt1, ypkt1, 12);
Graphics2D g2d2 = ImgLinie2.createGraphics();
g2d2.setColor(Color.BLACK);
g2d2.drawPolyline(xpkt2, ypkt2, 12);
Graphics2D g2d3 = ImgLinie3.createGraphics();
g2d3.setColor(Color.BLACK);
g2d3.drawPolyline(xpkt3, ypkt3, 12);
Graphics2D g2d4 = ImgLinie4.createGraphics();
g2d4.setColor(Color.BLACK);
g2d4.drawPolyline(xpkt4, ypkt4, 12);
}
}
-------------------------------------------------------
public class Zeichnung extends JPanel{
....
....
....
public void paintComponent( Graphics g ) //Zeichnen
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(ImgGeh, 0 ,0 , null);
g2d.drawImage(Bubbles.ImgLinie1, 0 ,0 , null);
g2d.drawImage(Bubbles.ImgLinie2, 0 ,0 , null);
g2d.drawImage(Bubbles.ImgLinie3, 0 ,0 , null);
g2d.drawImage(Bubbles.ImgLinie4, 0 ,0 , null);
g2d.drawImage(Bubbles.ImgBubblesVorh, 0 ,0 , null);
g2d.drawImage(Bubbles.ImgBubbles, 0 ,0 , null);
AffineTransform at1 = new AffineTransform();
AffineTransform at2 = new AffineTransform();
at1.rotate(Math.toRadians(-GlobalVar.Drehwinkel*GlobalVar.Drehrichtung),GlobalVar.Mp1[0],GlobalVar.Mp1[1]);
at2.rotate(Math.toRadians(GlobalVar.Drehwinkel*GlobalVar.Drehrichtung),GlobalVar.Mp2[0],GlobalVar.Mp2[1]);
g2d.drawImage(GlobalVar.ImgZahnrad1, at1, null);
g2d.drawImage(GlobalVar.ImgZahnrad2, at2, null);
}
}