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 ?
Annonceindlæg fra Computerworld
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 ?
11. oktober 2005 - 18:21
#2
se evt.
http://formel.dk/ under menuen matematik - geometri - trigonometri !
11. oktober 2005 - 18:24
#3
Hvad er det du ikke kan lide ved din egen løsning?
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 ?
11. oktober 2005 - 18:26
#5
der mangler ligesom noget i programmet !
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 != "") ?
11. oktober 2005 - 18:39
#7
nej nok snarere if(textBox1.Text == "" && textBox2.Text == "" && textBox6.Text == "")
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 ?
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
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 }
11. oktober 2005 - 18:48
#11
hvordan for b ? b = a * sin(C)/sin(A) ?
11. oktober 2005 - 18:49
#12
b = a * sin(B)/sin(A)
11. oktober 2005 - 18:50
#13
... kommer af: b/sin(B) = a/sin(A)
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 ?
11. oktober 2005 - 18:53
#15
Husk nu at vinklerne skal opgives i radianer - ikke i grader.
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);
11. oktober 2005 - 18:54
#17
Men Arnes formel er fuldstændig korrekt - det er den formel som hedder "sinus-relationen".
11. oktober 2005 - 18:55
#18
ahh radianer....hvordan konverterer jeg ?
11. oktober 2005 - 18:56
#19
double Grader = 45; double Radianer = Grader/180 * Math.PI;
11. oktober 2005 - 18:56
#20
skal cosinus-realationen også bruges med radianer ? den virker med grader hos mig !
11. oktober 2005 - 18:57
#21
Math.Cos og Math.Sin skal fodres med radianer - ingen undtagelser.
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.
11. oktober 2005 - 19:00
#23
hvad mener du og hvordan ? ;)
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)
11. oktober 2005 - 19:04
#25
ok nu bliver c = -5,05121268425997 fx. hvis jeg indtaster a = 50 B = 60 og a = 5 ??
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.
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); }
11. oktober 2005 - 19:04
#28
hvorfor bliver c altid et minus tal ?
11. oktober 2005 - 19:05
#29
Husk lige at C også skal omregnes til radianer!
11. oktober 2005 - 19:07
#30
;)
11. oktober 2005 - 19:08
#31
Arnes formel fra 11/10-2005 18:45:22 antager netop at vinklerne allerede var i radianer. :^)
11. oktober 2005 - 19:13
#32
nå mange tak for svarene jeg vil lave lidt videre...læg et svar nielle og arne !
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#) ??
11. oktober 2005 - 19:20
#34
Math.ASin
11. oktober 2005 - 19:20
#35
Math.Asin sorry
11. oktober 2005 - 19:21
#36
(og ja - den returnerer også radian !)
11. oktober 2005 - 19:21
#37
og et svar
11. oktober 2005 - 19:23
#38
ok rigtig mange tak....læg et svar nielle !
11. oktober 2005 - 19:27
#39
Ok, men du spørger selvfølgelig bare videre. :^) ... og et svar.
11. oktober 2005 - 19:41
#40
ja det tror jeg nok jeg kommer til ;)
11. oktober 2005 - 20:27
#41
hvor mange muligheder er der egentlig hvis man SKAL indtaste præcis 3 værdier ?
11. oktober 2005 - 20:29
#42
du kan udtage 3 ud af 6 på 20 forskellige måder
11. oktober 2005 - 20:29
#43
og der er ihvertfald en af dem som har uendeligt mange løsninger
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
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.
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 ?
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"); } ???
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; }
11. oktober 2005 - 20:59
#49
men hvor mange og hvilke beregninger skal jeg så have med ?
11. oktober 2005 - 21:01
#50
jeg har fået det til at jeg skal lave beregninger til 27 tal ?
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.
11. oktober 2005 - 21:05
#52
... a+b er kendt og 1 af 3 vinkler er kendt -> 3 mulighed ... I alt 10 beregninger.
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
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
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.
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) !
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 !
11. oktober 2005 - 21:27
#58
og vigtigst hvordan går man det i C# ?
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#
11. oktober 2005 - 21:35
#60
mange tak du er da ikke helt dårlig til matematik ;)
11. oktober 2005 - 21:37
#61
matematisk student 1983 :-)
11. oktober 2005 - 21:39
#62
er der ikke kun 3 muligheder når man kender a og 2 vinkler ?
11. oktober 2005 - 21:40
#63
a - A - B a - A - C a - B - C
11. oktober 2005 - 21:43
#64
Korrekt...
11. oktober 2005 - 21:43
#65
ok så er da der KUN 7 if-sætninger !
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)
11. oktober 2005 - 21:45
#67
Jep. :^)
11. oktober 2005 - 21:46
#68
(12*11*10)/(52*51*50)
11. oktober 2005 - 21:47
#69
ca 1 procent ! 1 / 100 ;)
11. oktober 2005 - 21:49
#70
Yep: 0,995... %
11. oktober 2005 - 21:54
#71
yes nu har jeg lavet de tre første med a og 2 vinkler som kendt!
11. oktober 2005 - 21:59
#72
hvis nu jeg kender a, b og A hvordan finder jeg så fx B eller C eller c ??
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 ?
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))
11. oktober 2005 - 22:11
#75
Når du så har A og B så finder du C som: C = Pi - A - B (radianer)
11. oktober 2005 - 22:13
#76
... og til sidst finder du c: c/sin(C) = a/sin(A)) => c = a sin(C)/sin(A)
11. oktober 2005 - 23:01
#77
ahhh radianer....:-)
11. oktober 2005 - 23:24
#78
her kommer der en sværere en. jeg kender a, b og B og jeg skal finde C ?
11. oktober 2005 - 23:25
#79
dette virker ihvertfald ikke: C = Math.Asin(c / a * Math.Sin(A));
11. oktober 2005 - 23:35
#80
jeg er ikke sikker på om C = Asin(c / b * Sin(B)) virker ???
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å ???
11. oktober 2005 - 23:47
#82
nå jeg prøver i morgen !
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)
11. oktober 2005 - 23:53
#84
så dvs. at C = Asin(a / b * sin(B)) i stedet for C = Asin(b / a * sin(A)) ???
11. oktober 2005 - 23:54
#85
eller er det: A = Asin(a / b * sin(B))
11. oktober 2005 - 23:56
#86
uden at have regnet efter vil jeg sige C = Asin(a / b * sin(B)) hvordan passer resultatet ?
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 ???
12. oktober 2005 - 00:01
#88
C = Asin(a / b * sin(B)) ??? det passer ;)
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)
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 ?
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) ?
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.
12. oktober 2005 - 00:18
#93
ja...jeg bor i virum...måske !
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 !
12. oktober 2005 - 00:23
#95
12/10-2005 00:04:51 - jeg kender ikke c og C ;)
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
12. oktober 2005 - 00:27
#97
ok...men så det med menuen ^
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 ?
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.