Trigonometri-program

Tags:    c#

Hej alle.

Jeg har lavet et Trigonometri program hvor man indtaster 3 værdier i en trekant og så beregner den de sidste værdier. Jeg ville bare lige høre om der var nogle der gad at tjekke om disse formler er rigtige:

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;
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;
}

// a, A og C er kendt
if(textBox1.Text != "0" && textBox3.Text != "0" && textBox4.Text != "0")
{
B = Math.PI - A - C;
B = B * 180 / Math.PI;
textBox2.Text = Convert.ToString(B);

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;
}

// a, B og C er kendt
if(textBox2.Text != "0" && textBox3.Text != "0" && textBox4.Text != "0")
{
A = Math.PI - B - C;
A = A * 180 / Math.PI;
textBox1.Text = Convert.ToString(A);

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;
}

// a, b og A kendt
if(textBox1.Text != "0" && textBox4.Text != "0" && textBox5.Text != "0")
{


B = Math.Asin(b / a * Math.Sin(A));
B = B * 180 / Math.PI;
textBox2.Text = Convert.ToString(B);
B = Math.PI / 180 * B;

C = Math.PI - A - B;
C = C * 180 / Math.PI;
textBox3.Text = Convert.ToString(C);
C = Math.PI / 180 * C;

c = a * Math.Sin(C) / Math.Sin(A);
textBox6.Text = Convert.ToString(c);

return;
}

// a, b og B er kendt
if(textBox2.Text != "0" && textBox4.Text != "0" && textBox5.Text != "0")
{


C = Math.Asin(a / b * Math.Sin(B));
C = C * 180 / Math.PI;
textBox3.Text = Convert.ToString(C);
C = Math.PI / 180 * C;

A = Math.PI - B - C;
A = A * 180 / Math.PI;
textBox1.Text = Convert.ToString(A);
A = Math.PI / 180 * A;

c = a * Math.Sin(C) / Math.Sin(A);
textBox6.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));
A = A * 180 / Math.PI;
textBox1.Text = Convert.ToString(A);
A = Math.PI / 180 * A;

B = Math.PI - A - C;
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")
{
double A = Math.Acos((b*b + c*c - a*a)/(2*b*c));
A = A * 180 / Math.PI;
textBox1.Text = Convert.ToString(A);

double B = Math.Acos((a*a + c*c - b*b)/(2*a*b));
B = B * 180 / Math.PI;
textBox2.Text = Convert.ToString(B);

double 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;
}
}



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Hej

til at starte med regner du de givne vinkler om til radianer. Jeg går ud fra du gør det, fordi de sin og cos funktioner du bruger, tager vinkler angivet ved radianer som argumenter.

Fold kodeboks ind/udKode 


Men når du så regener den manglene vinkel ud, som her hvor du finder C:

Fold kodeboks ind/udKode 


Laver du den om til grader igen, nok for at få et pænt outout. Men så vidt jeg kan se, regner du ikke tilbage til radianer igen, inden du bruger vinklen i næste udregning:

Fold kodeboks ind/udKode 


Det giver en fejl. Ellers ser formlerne meget rigtige ud.
Der er dog noget andet ved koden, i den ene if sætning, har du følgende stående:

Fold kodeboks ind/udKode 


Der er umiddelbart altid falsk. Mon ikke den ene skulle have heddet textBox6 eller noget i den stil

adam
Køb en zebra - og kald den plet




Det her er bare en bemærkning der ikke har noget med trigonometri at gøre men der er ingen grundtil at teste på textbox4.text!="" i alle de if sætninger der er inde under hoved testen da det er et krav at det er sandt for overhovedet at komme ind i den og da du aldrig sætter den til "" inde i if sætningen.
-----------------------------------------------------------------------------

Min side ->www.the-hive.dk/~donp/



En anden ting. Det er dårlig stil at bruge værdier du har beregnet, da du på dem kun har et endeligt antal betydende cifre. Du burde altså ikke bruge en vinkel du regner som pi -A -B. Men i stedet bruge cosinus relationer. Jeg mener man kan regne de tre ubenkente kun ved brug af de kendte, på den måde.

adam
Køb en zebra - og kald den plet




t