Autor Beitrag
interessierter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 06.05.12 14:38 
Hallo Zusammen

Ich arbeite an einem recht umfangreichen Übungsprogramm wo es unter anderem um die Berechnung von Dreiecken geht.

Habe ein Problem mit der arcsin (asin oder arcus sinus) Methode. Meine Konsole spuckt immer nur das Ergebnis n. def. Folgend wie ich versuchte die Methode asin anzuwenden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
float bekannteSeitea = askForFloat("Welche Goresse hat die bekannte Seite a?");
float bekannteSeiteb = askForFloat("Welche Groesse hat die bekannte Seite b?");
float WinkelAlpha = askForFloat("Welchen Wert hat der bekannte Winkel Alpha?");
float x = bekannteSeiteb * WinkelAlpha / bekannteSeitea;
Math.Asin(x);
Console.WriteLine(x);



Kurz noch zum allg. Verständnis:
gegeben sind:
seite a, seite b, der der grösseren seite gegenüberliegende winkel

gesucht ist:
den der kleineren seite gegenüberliegende winkel

Von der formel her stimmt. Mein Problem liegt mehr darin wie ich asin formgerecht in meinem Code anwenden kann.

Grüsse
interessierter
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.05.12 14:44 
Erstens wäre es sinnvoll, wenn du das Ergebnis, das dir Asin zurückliefert, nicht einfach wegwerfen würdest. ;-)
Denn sonst kannst du die Zeile auch gleich weglassen.

Und zweitens denke dran, dass die internen Funktionen wie asin nicht mit Gradzahlen, sondern im Bogenmaß arbeiten.
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 06.05.12 15:19 
Oke, somit muss ich die Grad anschliessend in Bogenmass umrechnen. Habe nun den Code umgeschrieben aber es klappt trotzdem nicht. Was mache ich den Falsch? Folgend mein neuer Lösungsversuch mit meinem Gedankenansätzen:


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
float bekannteSeitea = askForFloat("Welche Goresse hat die bekannte Seite a?");
float bekannteSeiteb = askForFloat("Welche Groesse hat die bekannte Seite b?");
float WinkelAlpha = askForFloat("Welchen Wert hat der bekannte Winkel Alpha?");
// Bis hier die nötigen Abfragen

doublex = Math.Asin(bekannteSeiteb * WinkelAlpha / bekannteSeitea);
//Hier sollte nun x dem Wert Arcus Sinus entsprechen

double WinkelBeta = (Math.PI / 180) * x);
//Hier findet meiner Meinung nach die Umwandlung auf Bogenmass statt.

Console.WriteLine(WinkelBeta);
//Hier sollte der umgewandelte Wert von WinkelBeta ausgegeben werden.


Zuletzt bearbeitet von interessierter am So 06.05.12 15:27, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 06.05.12 15:27 
Der WinkelAlpha muß im Bogenmaß an die trigonometrische Funktion weitergereicht werden.

P.S: Und das Mal-Zeichen (Multiplikation) solltest du eigentlich auch kennen...
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 06.05.12 15:28 
hehe, habs grad editiert und das malzeichen * genommen
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.05.12 15:33 
user profile iconinteressierter hat folgendes geschrieben Zum zitierten Posting springen:
Von der formel her stimmt.
Bist du da sicher? :zwinker:

Schauen wir doch mal:
Gegeben:
a, b, α

Gesucht:
β

Sinussatz:
a / sin(α) = b / sin(β)
--> a = b * sin(α) / sin(β)
--> a * sin(β) = b * sin(α)
--> sin(β) = b * sin(α) / a
--> β = asin(b * sin(α) / a)

Nun vergleiche einmal was du dort einsetzt. Außerdem muss auch der Eingabewert wie user profile iconTh69 schon geschrieben hat im Bogenmaß sein.
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 06.05.12 16:28 
Oke, ich danke euch nun ist mir einiges klarer.

Ich habe jetzt ein neues Konsolenprogramm gemacht wo ich nur die Methode (rechne in Bogenmass um) gecodet habe.

Ab static void main will ich nun auf die Methode zugreigen und die gewünschte Ausgabe machen.
Wie kann ich mittels einer Eingabe auf die Methode zugreifen und die entsprechende Aussage machen?

Hier mein Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public static double GradZuBogenmass(double Grad)
        {
            return (Math.PI / 180.0) * Grad;
        }

        static void Main(string[] args)
        {
           

        }

    }
}


Wenn ich noch erfahre wie man auf die Funktion zugreift, kann ich mein Problem lösen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.05.12 16:45 
Naja, so wie du jede andere Funktion auch aufrufst? :gruebel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
        static void Main(string[] args)
        {
            double MyAngle = 90;
            double MyRadValue = GradZuBogenmass(MyAngle);
            ...
        }
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 06.05.12 17:50 
Ich habe hier einen weiteren Lösungsansatz, wo ich den bekannten Winkel zuerst in Bogenmass umrechne und mittels der gegebeben Formel für den fehlenden Winkel weiterverwende.

In meinem neuen Code müsste die WriteLine den Wert des fehlenden Winkels ausgeben, was nicht klappt. Hier der Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public static double GradZuBogenmass(double Grad)
        {
            return (Math.PI / 180.0) * Grad;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("wieviel grad misst der bekannte Winkel?");
            string text = Console.ReadLine();
            double Eingabe = double.Parse(text);
            double Winkel = Eingabe;
            double Winkelmass = GradZuBogenmass(Winkel);

            Console.WriteLine("bekannte seite a?");
            string x = Console.ReadLine();
            float bsa = float.Parse(x); // bsa = bekannte Seite a

            Console.WriteLine("bekannte seite b?");
            string y = Console.ReadLine();
            float bsb = float.Parse(y); // bsb = bekannte Seite b

            double WinkelBeta = Math.Asin(bsb * Winkelmass / bsa);
            Console.WriteLine(WinkelBeta);
           }

    }
}
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.05.12 18:05 
Den Fehler in der Formel hatte ich ja oben schon angemerkt. ;-)

Zudem fehlt die Rückwandlung von Bogenmaß in Grad beim Ergebnis.
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Mi 09.05.12 21:03 
Ich bastle nun schon seit Tagen an dieser Sache rum, aber es will nicht klappen. Ich verstehe auch nicht wo der Fehler in der Formel liegt. Ich habe nun noch einen Lösungsansatz wo ich meiner Meinung nach alles berücksichitige. Wo liegt denn Mein Fehler?

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
       static void Main(string[] args)
        {
           Console.WriteLine("wieviel grad misst der bekannte Winkel?");
           string Winkel = Console.ReadLine();
           double bekannterWinkel = double.Parse(Winkel);
           double WinkelAlpha = bekannterWinkel / 180 * Math.PI; // Umrechnung von Grad in Bogenmass
           Console.WriteLine(WinkelAlpha);
           
           Console.WriteLine("bekannte seite a?");
           string x = Console.ReadLine();
           float bsa = float.Parse(x); // bsa = bekannte Seite a

           Console.WriteLine("bekannte seite b?");
           string y = Console.ReadLine();
           float bsb = float.Parse(y); // bsb = bekannte Seite b

           double WinkelBeta = bsb * WinkelAlpha / bsa;

           WinkelBeta= WinkelBeta * 180 / Math.PI; // Umrechnung von Bogenmass in Grad

           Console.WriteLine(WinkelBeta);

       }

    } 
}
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 09.05.12 21:31 
Wie schon gesagt, deine Formel ist falsch. Und eigentlich musst du das echt nur noch abschreiben, deshalb verstehe ich das Problem nicht so ganz...
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
--> β = asin(b * sin(α) / a)
user profile iconinteressierter hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
           double WinkelBeta = bsb * WinkelAlpha / bsa;					
Fällt dir da wirklich kein Unterschied auf? So von wegen Sinus und Arcussinus, das bei dir jetzt ganz fehlt? Wie wäre es so? :zwinker:
ausblenden C#-Quelltext
1:
            double WinkelBeta = Math.Asin(bsb * Math.Sin(WinkelAlpha) / bsa);					

Für diesen Beitrag haben gedankt: interessierter
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Mi 09.05.12 22:18 
Vielen Dank.

Das Ergebnis von

ausblenden C#-Quelltext
1:
double WinkelBeta = Math.Asin(bsb * Math.Sin(WinkelAlpha) / bsa);					


habe ich anschliessend wieder in Grad umgerechnet und siehe da, ich hatte das richtige Ergebnis in der WriteLine :)

Jetzt ist mir auch der Fehler in der Formel klar. Ich habe nur den Wert von WinkelAlpha für die Berechnung benutzt, ohne zu definieren dass der Wert von WinkelAlpha ein Winkel (Sin) ist.

Ich möchte folgend noch den Codeblock posten. Vielleicht hat ja wiedermal jemand Probleme bei dieser Aufgabenstellung.

Die Aufgabe:
Bekannt sind zwei Seiten eines Dreiecks und der der grösseren Seite gegenüberliegende Winkel. Nun muss der der kleineren Seite gegenüberliegende Winkel berechnet werden.

Hier der Code dazu:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
       static void Main(string[] args)
        {
// Thema Trigonometrie: C# berechnet Winkelgrade nicht in Grad sondern in Bogenmass. Deswegen muss man die Winkel zuerst in Bogenmass umrechnen. Am Schluss muss man das Bogenmass der gesuchten Lösung wieder in Grad umwandeln um das gewünsschte Ergebnis zu erhalten.

 Console.WriteLine("wieviel grad misst der bekannte Winkel?");
           string Winkel = Console.ReadLine();
           double bekannterWinkel = double.Parse(Winkel);
           double WinkelAlpha = bekannterWinkel / 180 * Math.PI; // Umrechnung von Grad in Bogenmass
           Console.WriteLine(WinkelAlpha);
           
           Console.WriteLine("bekannte seite a?");
           string x = Console.ReadLine();
           float bsa = float.Parse(x); // bsa = bekannte Seite a

           Console.WriteLine("bekannte seite b?");
           string y = Console.ReadLine();
           float bsb = float.Parse(y); // bsb = bekannte Seite b

           double WinkelBeta = Math.Asin(bsb * Math.Sin(WinkelAlpha) / bsa);

           WinkelBeta = WinkelBeta * 180 / Math.PI; // Umrechnung von Bogenmass in Grad

           Console.WriteLine(WinkelBeta); // Der der kleineren  Seite gegenüberliegende Winkel

       }

    } 
}


Grüsse
interessierter