Erstellung eines regelmäßigen Punktgitters

Liebe Community,
ich brauche regelmäßig für GIS Tätigkeiten ein regelmäßiges Punktmaschennetz, weswegen ich mich jetzt daran gewagt habe Java ein wenig zu studieren und diese Aufgabe umzusetzen.
Ich bin auch schon weit gekommen nur komme ich jetzt nicht mehr weiter.
Ausgangsbasis:
Ich brauche ein Programm dem ich drei Punkte eines großen Rechtecks angebe (ABC), wobei B der Eckpunkt sein soll.
Dann will ich die Strecken (B nach A) und (B nach C) in regelmäßige Stücke unterteilen, so dass ich ein Raster erhalte.
Die Knotenpunkte des Rasters möchte ich dann als Liste mit xy Koordinaten ausgeben lassen.
Mein bisheriger Ansatz sieht wie untenstehend aus.
Ich habe eine Klasse Punkt mit der wichtigen Methode vektorpart die mir den Vektor zum benachbarten Knotenpunkt auf den
beiden Laufrichtungen BA oder BC liefert und eine Methode mit der ich einen Punkt mit dem jeweiligen Vektor addieren kann (addvektor).
Ich habe dann in der main Klasse Draw, erstmal eine Zeile in ba-Richtung manuell berrechnet und dann diese Prozedur für die Zeile mit einer Forschleife automatisiert. Jetzt möchte ich die einzelnen Knotenpunkte auf der Geraden BA als Startpunkte für die Addition des Teilvektors in BC Richtung nehmen, um somit das ganze Netz aufzubauen. Aber hier hänge ich leider und komme nicht weiter.
Ich hatte versucht ein 2dimensionales Array aufzubauen, aber kriege nur Fehlermeldungen.
Ich hoffe meine Anfrage stößt auf Interesse und Jemand kann mir hier helfen.
Viele liebe Grüße
Confugere

//Instanzvariablen
public class punkt {
	private double x;
	private double y;

	// lehrer Konstruktor
	public punkt() {
		this.x = 0;
		this.y = 0;
	}

	public punkt(double x, double y) {
		this.x = x;
		this.y = y;
	}


	public double getx() {
		return this.x;
	}


	public double gety() {
		return this.y;
	}

	public punkt vektor(punkt other) {
		double deltax = other.x - this.x;
		double deltay = other.y - this.y;
		punkt vektor = new punkt(deltax, deltay);
		return vektor;
	}

	public punkt addvektor(punkt other) {
		double addx = other.x + this.x;
		double addy = other.y + this.y;
		punkt add = new punkt(addx, addy);
		return add;
	}

	public punkt vektorpart(punkt other, int div) {
		double deltax = other.x - this.x;
		double deltay = other.y - this.y;
		double partx = deltax / div;
		double party = deltay / div;
		punkt vektorpart = new punkt(partx, party);
		return vektorpart;
	}

	public void printPunkt() {
		double a = getx();
		double b = gety();
		System.out.print(a);
		System.out.print(";");
		System.out.println(b);
	}

}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//Punkte erzeugen
		punkt a = new punkt(3,0);
		punkt b = new punkt(0,0);//Eckpunkt
		punkt c = new punkt(0,4);
		
		//vektor b->a und b->c
		punkt vec_ba = b.vektor(a);
		punkt vec_bc = b.vektor(c);
		
		//Teilvektoren ba = Zeilen, bc = Spalten
		punkt vec_ba_part = b.vektorpart(a,3);
		punkt vec_bc_part = b.vektorpart(c,4);
		
		//Punkte a1,a2,a3	    
		punkt a1 = b.addvektor(vec_ba_part);
	    punkt a2 = a1.addvektor(vec_ba_part);
	    punkt a3 = a2.addvektor(vec_ba_part);
		
	    //print
	    System.out.println("Vektoren");
		vec_ba.printPunkt();
		vec_bc.printPunkt();
		System.out.println("Teilvektoren");
		vec_ba_part.printPunkt();
		vec_bc_part.printPunkt();
		System.out.println("neue Punkte");
		a1.printPunkt();
		a2.printPunkt();
		a3.printPunkt();
		
		System.out.println("Automatisierung Zeilen");
		//Automatisierung
		int zeilen = 3;
		int spalten = 4;
		
        punkt[] pArray = new punkt[zeilen+1];
        pArray[0] = b;
        for(int i=1; i<pArray.length; i++){
//        		
            pArray** = pArray[i-1].addvektor(vec_ba_part);
                       		            	
        }
}
}```

Da kommen ziemlich viele Sachen zusammen.

Erstmal die “Kleinigkeiten”:

  • Klassennamen schreibt man Groß bzw. im CamelCase. Eigentlich würde ich noch sagen, dass man sich für eine Sprache entscheiden sollte (am besten Englisch), aber in diesem Fall müßte man etwas aufpassen: Die Klasse “Point” gibt es schon in der Standard-API, als java.awt.Point.
  • Variablen- und Methodennamen sollten sprechend und selbsterklärend sein, ohne_Unterstriche, (klein geschrieben, aber auch) im camelCase

Eine Sache, die hier relativ wichtig sein könnte: Computer machen Fehler. Insbesondere rechnen sie nicht mit beliebiger Genauigkeit. Wenn man mit float- oder double-Werten rechnet, können bestimmte Zahlen einfach nicht dargestellt werden. Der Fehler ist winzig, aber wenn man sie immer weiter aufaddiert (wie in deiner For-Schleife), werden die Fehler immer größer. Testen:

        double x = 0.1;
        double sum = 0;
        for (int i=0; i<50; i++)
        {
            sum += x;
            System.out.println(sum);
        }

Die Abhilfe wäre in diesem Fall, dass man nicht die “Teilvektoren” immer weiter aufaddiert, sondern stattdessen eine Funktion anbietet, mit der man einen Teilvektor mit einer Zahl multiplizieren kann:

for(int i=0; i<pArray.length; i++){
    pArray** = teilvektor.times(i);
}

Zu den 2D-Arrays… ja… die verwendet man relativ selten, weil sie etwas “starr” sind (die Größe eines Arrays kann nachträglich nicht geändert werden, … aber jeder kann den Inhalt der Arrays ändern, was ggf. nicht gewünscht ist). Aber grundsätzlich geht das mit sowas wie

        Point grid[][] = new Point[rows][columns];
        for (int r=0; r<rows; r++)
        {
            for (int c=0; c<columns; c++)
            {
                grid[r]``` = new Point(..., ...);
            }
        }

Für alles weitere wäre es gut, zu wissen, was damit alles gemacht werden soll…

Liebe Gemeinde, lieber Marco,
der auch nachts noch schnell antwortete, vielen Dank!
Ich brauche das Punktgitter für ein Netz aus Bohrungen, bei dem ich regelmäßige Abstände im Feld gemessen habe und nur drei Eckpunkte genau mit dem GPS eingemessen habe.
Also ich habe natürlich die Klassennamen sofort groß geschrieben.
Weiterhin habe ich eine neue Methode in der Klasse Punkt eingebaut:

		double addx = (other.x * multi) + this.x;
		double addy = (other.y * multi) + this.y;
		double addxb = (next.x * multi2) + addx;
		double addyb = (next.y * multi2) + addy;
		Punkt addmulti = new Punkt(addxb, addyb);
		return addmulti;
	}```
Und meine Generierung sieht jetzt wie folgt aus:

Punkt[][] ppArray = new Punkt[zeilen+1][spalten+1];

    ppArray[0][0] = b;
    
    ppArray[1][0] = ppArray[0][0].addmultivektor(vec_ba_part, vec_bc_part, 1, 0);
    ppArray[2][0] = ppArray[0][0].addmultivektor(vec_ba_part, vec_bc_part, 2, 0);
    ppArray[3][0] = ppArray[0][0].addmultivektor(vec_ba_part, vec_bc_part, 3, 0);
    ppArray[1][1] = ppArray[0][0].addmultivektor(vec_ba_part, vec_bc_part, 1 ,1);
    
    
    ppArray[0][0].printPunkt();
    ppArray[1][0].printPunkt();
    ppArray[2][0].printPunkt();
    ppArray[3][0].printPunkt();
    ppArray[1][1].printPunkt();
    
    ///.........
    System.out.println("Automatisierung Zeilen&Spalten");
    
    for(int k=0; k<=zeilen+1; k++){	
    	for (int j=0; j<=spalten+1; j++){
    	
    	ppArray[k][j] = ppArray[k-k][j-j].addmultivektor(vec_ba_part, vec_bc_part, k, j);
            }        
   }```

Leider läuft die For-Schleife nicht und ich habe keine Ideen mehr.
Vielleicht kann mir hier noch jemand helfen.
Liebe Grüße
confugere

Gibt es Fehlermeldungen?

k und j laufen jeweils 1 zu weit.

ppArray[k-k][j-j]?? Das ist immer b, oder nicht? Schreib da b und manuelles Setzen einzelner Werte (Zeilen 4 bis 9) ist nicht nötig.