Java Aufgabe

Mohamed2

Mitglied
Hallo zusammen,
ich komme nicht auf die Lösung kann mir jemand vielleicht helfen

Dreidimensionale Körper können in einer geschlossenen Form angegeben werden.
Dies ist eine Funktion, die für einen Punkt angibt, ob er sich innerhalb oder außerhalb der Form befindet.
Beispiel: Für eine Kugel mit Radius r sieht die Funktion wie folgt aus.

f(x,y,z)=( true sqrt(x2 + y2 + z2)

false sonst )

Für r = 5 ergibt f(1, 1, 1) true (in der Kugel), f(5, 5, 5) ergibt false (außerhalb der Kugel).

Betrachten Sie nun das Programm Sample3D.java. Es enthält eine Methode isInsideBody, die eine geschlossene Form für einen Körper darstellt.
Ihre Aufgabe ist es, die Hauptmethode main zu schreiben, so dass das Volumen des Körpers approximiert wird. Dies sollte für jede Implementierung von isInsideBody funktionieren (also nicht nur für Kugel mit Radius 5, die sie in Sample3D.java finden).
Hinweise:
• Sie dürfen annehmen, dass sich die Körper in einer 3D-Box befindet, die von (-10, -10, -10) bis (10, 10, 10) reicht.
• Tipp: Werten Sie die Funktion an diskreten Punkten im 3D-Gitter aus und schließen sie damit auf das Volumen.

hier ist die isInsideBody Methode:
Java:
public class Sample3D {
/**
* Methods returns true if and only if given position is inside the body.
*
* @param x x position
* @param y y position
* @param z z position
*@Return true iff position is inside body
*/
public static boolean isInsideBody(double x, double y, double z) {
double distToCenter = Math.sqrt(x * x + y * y + z * z);
return distToCenter <= 5;
}

public static void main(String[] args) {

// Example
boolean isInside = isInsideBody(1, 2, 3);

// TODO: Compute volume

}
}
 
Zuletzt bearbeitet von einem Moderator:

JCODA

Top Contributor
Zunächst kannst du ja mal f an jedem Gitterpunkt auswerten, zählen wie oft du drin bist. Dann kannst du das Volumen von der 3d-box berechnen. Wie groß ist dieses? Wie viele ganzzahlige Gitterpunkte hat die Box? Nun kannst du das Volumen der Kugel bzw jedes anderen Körpers durch Dreisatz berechnen.
 

DrZoidberg

Top Contributor
Du könntest zum Beispiel drei Schleifen verwenden um eine große Anzahl diskreter Punkte zu erzeugen, die du dann der Methode übergeben kannst.
Java:
double schrittweite = 1;
for(double x = -10; x < 10; x += schrittweite) {
  for(double y = -10; y < 10; y += schrittweite) {
    for(double z = -10; z < 10; z += schrittweite) {
      if(koerper.isInsideBody(x, y, z)) {
        ...
      }
    }
  }
}
Je kleiner die Schrittweite, desto mehr Punkte hast du und desto genauer wird das Ergebnis.
 

Dompteur

Top Contributor
Du kannst da die Monte Carlo Methode verwenden.
Du kennst die Maße der 3D-Box. Damit kannst du auch deren Volumen berechnen. Nennen wir es VBox
Nun erzeugst du dir n zufällige Punkte innerhalb der 3D-Box. Du zählst dann alle Punkte, die innerhalb des Körpers liegen (isInsideBox() == true). Nennen wir die Summe sum.
Das Volumen des Körpers ist nun = VBox * sum / n.

Je größer du n wählst, umso mehr näherst du dich dem echten Wert.

Zum Nachlesen über das Verfahren hier ein Link : http://www.mathepedia.de/Monte-Carlo-Methode.html
 

Neue Themen


Oben