Kugel mit Hilfe von Dreiecken rekursiv zeichnen

Aboya

Mitglied
Hallo, ich muss eine Kugel mittel Rekursion zeichnen. Und zwar soll ich die Kugel "zeilenweise" mit n Zeilen von oben nach unten (n ist dabei die Rekursionstiefe). In jeder Zeile soll ich rekursiv n Dreiecke rund um die Kugel zeichnen, und dann die nächste Zeile beginnen usw. In jeder Zeile sind gleich viele Dreiecke. Der rekursive Algorithmus soll 3 Parameter haben (Zeile, Spalte auf der Kugel und n). n ändert sich nicht, nur Zeile und Spalte. Um einen Punkt zu berechnen habe ich diese Formeln:
𝑃.𝑥=𝑟∙cos𝛼∙cos𝛽
𝑃.𝑦=𝑟∙sin𝛼∙cos𝛽
𝑃.𝑧=𝑟∙sin𝛽
Hat irgendjemand eine Idee wie ich so etwas machen soll, ich komm einfach nicht drauf. Vielen Dank schon mal für die Hilfe
[CODE lang="java" title="Das ist der Code aktuell, ist nicht der gesamte, aber die wichtigen Methoden"]Point(double radius, double alpha, double beta){
x=radius* Math.cos(alpha)*Math.cos(beta);
y=radius* Math.sin(alpha)*Math.cos(beta);
z=radius* Math.sin(beta);
}
void rekursiv(int n, Point p1, Point p2, Point p3){
if(n==0)return;

printTriangle(p1,p2,p3);
}
void print(int n) {
Point p1= new Point(getRadius(),0,90); //random Zahlen, weiß nicht genau was hingehört
Point p2= new Point(getRadius(),0,16);
Point p3= new Point(getRadius(),15,85);
System.out.println("solid Aufgabe3");

rekursiv(n,p1,p2,p3);

System.out.println("endsolid");
}[/CODE]
 
Der rekursive Algorithmus soll 3 Parameter haben (Zeile, Spalte auf der Kugel und n). n ändert sich nicht, nur Zeile und Spalte.
Gehen wir mal davon aus, dass der Algorithmus bei (0,0) beginnt und wir von links oben nach rechts unten gehen wollen. Dann wird der Algorithmus so lange rekursiv aufgerufen, bis die Zeile n erreicht wird.

Da damit die Abbruchbedingung der Rekursion bekannt ist, kann man also schon ein Skelett formulieren:
Java:
public void triangulate(int row, int col, int n) {
    if (row == n) {
        return;
    }
    // TODO
}

Jetzt überlegen wir uns, dass wir in jeder Zeile durch die Spalten gehen müssen, d. h. wir werden das Dreieck für row, col und n zeichnen und danach triangulate(row, col+1, n) aufrufen müssen. Wie lange? Naja, bis col n erreicht. Und dann? Dann muss es in der nächsten Zeile von vorne losgehen.

Java:
public void triangulate(int row, int col, int n) {
    if (row == n) {
        return;
    } else if (col == n) {
        triangulate(row+1, 0, n);
    } else {
        paintTriangle(row, col, n);
        triangulate(row, col+1, n);
    }
}
 

Zurück
Oben