A
anfänger123
Gast
also ich wollte einige methoden per java berechnen lassen und diese grahisch zeichnen wie man PI annäherungsweise berechnen kann.
bisher mein code:
mein problem (naja schönheitsproblem)
ist, dass es die n-ecke übereinander zeichnen soll.
leider aber zeichnet es diese ja nicht aufeinander sondern nebeneinander.
FRAGE: wie kann ich das ändern?
P.s. das problem wäre in case 2
grüsse der anfänger xD
bisher mein code:
Code:
import ch.aplu.turtle.Turtle;
import ch.aplu.util.*;
public class PI {
public static void main(String[] args) {
int annaeherung, Zahl = 1000, n, durchläufe;
double pi, Sn, S2n, K, U, h, treffer = 0, gesamt = 1000000;
double b = 0, x, y, PI, Fläche = 0, xach = 0, höhe1 = 0, höhe2 = 0, xachhöhe1 = 0, xachhöhe2 = 0;
InputDialog id = new InputDialog(
"Annaeherung",
"Welche Methode wollen sie verwenden? 1= Monte Carlo,2 = n-Eck, 3= Saeulen-Methode");
annaeherung = id.readInt();
switch (annaeherung) {
case 1: {
InputDialog id4 = new InputDialog("Durchläufe",
"Wieviele Durchläufe wollen sie machen?");
durchläufe = id4.readInt();
for (int a = 1; a <= durchläufe; a++) {
GPanel p = new GPanel(0, Zahl, 0, Zahl);
p.circle(Zahl);
for (int i = 0; i <= gesamt; i++) {
x = Zahl * (Math.random());
y = Zahl * (Math.random());
p.move(x, y);
p.circle(0.1);
if (Math.sqrt(x * x + y * y) <= Zahl) {
treffer = treffer + 1;
}
}
pi = 4 * treffer / (gesamt);
b = b + pi;
treffer = 0;
pi = 0;
}
PI = b / durchläufe;
MessageDialog g = new MessageDialog("Durchschnitt: " + PI);
g.show();
}
break;
case 2: {
Turtle john = new Turtle();
InputDialog id1 = new InputDialog("Ecken",
"Wieviele Ecken soll das n-eck haben) Auswahl zwischen 4 oder 6");
n = id1.readInt();
if (n == 4) {
Sn = Math.sqrt(2);
} else {
Sn = 1;
}
for (int a = 1; a <= 5; a++) {
h = Math.sqrt(1 - Math.pow((Sn / 2), 2));
y = 1 - h;
S2n = Math.sqrt(Math.pow(y, 2) + Math.pow((Sn / 2), 2));
U = n * Sn;
Sn = S2n;
pi = U / 2;
Console.println("Pi vom " + n + "-Eck " + pi
+ " Der Umfang betraegt " + U);
john.hideTurtle();
john.setPos(100, 20);
for (int i = 0; i < n; i++) {
john.left(360 / n);
john.forward(100 * Sn);
}
n = 2 * n;
}
}
break;
case 3: {
InputDialog id2 = new InputDialog(
"Pi Annaeherung mit Säulen-Methode",
"Bitte geben sie die Gewuenschte Anzahl Saeulen ein:");
int abstände1 = id2.readInt();
GPanel p = new GPanel(0, 0.5, 0, 0.5);
p.circle(0.5);
for (int i = 1; i <= abstände1; i++) {
xach = xach + i;
xachhöhe1 = (0.5 / abstände1) * (xach - 1);
xachhöhe2 = (0.5 / abstände1) * xach;
höhe1 = Math.sqrt(0.25 - Math.pow(xachhöhe1, 2));
höhe2 = Math.sqrt(0.25 - Math.pow(xachhöhe2, 2));
Fläche = Fläche + (((höhe1 + höhe2) / 2) * (0.5 / abstände1));
p.draw(xachhöhe1, höhe1);
p.draw(xachhöhe2, höhe1);
p.draw(xachhöhe2, höhe2);
p.draw(xachhöhe1, höhe2);
p.draw(xachhöhe2, höhe2);
p.draw(xachhöhe2, 0);
xach = 0;
}
pi = 16 * Fläche;
MessageDialog md = new MessageDialog("Pi betraegt " + pi);
md.show();
}
}
MessageDialog md1 = new MessageDialog(
"Vielen dank für die Verwendung unseres Programmes");
md1.show();
}
}
mein problem (naja schönheitsproblem)
ist, dass es die n-ecke übereinander zeichnen soll.
leider aber zeichnet es diese ja nicht aufeinander sondern nebeneinander.
FRAGE: wie kann ich das ändern?
P.s. das problem wäre in case 2
grüsse der anfänger xD