Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:18 Der er 98 kommentarer og
2 løsninger

program til trekantsberegning

Hej eksperter.

Jeg har lavet dette lille program til trekantsberegninger:

        private void button1_Click(object sender, System.EventArgs e)
        {
            if(textBox1.Text == "A" && textBox2.Text == "B" && textBox6.Text == "c")
            {
                try
                {
                    a = Double.Parse(textBox4.Text);
                    b = Double.Parse(textBox5.Text);
                    C = Double.Parse(textBox3.Text);
                    c = Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2) - 2 * a * b * Math.Cos(C));
                   
                    textBox6.Text = Convert.ToString(c);
                }
                catch
                {
                    MessageBox.Show("fejl!");
                }
            }
           
            if(textBox2.Text == "B" && textBox3.Text == "C" && textBox4.Text == "a")
            {
                try
                {
                    b = Double.Parse(textBox5.Text);
                    c = Double.Parse(textBox6.Text);
                    A = Double.Parse(textBox1.Text);
                    a = Math.Sqrt(Math.Pow(b, 2) + Math.Pow(c, 2) - 2 * b * c * Math.Cos(A));

                    textBox4.Text = Convert.ToString(a);
                }
                catch
                {
                    MessageBox.Show("fejl!");
                }
            {

                if(textBox1.Text == "A" && textBox3.Text == "C" && textBox5.Text == "b")
                {
                    try
                    {
                        c = Double.Parse(textBox6.Text);
                        a = Double.Parse(textBox4.Text);
                        B = Double.Parse(textBox2.Text);
                        b = Math.Sqrt(Math.Pow(c, 2) + Math.Pow(a, 2) - 2 * c * a * Math.Cos(B));

                        textBox5.Text = Convert.ToString(b);
                    }
                    catch
                    {
                        MessageBox.Show("fejl!");
                    }
                }
            }
            }

jeg har 6 textbokse. 3 til vinklerne og 3 til siderne.

denne kode fungerer ikke specielt godt. er der ikke nogen der ved hvordan man laver det sådan så den beregner de unkendte sider og vinkler ud fra de indtastede ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:19 #1
ps i MIT program bruger jeg kun cosinusrelationen, men det kræver vel en sinusrelation for at beregne ud fra andre indtastede oplysninger ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:21 #2
se evt.
http://formel.dk/
under menuen matematik - geometri - trigonometri !
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:24 #3
Hvad er det du ikke kan lide ved din egen løsning?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:26 #4
der er at hvis man fx kun indtaster a, b, og c så sker der ikke noget. hvordan får jeg den så til at beregne ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:26 #5
der mangler ligesom noget i programmet !
Avatar billede arne_v Ekspert
11. oktober 2005 - 18:38 #6
skal

          if(textBox1.Text == "A" && textBox2.Text == "B" && textBox6.Text == "c")
 
ikke være

          if(textBox1.Text != "" && textBox2.Text != "" && textBox6.Text != "")
 
?
Avatar billede arne_v Ekspert
11. oktober 2005 - 18:39 #7
nej nok snarere

if(textBox1.Text == "" && textBox2.Text == "" && textBox6.Text == "")
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:41 #8
ja det har jeg også rettet. men nu skal jeg ha lavet det sådan at hvis men fx indtaster 2 vinkler og 1 side ?
et er det jeg er ude efter !

fx hvis jeg indtaster A og B og a hvordan beregner jeg så C og b og c ?
Avatar billede arne_v Ekspert
11. oktober 2005 - 18:45 #9
C = PI - A - B

så kan du beregne C

c/sin(C) = a/sin(A)
=>
c = a * sin(C) / sin(A)

og tilsvarende for b
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:45 #10
noget i stil med:

textBox1 = A
textBox2 = B
textBox3 = C
textBox4 = a
textBox5 = b
textBox6 = c

if(textBox1.Text != "" && textBox2.Text != "" && textBox4.Text != "")
{
// beregn C, b og c
}
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:48 #11
hvordan for b ?
b = a * sin(C)/sin(A) ?
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:49 #12
b = a * sin(B)/sin(A)
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:50 #13
... kommer af:

b/sin(B) = a/sin(A)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:52 #14
er du sikker på at
c = a * sinC / sinA ??? jeg får bare et 0 i når jeg bruger det ?
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:53 #15
Husk nu at vinklerne skal opgives i radianer - ikke i grader.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:54 #16
jeg bruger:

A = Double.Parse(textBox1.Text);
B = Double.Parse(textBox2.Text);
a = Double.Parse(textBox4.Text);
c = (a * Math.Sin(C) / Math.Sin(A));


textBox6.Text = Convert.ToString(c);
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:54 #17
Men Arnes formel er fuldstændig korrekt - det er den formel som hedder "sinus-relationen".
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:55 #18
ahh radianer....hvordan konverterer jeg ?
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:56 #19
double Grader = 45;
double Radianer = Grader/180 * Math.PI;
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 18:56 #20
skal cosinus-realationen også bruges med radianer ?
den virker med grader hos mig !
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:57 #21
Math.Cos og Math.Sin skal fodres med radianer - ingen undtagelser.
Avatar billede nielle Nybegynder
11. oktober 2005 - 18:59 #22
Det er jo et problem ... der er så mange forkellige kombinationer på ubekendte at du kan blive helt skør af at skulle igennem dem alle.

Hvis du istedet starter med at "normalisere" problemet i den forstand at du drejer trekanten sådan at de kendte sidelængder er enten a, eller a+b, eller a+b+c så spare du dig en masse gentagelser af udregninger som essentielt er ens.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:00 #23
hvad mener du og hvordan ? ;)
Avatar billede nielle Nybegynder
11. oktober 2005 - 19:00 #24
(Du er jo nødt til at kende mindst en af sidelængderne - ellers kan problemet ikke løses)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:04 #25
ok nu bliver c = -5,05121268425997 fx. hvis jeg indtaster a = 50 B = 60 og a = 5  ??
Avatar billede nielle Nybegynder
11. oktober 2005 - 19:04 #26
Jeg mener at hvis du f.eks. kender b, c og A, så kan den trekant drejes sådan at det er er siderne a og b, samt vinkelen C som er de kendte.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:04 #27
if(textBox1.Text != "" && textBox2.Text != "" && textBox4.Text != "")
            {
                A = Double.Parse(textBox1.Text);
                B = Double.Parse(textBox2.Text);
                a = Double.Parse(textBox4.Text);
                C = 180 - A - B;
                textBox3.Text = Convert.ToString(C);

                // Konvertering til radianer
                A = Math.PI / 180 * A;
                B = Math.PI / 180 * B;

                c = (a * Math.Sin(C) / Math.Sin(A));
               

                textBox6.Text = Convert.ToString(c);
               

            }
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:04 #28
hvorfor bliver c altid et minus tal ?
Avatar billede nielle Nybegynder
11. oktober 2005 - 19:05 #29
Husk lige at C også skal omregnes til radianer!
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:07 #30
;)
Avatar billede nielle Nybegynder
11. oktober 2005 - 19:08 #31
Arnes formel fra 11/10-2005 18:45:22 antager netop at vinklerne allerede var i radianer. :^)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:13 #32
nå mange tak for svarene jeg vil lave lidt videre...læg et svar nielle og arne !
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:20 #33
lige 1 ting til....nu har jeg C = sin(c/a) men hvordan laver jeg det "omvendte" sin...som på min lommeregner hedder sin^-1...men hvad hedder det i math klassen (c#) ??
Avatar billede arne_v Ekspert
11. oktober 2005 - 19:20 #34
Math.ASin
Avatar billede arne_v Ekspert
11. oktober 2005 - 19:20 #35
Math.Asin

sorry
Avatar billede arne_v Ekspert
11. oktober 2005 - 19:21 #36
(og ja - den returnerer også radian !)
Avatar billede arne_v Ekspert
11. oktober 2005 - 19:21 #37
og et svar
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:23 #38
ok rigtig mange tak....læg et svar nielle !
Avatar billede nielle Nybegynder
11. oktober 2005 - 19:27 #39
Ok, men du spørger selvfølgelig bare videre. :^)

... og et svar.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 19:41 #40
ja det tror jeg nok jeg kommer til ;)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 20:27 #41
hvor mange muligheder er der egentlig hvis man SKAL indtaste præcis 3 værdier ?
Avatar billede arne_v Ekspert
11. oktober 2005 - 20:29 #42
du kan udtage 3 ud af 6 på 20 forskellige måder
Avatar billede arne_v Ekspert
11. oktober 2005 - 20:29 #43
og der er ihvertfald en af dem som har uendeligt mange løsninger
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 20:31 #44
så jeg skal skrive 20 if-sætninger...med mindre i kunne vise mig hvordan jeg lave denne trekant "drejes" som nielle siger
Avatar billede nielle Nybegynder
11. oktober 2005 - 20:36 #45
Hvis du drejer trekanterne, så spare du ca. 2/3 af udregningerne.

Det kan jo bare gøre det ved at kræve at a er udfyldt, eller at a+b er udfyldt, eller at a+b+c er udfyldt.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 20:38 #46
det forstår jeg ikke helt rigtigt...eller jo jeg forstår det godt men jeg ved ikke helt hvordan jeg skal omsætte det til kode ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 20:41 #47
skal jeg så lave en:

if(textBox4.Text != "" && textBox5.Text != "" && textBox6.Text != "")
{
andre if-sætninger
}
else
{
messagebox.show("du skal indtaste 3 værdier");
}

???
Avatar billede nielle Nybegynder
11. oktober 2005 - 20:44 #48
if ((textBox4.Text == "" && textBox5.Text == "" && textBox5.Text == "")
{
    MessageBox.Show("Sidelængderne kan ikke bestemmes uden at kende mindst en af siderne.");
    return;
}

if ((textBox4.Text != "" && textBox5.Text == "" && textBox5.Text == "") ||
    (textBox4.Text != "" && textBox5.Text != "" && textBox5.Text == "") ||
    (textBox4.Text != "" && textBox5.Text != "" && textBox5.Text != ""))
{
    // Beregn ...
}
else
{
    MessageBox.Show("Du skal dreje trekanten sådan at de kente sidelængder starter fra a, b og c.");
    return;
}
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 20:59 #49
men hvor mange og hvilke beregninger skal jeg så have med ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:01 #50
jeg har fået det til at jeg skal lave beregninger til 27 tal ?
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:04 #51
a er kendt og 2 af 3 vinkler er kendt -> 6 muligheder
a+b er kendt og 1 af 3 vinkler er kendt -> 1 mulighed
a+b+c er kendt og 0 vinkler er kendt -> 1 mulighed

I alt 8 beregninger.
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:05 #52
...
a+b er kendt og 1 af 3 vinkler er kendt -> 3 mulighed
...

I alt 10 beregninger.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:06 #53
den med a + b + c hvordan beregner man vinklernes størrelse der ?

jeg har altid haft problemer med den :S
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:08 #54
mit forslag er at du struktuerer det anderledes

glem A,B,C,a,b,c

1. niveau spørger du om:

3 kendte længder
2 kendte længder + 1 kendt vinkel
1 kendt længde + 2 kendt vinkler

og så på andet biveau spørger du om længder og vinkler, så får du helt naturligt
struktueret det
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:10 #55
Du bruger cosinus-relationen:

c^2 = a^2 + b^2 - 2ab*cos(C)

Da a+b+c er kendt kan du isolere C. Samme for de andre 2 vinkler.
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:26 #56
?? c^2 = a^2 + b^2 - 2ab*cos(C) ja... men vi kender jo ikke C, kun a, b og c (med småt) !
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:27 #57
Da a+b+c er kendt kan du isolere C. Samme for de andre 2 vinkler.


ok sorry men hvordan gør jeg det...jeg går kun i 9. klasse !
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:27 #58
og vigtigst hvordan går man det i C# ?
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:30 #59
c^2 = a^2 + b^2 - 2ab*cos(C)

=>

cos(C) = (c^2 - a^2 - b^2) / (-2ab)

=>

C = acos(c^2 - a^2 - b^2) / (-2ab))

og den må være lige til at ligge ind i C#
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:35 #60
mange tak

du er da ikke helt dårlig til matematik ;)
Avatar billede arne_v Ekspert
11. oktober 2005 - 21:37 #61
matematisk student

1983

:-)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:39 #62
er der ikke kun 3 muligheder når man kender a og 2 vinkler ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:40 #63
a - A - B
a - A - C
a - B - C
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:43 #64
Korrekt...
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:43 #65
ok så er da der KUN 7 if-sætninger !
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:45 #66
en ting der ikke har noget at gøre med dette, men alligevel lidt matematik....

du skal trække 3 kort af et kortspil på 52 kort !
hvad er sansynligheden for at trække 3 billedkort ?

er det ikke

(12*11*10)/(52*21*20)
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:45 #67
Jep. :^)
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:46 #68
(12*11*10)/(52*51*50)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:47 #69
ca 1 procent ! 1 / 100 ;)
Avatar billede nielle Nybegynder
11. oktober 2005 - 21:49 #70
Yep: 0,995... %
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:54 #71
yes nu har jeg lavet de tre første med a og 2 vinkler som kendt!
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 21:59 #72
hvis nu jeg kender a, b og A hvordan finder jeg så fx B eller C eller c ??
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 22:03 #73
det må være sinus-relationen

hvis jeg skal finde c

c/sin(C) = a/Sin(A)

men jeg kender jo kun en vinkel ?
Avatar billede nielle Nybegynder
11. oktober 2005 - 22:05 #74
b/sin(B) = a/sin(B)

=>

sin(B) = b/a * sin(A)

=>

B = sin^-1(b/a * sin(A))
Avatar billede nielle Nybegynder
11. oktober 2005 - 22:11 #75
Når du så har A og B så finder du C som:

C = Pi - A - B (radianer)
Avatar billede nielle Nybegynder
11. oktober 2005 - 22:13 #76
... og til sidst finder du c:

c/sin(C) = a/sin(A))

=>

c = a sin(C)/sin(A)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:01 #77
ahhh radianer....:-)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:24 #78
her kommer der en sværere en.
jeg kender
a, b og B
og jeg skal finde C ?
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:25 #79
dette virker ihvertfald ikke:
C = Math.Asin(c / a * Math.Sin(A));
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:35 #80
jeg er ikke sikker på om
C = Asin(c / b * Sin(B)) virker ???
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:39 #81
jeg har prøvet alt men jeg kan ikke få noget til at du ??...

men der MÅ der være en måde at finde C på ???
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:47 #82
nå jeg prøver i morgen !
Avatar billede arne_v Ekspert
11. oktober 2005 - 23:51 #83
kende a, b og A

og

kende a, b og B

må være præcis samme løsning (bare byt om a<->b og A<->B)
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:53 #84
så dvs. at    C = Asin(a / b * sin(B))
i stedet for  C = Asin(b / a * sin(A)) ???
Avatar billede visualdeveloper Nybegynder
11. oktober 2005 - 23:54 #85
eller er det:

A = Asin(a / b * sin(B))
Avatar billede arne_v Ekspert
11. oktober 2005 - 23:56 #86
uden at have regnet efter vil jeg sige

C = Asin(a / b * sin(B))

hvordan passer resultatet ?
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:01 #87
og
den sidste :
vi kender a, b og C

skal jeg så bare bytte a<->b og A<->C ???
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:01 #88
C = Asin(a / b * sin(B)) ???
det passer  ;)
Avatar billede arne_v Ekspert
12. oktober 2005 - 00:04 #89
nej - den er ikke symmetrisk

tilbage til cosinus relationen i 21:10:24

nu er det bare c du skal finde

(og A og B er så nemme at finde via sinus relationen når du kender c og C)
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:07 #90
ok mange tak....men jeg har altid undret mig over hvad DU laver....(arbejde) hvor arbejder du ? og hvordan har du tid til at være her inde på EXP 24-7 ?
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:08 #91
det er fordi jeg leder efter en praktik-plads. vi skal nemlig i praktik efter jul så jeg ville høre om du kendte nogen der kunne tænke sig / søger elever til praktik (folkeskole) ?
Avatar billede arne_v Ekspert
12. oktober 2005 - 00:14 #92
Hvis du klikker på mit navn kan du se mit mini site, som fortæller en lille smule.

Det firma jeg arbejder for har aldrig haft praktikant, men hvis du bor
i nærheden af Brøndbyøster, så koster det jo ikke noget at spørge.
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:18 #93
ja...jeg bor i virum...måske !
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:21 #94
lige en ting til inden jeg går i seng...nu har jeg lavet en menu med en menubutton (beregn) der skal "kalde" button1_Click handlingen dvs at den skal udføre samme handling som knappen !
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:23 #95
12/10-2005 00:04:51 - jeg kender ikke c og C ;)
Avatar billede arne_v Ekspert
12. oktober 2005 - 00:24 #96
du skriver "vi kender a, b og C" så du kender C

c beregner du ved hjælp af cosinus relationen

og så kender du både C og c
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:27 #97
ok...men så det med menuen ^
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 00:40 #98
hvordan gør jeg det, med menuen ???

12/10-2005 00:04:51

det må da være rimelig simpelt ?
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 18:14 #99
er der en der gider at tjekke om alle formlerne i dette program er rigtige:

www.kimcs-clan.dk/Form1.cs
Avatar billede visualdeveloper Nybegynder
12. oktober 2005 - 18:18 #100
eller www.kimcs-clan.dk/trig.txt (lidt mere overskuelig)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester