Hi zusammen
Ich benötige Unterstützung bei einer Optimierug. Ein Algorithmus soll schneller werden.
Die Aufgabe ist eine Teilaufgabe eines Sandkastens den ich Entwickel. Deshalb sind viele Parameter nicht fest vorgegeben sondern können später vom User gewählt werden. Dies betrifft z. B den nachbarschaftsAbstand und auch den abstandsFaktor doch dazu gleich mehr.
Zum Hintergrund:
Aus einem großen 3 dimensionalen Arry ziehe ich mir einen Auszug der Größe 100x100x100 Datenpunkte. ( In diesem Programm sind es 120x120x120 damit ich Randprobleme später behandeln kann.) Für jeden der Datenpunkte soll nun der Einfluss der anderen Punkte auf ihn berechnet werden. Dabei nimmt der Einfluss aufeinander mit steigendem Abstand, mit einem wählbaren Faktor (abstandsFaktor) ab. Daduch müssen für ein hinreichend genaues Ergebniss auch nich alle Einflüsse berechnet werden, sondern nur die im Nahbereich (nachbarschaftsAbstand).
Im Sandkasten selber werden es dann ca. 30 Parameter werden die nach unterschiedlichen Regeln berechnet werden. Hier für die Optimierung habe ich mich auf einen Parameter (beeinflussenderParameter) beschränkt.
In der erster Lösung (Kubus) spanne ich einen Kubus der Kantenlänge nachbarschaftsAbstand um den zu beeinflussenden Datenpunkt. Nachteil ist, dass hierbei auch die entfernteren Punkte in den Ecken, obwohl sie wenig Einfluss haben, mit berechnet werden. Ich nehme diese Berechnung als Referenzergebniss um die obtimierten Versionen bewerten zu können.
Die zweite Lösung (Kugel) rundet nur die Ecken ein wenig ab um die Anzahl der Rechnungen zu verringern. Auf weitere Optimierungen habe ich komplett verzichtet um anderen Ansätzen nicht im Weg zu stehen.
Über Tipps und Ideen von euch, wie ich diesen Algorithmus beschleunigen kann würde ich mich freuen.
[CODE lang="java" title="Die Klasse entityNB"]package NachbarschaftNB;
public class entityNB {
//Legt den beeinflussten Parameter auf einen Basiswert zwischen 995-1005 fest.
private short beeinflussterParameter = (short) (Math.random()*11+995);
// legt den beeinflussenden Parameter auf 0-100 fest.
private short beeinflussenderParameter = (short) (Math.random()*22-11);
public short getBeeinflussterParameter() {
return beeinflussterParameter;
}
public void setBeeinflussterParameter(short beeinflussterParameter) {
this.beeinflussterParameter = beeinflussterParameter;
}
public short getBeeinflussenderParameter() {
return beeinflussenderParameter;
}
public void setBeeinflussenderParameter(short beeinflussenderParameter) {
this.beeinflussenderParameter = beeinflussenderParameter;
}
}
[/CODE]
[CODE lang="java" title="Main und die Algorithmen"]package NachbarschaftNB;
public class startNB {
public static void main(String[] args) {
// Festlegen der Arraygrenzen
int xKoordinateMax = 120;
int yKoordinateMax = 120;
int zKoordinateMax = 120;
// Willkuerlich gewaehlte Startkoordinaten als Alternativer zur Schleife
// ueber 100x100x100 Punkte.
//int xAusgangsKoordinate = 23;
//int yAusgangsKoordinate = 42;
//int zAusgangsKoordinate = 84;
int nachbarschaftsAbstand = 3; // Abstand bis zu dem eine Beeinflussung gewertet werden soll. Typische Werte 3-10
float abstandsFaktor = 1/3f; // Faktor um den mit zunehmendem Abstand der Einfluss schwindet. Typische Werte 1/1,2 - 1/20
entityNB[][][] world = new entityNB[xKoordinateMax][yKoordinateMax][zKoordinateMax];
// Nur Befuellen des Arrays. Fuer die Aufgabe nicht relevant.
for(int xKoordinate = 0;xKoordinate < xKoordinateMax; xKoordinate ++) {
for(int yKoordinate = 0;yKoordinate < yKoordinateMax; yKoordinate ++) {
for(int zKoordinate = 0;zKoordinate < zKoordinateMax; zKoordinate ++) {
world[xKoordinate][yKoordinate][zKoordinate] = new entityNB();
// System.out.println(world[xKoordinate][yKoordinate][zKoordinate].getBeeinflussterParameter());
// System.out.println(world[xKoordinate][yKoordinate][zKoordinate].getBeeinflussenderParameter());
}
}
}
/* Einige Variablen erklaert
* xAusgangsKoordinate, yAusgangsKoordinate, zAusgangsKoordinate = Absolutwerte Kooedinaten des Ausgangpunkts
* um diesen Punkte herumm wird errechnet wie gross die Beeinflussung ist.
* In diesem Testaufbau durchlauft der Punkt die Koordinaten 10,10,10 bis 100,100,100 .
*
* xKooedinate, yKooedinate, zKooedinate = Absolutwerte Kooedinaten der Punkte die gelesen
* und ihre Werte gewichtet werden
*
* gewichtungAbstandfaktor = beeinflussenderParameter * Math.pow(abstandsFaktor, Abstand)
* Wobei sich der Abstand aus den Summe der relativen Abstaende (x, y und z) zum Ausgangpunkt ergibt.
*
*
*/
// Schleife, die die Punkte (10,10,10) bis (110,110,110) (x,y,z) durchlauft
// fuer jeden dieser Punkte wird dann die Einwirkung durch die Nachbarn errechnet.
System.out.println("Start der Rechnung ");
for(int xAusgangsKoordinate = 10; xAusgangsKoordinate <= 110; xAusgangsKoordinate++) {
for(int yAusgangsKoordinate = 10; yAusgangsKoordinate <= 110; yAusgangsKoordinate++) {
for(int zAusgangsKoordinate = 10; zAusgangsKoordinate <= 110; zAusgangsKoordinate++) {
/* Version 1 Nick Name: Kubus ***************************************************************************************************
*
* Um die Ausgangskoordinaten wir ein Kubus mit der Kantenlaenge nachbarschaftsAbstand gelegt und berechnet,
* wie stark jeder Punkt im Kubus das Feld in der Mitte beeinflusst.
*
* nachbarschaftsAbstand = Spannt ein Rechteck mit der Kantenlaenge - nachbarschaftsAbstand bis + nachbarschaftsAbstand
* ueber x, y und z auf. (Obtiemierungspotential !!!)
*
*/
int schleifenzaehlerKubus = 0; // spielt nur waehrend des Optimierungsprozess eine Rolle um Loesungen vergleichen zu koennen.
double gewichteteSummeBeeinflussenderParameter = 0.0; // Das Setzen dieser Groesse ist das Ziel der ganzen Aufgabe.
for(int xKooedinate = xAusgangsKoordinate - nachbarschaftsAbstand; xKooedinate <= xAusgangsKoordinate + nachbarschaftsAbstand; xKooedinate ++ ) {
for(int yKooedinate = yAusgangsKoordinate - nachbarschaftsAbstand; yKooedinate <= yAusgangsKoordinate + nachbarschaftsAbstand; yKooedinate ++ ) {
for(int zKooedinate = zAusgangsKoordinate - nachbarschaftsAbstand; zKooedinate <= zAusgangsKoordinate + nachbarschaftsAbstand; zKooedinate ++ ) {
// System.out.println(" x " + xKooedinate + " y " + yKooedinate + " z " + zKooedinate);
double gewichtungAbstandfaktor = Math.pow(abstandsFaktor, Math.abs(xKooedinate - xAusgangsKoordinate) + Math.abs(yKooedinate - yAusgangsKoordinate) + Math.abs(zKooedinate - zAusgangsKoordinate));
// System.out.println(" gewichtungAbstandfaktor " + gewichtungAbstandfaktor);
gewichteteSummeBeeinflussenderParameter = gewichteteSummeBeeinflussenderParameter + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor;
schleifenzaehlerKubus ++;
// System.out.println(" gewichteter Beeinflussender Parameter " + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor + " gewichteteSummeBeeinflussenderParameter " + gewichteteSummeBeeinflussenderParameter);
}
}
}
//System.out.println("xAusgangsKoordinate " + xAusgangsKoordinate + " yAusgangsKoordinate " + yAusgangsKoordinate + " zAusgangsKoordinate " + zAusgangsKoordinate);
System.out.println("schleifenzaehlerKubus " + schleifenzaehlerKubus + " gewichteteSummeBeeinflussenderParameter Kubus " + gewichteteSummeBeeinflussenderParameter);
/* Version 2 Nickname: Kugel ***************************************************************************************************
*
* Als Optimierung im Vergleich zur Version 1 Kubus werden hier die Ecken des Kubus,
* die ja auf grund des Abstands weniger Einfluss auf den Punkt in der Mitte haben,
* abgerundet.
*
* Wirklich unschoen ist bei dieser Loesung, dass zwei Schleifen benoetigt werden.
* Die Erste errechnet vom minimalen x bis imklusiver Mitte.
* Die Zweite von eins hinter Mitte bis x maximal.
*/
// Schleife von Aussen bis einschliesslich Mittelpunkt **********************************************
int schleifenzaehlerKugel = 0; // spielt nur waehrend des Optimierungsprozess eine Rolle um Loesungen vergleichen zu koennen.
double gewichteteSummeBeeinflussenderParameter2 = 0.0; // Das Setzen dieser Groesse ist das Ziel der ganzen Aufgabe.
int xSchleifenzaehler = 0; // Wird genutzt um die Ecken des Kubus abzurunden.
for(int xKooedinate = xAusgangsKoordinate - nachbarschaftsAbstand; xKooedinate <= xAusgangsKoordinate; xKooedinate ++ ) {
for(int yKooedinate = yAusgangsKoordinate - xSchleifenzaehler; yKooedinate <= yAusgangsKoordinate + xSchleifenzaehler; yKooedinate ++ ) {
for(int zKooedinate = zAusgangsKoordinate - xSchleifenzaehler; zKooedinate <= zAusgangsKoordinate + xSchleifenzaehler; zKooedinate ++ ) {
int abstandVonDerAusgangskoordinate = Math.abs(xKooedinate - xAusgangsKoordinate) + Math.abs(yKooedinate - yAusgangsKoordinate) + Math.abs(zKooedinate - zAusgangsKoordinate);
//System.out.println(" x " + xKooedinate + " y " + yKooedinate + " z " + zKooedinate);
double gewichtungAbstandfaktor = Math.pow(abstandsFaktor, abstandVonDerAusgangskoordinate);
// System.out.println(" abstandsFaktor " + abstandsFaktor + " abs(xKooedinate) " + Math.abs(xKooedinate) + " abs(yKooedinate) " + Math.abs(yKooedinate) + " abs(zKooedinate) " + Math.abs(zKooedinate));
// System.out.println(" gewichtungAbstandfaktor " + gewichtungAbstandfaktor);
gewichteteSummeBeeinflussenderParameter2 = gewichteteSummeBeeinflussenderParameter2 + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor;
schleifenzaehlerKugel ++;
// System.out.println(" gewichteter Beeinflussender Parameter " + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor + " gewichteteSummeBeeinflussenderParameter " + gewichteteSummeBeeinflussenderParameter);
}
}
xSchleifenzaehler ++;
}
// System.out.println("schleifenzaehlerKugel Zwischenwert" + schleifenzaehlerKugel + " gewichteteSummeBeeinflussenderParameter 1. Haelfte und Mitte Kugel " + gewichteteSummeBeeinflussenderParameter2);
// Schleife von exklusiev Mitte bis Aussen. **********************************************
xSchleifenzaehler = 0; // Wird genutzt um die Ecken des Kubus abzurunden.
for(int xKooedinate = xAusgangsKoordinate + 1; xKooedinate <= xAusgangsKoordinate + nachbarschaftsAbstand; xKooedinate ++ ) {
for(int yKooedinate = yAusgangsKoordinate - nachbarschaftsAbstand + 1 + xSchleifenzaehler; yKooedinate <= yAusgangsKoordinate + nachbarschaftsAbstand - 1 -xSchleifenzaehler; yKooedinate ++ ) {
for(int zKooedinate = zAusgangsKoordinate - nachbarschaftsAbstand + 1 + xSchleifenzaehler; zKooedinate <= zAusgangsKoordinate + nachbarschaftsAbstand - 1 -xSchleifenzaehler; zKooedinate ++ ) {
int abstandVonDerAusgangskoordinate = Math.abs(xKooedinate - xAusgangsKoordinate) + Math.abs(yKooedinate - yAusgangsKoordinate) + Math.abs(zKooedinate - zAusgangsKoordinate);
//System.out.println(" x " + xKooedinate + " y " + yKooedinate + " z " + zKooedinate);
double gewichtungAbstandfaktor = Math.pow(abstandsFaktor, abstandVonDerAusgangskoordinate);
// System.out.println(" gewichtungAbstandfaktor " + gewichtungAbstandfaktor);
gewichteteSummeBeeinflussenderParameter2 = gewichteteSummeBeeinflussenderParameter2 + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor;
schleifenzaehlerKugel ++;
// System.out.println(" gewichteter Beeinflussender Parameter " + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor + " gewichteteSummeBeeinflussenderParameter " + gewichteteSummeBeeinflussenderParameter);
}
}
xSchleifenzaehler ++;
}
System.out.println("schleifenzaehlerKugel " + schleifenzaehlerKugel + " gewichteteSummeBeeinflussenderParameter gesamt Kugel " + gewichteteSummeBeeinflussenderParameter2);
System.out.println();
} // Ende zAusgangsKoordinate Schleife
} // Ende yAusgangsKoordinate Schleife
} // Ende xAusgangsKoordinate Schleife
}
}
[/CODE]
Ich benötige Unterstützung bei einer Optimierug. Ein Algorithmus soll schneller werden.
Die Aufgabe ist eine Teilaufgabe eines Sandkastens den ich Entwickel. Deshalb sind viele Parameter nicht fest vorgegeben sondern können später vom User gewählt werden. Dies betrifft z. B den nachbarschaftsAbstand und auch den abstandsFaktor doch dazu gleich mehr.
Zum Hintergrund:
Aus einem großen 3 dimensionalen Arry ziehe ich mir einen Auszug der Größe 100x100x100 Datenpunkte. ( In diesem Programm sind es 120x120x120 damit ich Randprobleme später behandeln kann.) Für jeden der Datenpunkte soll nun der Einfluss der anderen Punkte auf ihn berechnet werden. Dabei nimmt der Einfluss aufeinander mit steigendem Abstand, mit einem wählbaren Faktor (abstandsFaktor) ab. Daduch müssen für ein hinreichend genaues Ergebniss auch nich alle Einflüsse berechnet werden, sondern nur die im Nahbereich (nachbarschaftsAbstand).
Im Sandkasten selber werden es dann ca. 30 Parameter werden die nach unterschiedlichen Regeln berechnet werden. Hier für die Optimierung habe ich mich auf einen Parameter (beeinflussenderParameter) beschränkt.
In der erster Lösung (Kubus) spanne ich einen Kubus der Kantenlänge nachbarschaftsAbstand um den zu beeinflussenden Datenpunkt. Nachteil ist, dass hierbei auch die entfernteren Punkte in den Ecken, obwohl sie wenig Einfluss haben, mit berechnet werden. Ich nehme diese Berechnung als Referenzergebniss um die obtimierten Versionen bewerten zu können.
Die zweite Lösung (Kugel) rundet nur die Ecken ein wenig ab um die Anzahl der Rechnungen zu verringern. Auf weitere Optimierungen habe ich komplett verzichtet um anderen Ansätzen nicht im Weg zu stehen.
Über Tipps und Ideen von euch, wie ich diesen Algorithmus beschleunigen kann würde ich mich freuen.
[CODE lang="java" title="Die Klasse entityNB"]package NachbarschaftNB;
public class entityNB {
//Legt den beeinflussten Parameter auf einen Basiswert zwischen 995-1005 fest.
private short beeinflussterParameter = (short) (Math.random()*11+995);
// legt den beeinflussenden Parameter auf 0-100 fest.
private short beeinflussenderParameter = (short) (Math.random()*22-11);
public short getBeeinflussterParameter() {
return beeinflussterParameter;
}
public void setBeeinflussterParameter(short beeinflussterParameter) {
this.beeinflussterParameter = beeinflussterParameter;
}
public short getBeeinflussenderParameter() {
return beeinflussenderParameter;
}
public void setBeeinflussenderParameter(short beeinflussenderParameter) {
this.beeinflussenderParameter = beeinflussenderParameter;
}
}
[/CODE]
[CODE lang="java" title="Main und die Algorithmen"]package NachbarschaftNB;
public class startNB {
public static void main(String[] args) {
// Festlegen der Arraygrenzen
int xKoordinateMax = 120;
int yKoordinateMax = 120;
int zKoordinateMax = 120;
// Willkuerlich gewaehlte Startkoordinaten als Alternativer zur Schleife
// ueber 100x100x100 Punkte.
//int xAusgangsKoordinate = 23;
//int yAusgangsKoordinate = 42;
//int zAusgangsKoordinate = 84;
int nachbarschaftsAbstand = 3; // Abstand bis zu dem eine Beeinflussung gewertet werden soll. Typische Werte 3-10
float abstandsFaktor = 1/3f; // Faktor um den mit zunehmendem Abstand der Einfluss schwindet. Typische Werte 1/1,2 - 1/20
entityNB[][][] world = new entityNB[xKoordinateMax][yKoordinateMax][zKoordinateMax];
// Nur Befuellen des Arrays. Fuer die Aufgabe nicht relevant.
for(int xKoordinate = 0;xKoordinate < xKoordinateMax; xKoordinate ++) {
for(int yKoordinate = 0;yKoordinate < yKoordinateMax; yKoordinate ++) {
for(int zKoordinate = 0;zKoordinate < zKoordinateMax; zKoordinate ++) {
world[xKoordinate][yKoordinate][zKoordinate] = new entityNB();
// System.out.println(world[xKoordinate][yKoordinate][zKoordinate].getBeeinflussterParameter());
// System.out.println(world[xKoordinate][yKoordinate][zKoordinate].getBeeinflussenderParameter());
}
}
}
/* Einige Variablen erklaert
* xAusgangsKoordinate, yAusgangsKoordinate, zAusgangsKoordinate = Absolutwerte Kooedinaten des Ausgangpunkts
* um diesen Punkte herumm wird errechnet wie gross die Beeinflussung ist.
* In diesem Testaufbau durchlauft der Punkt die Koordinaten 10,10,10 bis 100,100,100 .
*
* xKooedinate, yKooedinate, zKooedinate = Absolutwerte Kooedinaten der Punkte die gelesen
* und ihre Werte gewichtet werden
*
* gewichtungAbstandfaktor = beeinflussenderParameter * Math.pow(abstandsFaktor, Abstand)
* Wobei sich der Abstand aus den Summe der relativen Abstaende (x, y und z) zum Ausgangpunkt ergibt.
*
*
*/
// Schleife, die die Punkte (10,10,10) bis (110,110,110) (x,y,z) durchlauft
// fuer jeden dieser Punkte wird dann die Einwirkung durch die Nachbarn errechnet.
System.out.println("Start der Rechnung ");
for(int xAusgangsKoordinate = 10; xAusgangsKoordinate <= 110; xAusgangsKoordinate++) {
for(int yAusgangsKoordinate = 10; yAusgangsKoordinate <= 110; yAusgangsKoordinate++) {
for(int zAusgangsKoordinate = 10; zAusgangsKoordinate <= 110; zAusgangsKoordinate++) {
/* Version 1 Nick Name: Kubus ***************************************************************************************************
*
* Um die Ausgangskoordinaten wir ein Kubus mit der Kantenlaenge nachbarschaftsAbstand gelegt und berechnet,
* wie stark jeder Punkt im Kubus das Feld in der Mitte beeinflusst.
*
* nachbarschaftsAbstand = Spannt ein Rechteck mit der Kantenlaenge - nachbarschaftsAbstand bis + nachbarschaftsAbstand
* ueber x, y und z auf. (Obtiemierungspotential !!!)
*
*/
int schleifenzaehlerKubus = 0; // spielt nur waehrend des Optimierungsprozess eine Rolle um Loesungen vergleichen zu koennen.
double gewichteteSummeBeeinflussenderParameter = 0.0; // Das Setzen dieser Groesse ist das Ziel der ganzen Aufgabe.
for(int xKooedinate = xAusgangsKoordinate - nachbarschaftsAbstand; xKooedinate <= xAusgangsKoordinate + nachbarschaftsAbstand; xKooedinate ++ ) {
for(int yKooedinate = yAusgangsKoordinate - nachbarschaftsAbstand; yKooedinate <= yAusgangsKoordinate + nachbarschaftsAbstand; yKooedinate ++ ) {
for(int zKooedinate = zAusgangsKoordinate - nachbarschaftsAbstand; zKooedinate <= zAusgangsKoordinate + nachbarschaftsAbstand; zKooedinate ++ ) {
// System.out.println(" x " + xKooedinate + " y " + yKooedinate + " z " + zKooedinate);
double gewichtungAbstandfaktor = Math.pow(abstandsFaktor, Math.abs(xKooedinate - xAusgangsKoordinate) + Math.abs(yKooedinate - yAusgangsKoordinate) + Math.abs(zKooedinate - zAusgangsKoordinate));
// System.out.println(" gewichtungAbstandfaktor " + gewichtungAbstandfaktor);
gewichteteSummeBeeinflussenderParameter = gewichteteSummeBeeinflussenderParameter + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor;
schleifenzaehlerKubus ++;
// System.out.println(" gewichteter Beeinflussender Parameter " + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor + " gewichteteSummeBeeinflussenderParameter " + gewichteteSummeBeeinflussenderParameter);
}
}
}
//System.out.println("xAusgangsKoordinate " + xAusgangsKoordinate + " yAusgangsKoordinate " + yAusgangsKoordinate + " zAusgangsKoordinate " + zAusgangsKoordinate);
System.out.println("schleifenzaehlerKubus " + schleifenzaehlerKubus + " gewichteteSummeBeeinflussenderParameter Kubus " + gewichteteSummeBeeinflussenderParameter);
/* Version 2 Nickname: Kugel ***************************************************************************************************
*
* Als Optimierung im Vergleich zur Version 1 Kubus werden hier die Ecken des Kubus,
* die ja auf grund des Abstands weniger Einfluss auf den Punkt in der Mitte haben,
* abgerundet.
*
* Wirklich unschoen ist bei dieser Loesung, dass zwei Schleifen benoetigt werden.
* Die Erste errechnet vom minimalen x bis imklusiver Mitte.
* Die Zweite von eins hinter Mitte bis x maximal.
*/
// Schleife von Aussen bis einschliesslich Mittelpunkt **********************************************
int schleifenzaehlerKugel = 0; // spielt nur waehrend des Optimierungsprozess eine Rolle um Loesungen vergleichen zu koennen.
double gewichteteSummeBeeinflussenderParameter2 = 0.0; // Das Setzen dieser Groesse ist das Ziel der ganzen Aufgabe.
int xSchleifenzaehler = 0; // Wird genutzt um die Ecken des Kubus abzurunden.
for(int xKooedinate = xAusgangsKoordinate - nachbarschaftsAbstand; xKooedinate <= xAusgangsKoordinate; xKooedinate ++ ) {
for(int yKooedinate = yAusgangsKoordinate - xSchleifenzaehler; yKooedinate <= yAusgangsKoordinate + xSchleifenzaehler; yKooedinate ++ ) {
for(int zKooedinate = zAusgangsKoordinate - xSchleifenzaehler; zKooedinate <= zAusgangsKoordinate + xSchleifenzaehler; zKooedinate ++ ) {
int abstandVonDerAusgangskoordinate = Math.abs(xKooedinate - xAusgangsKoordinate) + Math.abs(yKooedinate - yAusgangsKoordinate) + Math.abs(zKooedinate - zAusgangsKoordinate);
//System.out.println(" x " + xKooedinate + " y " + yKooedinate + " z " + zKooedinate);
double gewichtungAbstandfaktor = Math.pow(abstandsFaktor, abstandVonDerAusgangskoordinate);
// System.out.println(" abstandsFaktor " + abstandsFaktor + " abs(xKooedinate) " + Math.abs(xKooedinate) + " abs(yKooedinate) " + Math.abs(yKooedinate) + " abs(zKooedinate) " + Math.abs(zKooedinate));
// System.out.println(" gewichtungAbstandfaktor " + gewichtungAbstandfaktor);
gewichteteSummeBeeinflussenderParameter2 = gewichteteSummeBeeinflussenderParameter2 + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor;
schleifenzaehlerKugel ++;
// System.out.println(" gewichteter Beeinflussender Parameter " + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor + " gewichteteSummeBeeinflussenderParameter " + gewichteteSummeBeeinflussenderParameter);
}
}
xSchleifenzaehler ++;
}
// System.out.println("schleifenzaehlerKugel Zwischenwert" + schleifenzaehlerKugel + " gewichteteSummeBeeinflussenderParameter 1. Haelfte und Mitte Kugel " + gewichteteSummeBeeinflussenderParameter2);
// Schleife von exklusiev Mitte bis Aussen. **********************************************
xSchleifenzaehler = 0; // Wird genutzt um die Ecken des Kubus abzurunden.
for(int xKooedinate = xAusgangsKoordinate + 1; xKooedinate <= xAusgangsKoordinate + nachbarschaftsAbstand; xKooedinate ++ ) {
for(int yKooedinate = yAusgangsKoordinate - nachbarschaftsAbstand + 1 + xSchleifenzaehler; yKooedinate <= yAusgangsKoordinate + nachbarschaftsAbstand - 1 -xSchleifenzaehler; yKooedinate ++ ) {
for(int zKooedinate = zAusgangsKoordinate - nachbarschaftsAbstand + 1 + xSchleifenzaehler; zKooedinate <= zAusgangsKoordinate + nachbarschaftsAbstand - 1 -xSchleifenzaehler; zKooedinate ++ ) {
int abstandVonDerAusgangskoordinate = Math.abs(xKooedinate - xAusgangsKoordinate) + Math.abs(yKooedinate - yAusgangsKoordinate) + Math.abs(zKooedinate - zAusgangsKoordinate);
//System.out.println(" x " + xKooedinate + " y " + yKooedinate + " z " + zKooedinate);
double gewichtungAbstandfaktor = Math.pow(abstandsFaktor, abstandVonDerAusgangskoordinate);
// System.out.println(" gewichtungAbstandfaktor " + gewichtungAbstandfaktor);
gewichteteSummeBeeinflussenderParameter2 = gewichteteSummeBeeinflussenderParameter2 + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor;
schleifenzaehlerKugel ++;
// System.out.println(" gewichteter Beeinflussender Parameter " + world[xKooedinate][yKooedinate][zKooedinate].getBeeinflussenderParameter() * gewichtungAbstandfaktor + " gewichteteSummeBeeinflussenderParameter " + gewichteteSummeBeeinflussenderParameter);
}
}
xSchleifenzaehler ++;
}
System.out.println("schleifenzaehlerKugel " + schleifenzaehlerKugel + " gewichteteSummeBeeinflussenderParameter gesamt Kugel " + gewichteteSummeBeeinflussenderParameter2);
System.out.println();
} // Ende zAusgangsKoordinate Schleife
} // Ende yAusgangsKoordinate Schleife
} // Ende xAusgangsKoordinate Schleife
}
}
[/CODE]