Mesh-Klasse

Status
Nicht offen für weitere Antworten.

Mana

Mitglied
Hallo,

ich soll für eine Studienarbeit verschiedene Funktionen mit der Mesh-Klasse darstellen.
Hinterher soll daraus ein Funktionsplotter werden.
Ich habe seid diesem Semester Ingenieursinformatik und die Übungen liefen bis jetzt ganz gut aber bei der Studienarbeit komme ich nicht ganz vorran, da ich mich mit dieser Mesh-Klasse überhaupt nicht auskenne.
Ich habe jetzt mittlerweile ein Beispiel für eine Funktion in der Mesh-Klasse:

Code:
import inf.v3d.obj.BoundingBox;
import inf.v3d.obj.Mesh;
import inf.v3d.obj.MeshContourLines;
import inf.v3d.view.Viewer;


public class Test {
	public static void main(String[] args) {
	int n = 50;
	 Mesh mesh = new Mesh(n, n);
	 BoundingBox boundingBox = new BoundingBox(mesh);
	 MeshContourLines contourLines = new MeshContourLines(mesh);

	 for (int i = 0; i < n; i++) {
	        for (int j = 0; j < n; j++) {
	                double x = i - n / 2;
	                double y = j - n / 2;
	                double z = x * y / n;

	                mesh.setCoordinates(i, j, x, y, z);
	                mesh.setData(i, j, z);
	        }
	 }
	 mesh.setSmooth(true);
	 mesh.setColoringByData(true);
	 mesh.createColors();
	 contourLines.createContours();
	 new Viewer().setVisible(true);
}

}

Meine Frage: Was hat es mit diesen Knoten auf sich die man mit dem Mesh-Konstruktor erstellt? Und kann ich einfach andere Werte für die Koordinaten einsetzten oder muss ich da irgendetwas mit diesen Knoten machen?!
Ich habe bereits versucht andere Koordinaten einzusetzten was aber nichts gebracht hat und nurnoch die Box im Viewer angeziegt wurde was mich darauf schließen lässt das es was mit diesem Mesh zu tun hat!

Ich habe versucht die Schnecke

| 1.2^u(1+cos v)cos u |
| 1.2^u(1+cos u )sin u |
| 1.2^usin v -1.5 1.2^u | für 0<=u <=6pi ; 0<=v<=2pi

zu erstellen:
Code:
mport inf.v3d.obj.BoundingBox;
import inf.v3d.obj.Mesh;
import inf.v3d.obj.MeshContourLines;
import inf.v3d.view.Viewer;

public class Test01 {

	public static void main(String[] args) {
		int n = 50;
		int u = 0;
		int v = 0;
		Mesh mesh = new Mesh(n ,n);
		BoundingBox boundingBox = new BoundingBox(mesh);
		MeshContourLines contourLines = new MeshContourLines(mesh);
		for (int i = u; i <= 6 * Math.PI; i++) {
			for (int j = v; j <= 2 * Math.PI; j++) {
				double x = Math.pow(1.2, i) * (1 + Math.cos(i)) * Math.cos(i);
				double y = Math.pow(1.2, i) * (1 + Math.cos(i)) * Math.sin(i);
				double z = Math.pow(1.2, i) * Math.sin(j) - 1.5
						* Math.pow(1.2, i);
				mesh.setCoordinates(i, j, x, y, z);
				mesh.setData(i, j, z);
			}
		}
		mesh.setSmooth(true);
		mesh.setColoringByData(true);
		mesh.createColors();
		contourLines.createContours();
		new Viewer().setVisible(true);

	}
}
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Diese Mesh-Klasse, um die es da wohl geht, ist euch wohl zur Vefügung gestellt worden - da sollte es eine Doku dazu geben....!?
 

Mana

Mitglied
Das mit der Mesh Klasse habe ich mittlerweile verstanden !
Nun habe ich ein anderes Problem:
Ich soll den Funktionswert einer Funktion ausgeben.
Die Funktion (Parabolische Schale) :

f(x,y)= 1-x^2-0.5*(x^2-1)*(y^2-1)

-1 <= x <= 1 ; -1 <= y <= 1

ich habe mir gedacht dass ich den Definitionsbereich in eine for-schleife eingebe und dann der Funktionswert für den Bereich berechnet wird.

Code:
public class ParabolischSchale {
	public static void main(String[] args) {

	}

	public double berechneFunktionswert(double x, double y) {
		for (int x = 1 ; x >= -1 ; x--){
		 for (int y = 1 ; y >= -1 ; y--){
			}
		}
		return 1 - Math.pow(x, 2) - 0.5 * (Math.pow(x, 2) - 1)
				* (Math.pow(y , 2));
	}

	{

}}

Dies funktioniert nur leider nicht und jetzt weiss ich leider nicht weiter;(???:L
 

Mana

Mitglied
Das mit der Mesh Klasse habe ich mittlerweile verstanden !
Nun habe ich ein anderes Problem:
Ich soll den Funktionswert einer Funktion ausgeben.
Die Funktion (Parabolische Schale) :

f(x,y)= 1-x^2-0.5*(x^2-1)*(y^2-1)

-1 <= x <= 1 ; -1 <= y <= 1

ich habe mir gedacht dass ich den Definitionsbereich in eine for-schleife eingebe und dann der Funktionswert für den Bereich berechnet wird.

Code:
public class ParabolischSchale {
	public static void main(String[] args) {

	}

	public double berechneFunktionswert(double x, double y) {
		for (int x = 1 ; x >= -1 ; x--){
		 for (int y = 1 ; y >= -1 ; y--){
			}
		}
		return 1 - Math.pow(x, 2) - 0.5 * (Math.pow(x, 2) - 1)
				* (Math.pow(y , 2));
	}

	{

}}

Dies funktioniert nur leider nicht und jetzt weiss ich leider nicht weiter;(???:L
 

Marco13

Top Contributor
Auf Gutdünken ein paar Klammern einfügen...!? :rolleyes:

Es gibt ja nicht nur EINEN Funktionswert, sondern viele. Und wie viele, das hängt davon ab, an wie vielen Stellen die Funktion ausgerechnet werden soll. Wenn es nur darum geht, die Werte auszugeben
Code:
// For http://www.java-forum.org/hausaufgaben/84523-mesh-klasse.html#post529948

public class ParabolischSchale
{
    public static void main(String[] args)
    {
        gibFunktionswerteAus(-1,1, 0.1, -1, 1, 0.1);
    }

    private static void gibFunktionswerteAus(
        double xMin, double xMax, double xSchrittweite,
        double yMin, double yMax, double ySchrittweite)
    {
        int xSchritte = (int)Math.ceil((xMax-xMin)/xSchrittweite);
        int ySchritte = (int)Math.ceil((yMax-yMin)/ySchrittweite);


        for (int i=0; i<=xSchritte; i++)
        {
            for (int j=0; j<=ySchritte; j++)
            {
                double x = xMin + i * xSchrittweite;
                double y = yMin + j * ySchrittweite;
                double wert = berechneFunktionswert(x,y);
                System.out.println("Bei "+x+" "+y+" is der Wert "+wert);
            }
        }
    }


    public static double berechneFunktionswert(double x, double y)
    {
        return 1 - Math.pow(x, 2) - 0.5 * (Math.pow(x, 2) - 1)
                * (Math.pow(y , 2));
    }
}

Wenn es darum geht, ein Mesh zu erstellen, das diese Schalen-Form hat, muss man sich die Funktionswerte für die einzelnen Punkte speichern und als eine Koordinate für die Vertices verwenden...
 

Mana

Mitglied
Danke schon mal für den Code , hat mir super geholfen:toll:
Ich hab jetzt nurnoch eine Frage zur Ausgabe in der Konsole. Und zwar :

Die Schrittweite wird ja mit 0.1 angegeben wie kommt es dann in der Konsole manchmal zu sowas

Bei -0.8 -0.3999999999999999 is der Wert 0.38879999999999987

also wieso nich -0.4 für y?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben