Dreiecksberechnung

Neue Frage »

Tobias195 Auf diesen Beitrag antworten »
Dreiecksberechnung
Hallo Zusammen!

Vor einigen Tagen habe ich bereits schon eine ähnliche Frage gestellt, war aber noch nicht registiert und konnte dort nicht mehr antworten.

Es geht darum: Ich schreibe ein Programm zur Dreiecksberechnung in C.
Das soll so aussehen: Ich gebe WWS, SSW oder SSS ein (S=Seite, W = Winkel) und das Programm soll die fehlenden Größen berechnen.

Ich habe im Internet einige Fomeln für diese Berechnungen gefunden:

• Wenn zwei Winkel und eine Seite gegeben sind (WWS, WSW oder SWW):
1. berechne dritten Winkel mit W3 = 180° - W1 - W2
(Satz über Summe der Innenwinkel im Dreieck)
2. berechne fehlende zwei Seiten:
Falls a bekannt ist:
b = a * sin(BETA) / sin(ALPHA), c = a * sin(GAMMA) / sin(ALPHA)
Falls b bekannt ist:
a = b * sin(ALPHA) / sin(BETA), c = b * sin(GAMMA) / sin(BETA)
Falls c bekannt ist:
a = c * sin(ALPHA) / sin(GAMMA), b = c * sin(BETA) / sin(GAMMA)
(Sinussatz)

• Wenn ein Winkel und zwei Seiten gegeben sind:
• SWS:
berechne fehlende Seite mit
a = sqrt(b * b + c * c - 2 * b * c * cos(ALPHA))
b = sqrt(a * a + c * c - 2 * a * c * cos(BETA))
c = sqrt(a * a + b * b - 2 * a * b * cos(GAMMA))
(Kosinussatz)
berechne fehlende Winkel wie bei SSS (s.u.)

• SsW oder WsS:
berechne den der kleineren Seite gegenüberliegenden Winkel mit
BETA= asin(b * sin(ALPHA / a), falls a, b und ALPHA gegeben sind
ALPHA = asin(a * sin(²) / b), falls a, b und BETA gegeben sind
GAMMA = asin(c * sin(ALPHA) / a), falls a, c und ALPHA gegeben sind
ALPHA = asin(a * sin(³) / c), falls a, c und ³ gegeben sind
GAMMA = asin(c * sin(²) / b), falls b, c und ² gegeben sind
BETA = asin(b * sin(³) / c), falls b, c und ³ gegeben sind
(Sinussatz)
berechne dritte Seite und dritten Winkel wie bei WWS (s.o.)

• Wenn drei Seiten gegeben sind (SSS)
berechne Winkel mit
ALPHA= acos((a * a - b * b - c * c) / (-2 * b * c))
BETA = acos((b * b - c * c - a * a) / (-2 * c * a))
GAMMA= acos((c * c - a * a - b * b) / (-2 * a * b))
(Kosinussatz)



Nach diesen Formeln habe ich nun einiges berechnen können. Die Ergebnise sind richtig. Nur 3 Fälle sind hier nicht genannt: Wenn Alpha, b und c gegeben sind , wenn Beta, a, c gegeben sind , wenn Gamma, a, b gegeben sind.

Wie berechne ich die fehlenden Größen?

Nächster Punkt:
Das Programm soll erkennen, ob das Dreieck mit den eingegebenen Daten auch wirklich konstruierbar ist. Hierfür fällt mir natürlich sofort ein: Die Winkel zusammen dürfen nicht größer 180 Grad sein. Was gibt es hier für Regeln? Was ist denn der größtmögliche Winkel den ein Nutzer eingeben darf? Darf ein einziger eingegebener Winkel nur nicht größer als 178 Grad sein? Oder wie ist das? Bin leider in Mathe etwas schwach und brauche dringend Hilfe!

Des weiteren: Was muss ich noch alles beachten? Rausfinden konnte ich bislang:

"ACHTUNG:
Beim Kongruenzsatz SSW ist das Dreieck nur dann eindeutig konstruierbar (und also auch eindeutig berechenbar), wenn der gegebene Winkel der größeren der gegebenen Seiten gegenüberliegt.

Im gleichen Atemzug ist bei drei gegebenen Seiten SSS auf die Einhaltung der Dreiecksungleichung(en) zu achten. "


Also habe ich nach der Dreiecksungleichung gegoogelt und herausgefunden, dass eine Seite höchstens so lang sein darf, wie die anderen Beiden Seiten zusammen. Stimmt das so?

Das mit dem Kongruenzsatz SSW verstehe ich nicht ganz, kann das vielleicht jemand genauer erklären? Vielleicht mit Beispiel was verboten wäre?


Desweiteren brauche ich wirklich alle Infos darüber, was ich beachten muss, dass das Dreieck auch wirklich konstruierbar ist: Also was darf ich eingeben, was muss ich abprüfen bevor ich das Ergebnis ausgebe?


Ich wäre sehr sehr dankbar für jede Hilfe!! Bin wirklich am verzweifeln weil ich die ganzen mathematischen Zusammenhänge nicht kenne und somit auch beim Programmieren nicht vorankomme..


Gruß Tobias
mYthos Auf diesen Beitrag antworten »
RE: Dreiecksberechnung
Zitat:
Original von Tobias195
...
Nur 3 Fälle sind hier nicht genannt: Wenn Alpha, b und c gegeben sind , wenn Beta, a, c gegeben sind , wenn Gamma, a, b gegeben sind.

Wie berechne ich die fehlenden Größen?
...


Doch, diese Fälle sind bei dir doch auch schon abgedeckt und zwar bei SWS:

Zitat:

...
• Wenn ein Winkel und zwei Seiten gegeben sind:
• SWS:
berechne fehlende Seite mit
a = sqrt(b * b + c * c - 2 * b * c * cos(ALPHA))
b = sqrt(a * a + c * c - 2 * a * c * cos(BETA))
c = sqrt(a * a + b * b - 2 * a * b * cos(GAMMA))
(Kosinussatz)
...


Schreibe dort besser: Wenn zwei Seiten und der von ihnen eingeschlossene Winkel gegeben sind.

Zum SSW:
Wenn der Winkel der größeren Seite gegenüberliegt, ist das Dreieck eindeutig auflös- bzw. konstruierbar.

Anderenfalls gibt es drei Fälle (--> 2. Auflösungsfall beim Sinussatz):
Sei w der gegeben Winkel, s1 die größere und s2 die kleinere Seite und w1 der der größeren Seite gegenüberliegende Winkel.
Dann ist



Je nachdem, ob der Wert des rechten Termes kleiner, gleich oder größer als 1 ist, gilt

--> 2 Lösungen (Winkel w1, w2 sind supplementär, SIN(w1, w2) < 1)

--> 1 Lösung, Winkel = 90° (SIN(w1) = 1)

--> keine Lösung (SIN(w1) > 1)
________________________________

Die anderen Dinge stimmen so weit, allerdings ist es ein Gerücht, dass ein Winkel höchstens 178° haben darf.
Selbstverständlich kann dieser durchaus auch 179,999° betragen, dann sind eben die beiden anderen Winkel entsprechend kleiner. Für 180° entartet das Dreieck zu drei auf einer Geraden liegenden Strecken, denn die beiden anderen Winkel sind jeweils 0.

Siehe u.a. auch hier --> Sinussatz

mY+
Tobias195 Auf diesen Beitrag antworten »

Vielen Dank für die Antwort, das hat mir schon einmal sehr geholfen:

Ich habe jetzt in meinem Programm abgefragt, ob bei SSW die größere der Seiten dem gegebenen Winkel gegenüberliegt. Wenn ja ist das Dreieck eindeutig konstruierbar und wir so berechnet(für das Beispiel, dass a, b und Alpha gegeben ist):

dWinkelB = (asin(dSeiteB * (sin((dWinkelA)*M_PI / 180)) / dSeiteA)) *(180 / M_PI);
dWinkelC = 180 - dWinkelA - dWinkelB;
dSeiteC = sqrt((dSeiteA * dSeiteA) + (dSeiteB * dSeiteB) - (2 * dSeiteA * dSeiteB) * (cos((dWinkelC)*M_PI / 180)));


Wenn die größere Seite dem gegebenen Winkel nicht gegenüberliegt, berechne ich, ob (s1/s2) * sinw größer, kleiner oder gleich 1 ist.

Wenn das jetzt kleiner 1 ist gibt es ja 2 Lösungen.

Wie berechne ich jetzt die 2te Lösung? Die erste würde ich wieder mit oben genannter Formel berechnen, aber wie die zweite?

Über eine Antwort wäre ich sehr dankbar!!
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von Tobias195
Wie berechne ich jetzt die 2te Lösung? Die erste würde ich wieder mit oben genannter Formel berechnen, aber wie die zweite?

Hat mYthos schon geschrieben, wahrscheinlich kennst du nur den Begriff nicht bzw. hast ihn überlesen:

Zitat:
Original von mYthos
--> 2 Lösungen (Winkel w1, w2 sind supplementär, SIN(w1, w2) < 1)

Das bedeutet: , also sowie .
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »