Der bør *ikke* skulle deles med 2 for at få det til at virke - der er et eller andet galt i dine udregninger. Imidlertid gav jeg dig også de forkerte formler - en almindelig fortegnsfejl - prøv med disse og se om de ikke er bedre:
double A = Math.Acos((b*b + c*c - a*a)/(2*b*c)); A = A * 180 / Math.PI;
double B = Math.Acos((a*a + c*c - b*b)/(2*a*b)); B = B * 180 / Math.PI;
double C = Math.Acos((a*a + b*b - c*c)/(2*a*b)); C = C * 180 / Math.PI;
Forresten... Hvorfor omregner du ikke fra grader til radianer en gang for alle helt oppe i toppen af din kode, i stedet for at gøre det for hver if-sætning?
Du har i hvert fald nogle fejl hvor du laver kode som denne:
// a, A og B er kendt if (textBox1.Text != "0" && textBox2.Text != "0" && textBox4.Text != "0") { C = Math.PI - A - B; C = C * 180 / Math.PI; textBox3.Text = Convert.ToString(C);
c = a * Math.Sin(C) / Math.Sin(A); textBox6.Text = Convert.ToString(c);
b = a * Math.Sin(B) / Math.Sin(A); textBox5.Text = Convert.ToString(b);
return; }
Her starter C med at være i radianer, hvorefter du så omregner til grader - men dette giver dig problemer når du efterfølgende skriver:
Math.Sin(C)
- i det denne forventer at C stadig er i radianer.
Der var en enkelt fejl, og så har jeg flyttet om på nogen af dine led:
private void button1_Click(object sender, System.EventArgs e) { try { a = Double.Parse(textBox4.Text); b = Double.Parse(textBox5.Text); c = Double.Parse(textBox6.Text);
A = Double.Parse(textBox1.Text); B = Double.Parse(textBox2.Text); C = Double.Parse(textBox3.Text);
A = Math.PI / 180 * A; B = Math.PI / 180 * B; C = Math.PI / 180 * C; } catch { }
if ((textBox4.Text == "0" && textBox5.Text == "0" && textBox5.Text == "0")) { MessageBox.Show("Sidelængderne kan ikke bestemmes uden at kende mindst en af siderne."); return; }
if ((textBox4.Text != "0" && textBox5.Text == "0" && textBox5.Text == "0") || (textBox4.Text != "0" && textBox5.Text != "0" && textBox5.Text == "0") || (textBox4.Text != "0" && textBox5.Text != "0" && textBox5.Text != "0")) { // a, A og B er kendt if (textBox1.Text != "0" && textBox2.Text != "0" && textBox4.Text != "0") { C = Math.PI - A - B;
b = a * Math.Sin(B) / Math.Sin(A); textBox5.Text = Convert.ToString(b);
c = a * Math.Sin(C) / Math.Sin(A); textBox6.Text = Convert.ToString(c);
C = C * 180 / Math.PI; textBox3.Text = Convert.ToString(C);
return; }
// a, A og C er kendt if (textBox1.Text != "0" && textBox3.Text != "0" && textBox4.Text != "0") { B = Math.PI - A - C;
b = a * Math.Sin(B) / Math.Sin(A); textBox5.Text = Convert.ToString(b);
c = a * Math.Sin(C) / Math.Sin(A); textBox6.Text = Convert.ToString(c);
B = B * 180 / Math.PI; textBox2.Text = Convert.ToString(B);
return; }
// a, B og C er kendt if (textBox2.Text != "0" && textBox3.Text != "0" && textBox4.Text != "0") { A = Math.PI - B - C;
b = a * Math.Sin(B) / Math.Sin(A); textBox5.Text = Convert.ToString(b);
c = a * Math.Sin(C) / Math.Sin(A); textBox6.Text = Convert.ToString(c);
A = A * 180 / Math.PI; textBox1.Text = Convert.ToString(A);
return; }
// a, b og A kendt if (textBox1.Text != "0" && textBox4.Text != "0" && textBox5.Text != "0") { B = Math.Asin(b / a * Math.Sin(A));
C = Math.PI - A - B;
c = a * Math.Sin(C) / Math.Sin(A); textBox6.Text = Convert.ToString(c);
B = B * 180 / Math.PI; textBox2.Text = Convert.ToString(B);
C = C * 180 / Math.PI; textBox3.Text = Convert.ToString(C);
return; }
// a, b og B er kendt if (textBox2.Text != "0" && textBox4.Text != "0" && textBox5.Text != "0") { A = Math.Asin(a / b * Math.Sin(B)); // Der var fejl i denne formel.
C = Math.PI - A - B;
c = a * Math.Sin(C) / Math.Sin(A); textBox6.Text = Convert.ToString(c);
A = A * 180 / Math.PI; textBox1.Text = Convert.ToString(A);
C = C * 180 / Math.PI; textBox3.Text = Convert.ToString(C);
return; }
// a, b og C kendt if (textBox3.Text != "0" && textBox4.Text != "0" && textBox5.Text != "0") { c = Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2) - 2 * a * b * Math.Cos(C));
textBox6.Text = Convert.ToString(c);
A = Math.Asin(a / c * Math.Sin(C));
B = Math.PI - A - C;
A = A * 180 / Math.PI; textBox1.Text = Convert.ToString(A);
B = B * 180 / Math.PI; textBox2.Text = Convert.ToString(B);
return;
}
// a, b og c er kendt if (textBox4.Text != "0" && textBox5.Text != "0" && textBox6.Text != "0") { A = Math.Acos((b*b + c*c - a*a)/(2*b*c)); // Her kan du selvfølgelig også bruge Math.Pow(a, 2) istedet for a*a.
A = A * 180 / Math.PI; textBox1.Text = Convert.ToString(A);
B = Math.Acos((a*a + c*c - b*b)/(2*a*b));
B = B * 180 / Math.PI; textBox2.Text = Convert.ToString(B);
C = Math.Acos((a*a + b*b - c*c)/(2*a*b));
C = C * 180 / Math.PI; textBox3.Text = Convert.ToString(C);
return; }
} else { MessageBox.Show("Du skal dreje trekanten sådan at de kente sidelængder starter fra a, b og c."); return; } }
når jeg er færdig med finpusningen lægger jeg den færdige version (1.0) op på www.faarup.1go.dk/trigonometri/Trigonometri.exe - evt. forslag til programmet - send mig en mail på peter.faarup@gmail.com
har du nogle ideer til udvidelse af programmet ? eller til hvordan en v2 udgave kan se ud ?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.