Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Winkelberechnungen im Dreieck
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 17.05.2008, 00:10    Titel: Winkelberechnungen im Dreieck Antworten mit Zitat

Hallo,
Ich möchte ein Programm schreiben womit man Dreiecke berechnen kann.
Gegeben ist Punkt1(X, Y), Punkt2(X, Y) und Punkt3(X, Y). Ich möchte jetzt den Winkel zwischen Punkt1 - Punkt2, Punkt1 - Punkt3 und Punkt2 - Punkt3. Wie kann man das berechnen? Hab schon gegoogelt, hab aber auch nichts brauchbares(für mich) gefunden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 17.05.2008, 00:42    Titel: Antworten mit Zitat

winkel = ACOS (((x2-x1)*(x3-x1) + (y2-y1)*(y3-y1)) / SQR(((x2-x1)^2 + (y2-y1)^2)*((x3-x1)^2 + (y3-y1)^2)))

berechnet den Winkel mit Scheitelpunkt P1, wobei x1|y1 die Koordinaten des Punktes P1 sind usw. Achte aber darauf, dass das Ergebnis in Bogenmaß geliefert wird (also noch umrechen).

edit: mir fällt gerade ein, dass es auch mit dem Kosinussatz geht:
cos alpha = (b^2 + c^2 - a^2) / (2*b*c)
wobei a, b und c die Seitenlängen des Dreiecks sind.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 17.05.2008, 09:09    Titel: Antworten mit Zitat

Nanu- geschockt Trigonometrie oder Geometrie ist eigentlich kein Fach, was nur im Abitur gelehrt wird. Wie man ein Dreieck berechnet, ist eigentlich Allgemeinbildung.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 17.05.2008, 13:12    Titel: Antworten mit Zitat

Das klappt bei mir irgentwie nich... er sagt immer "Division by Zero".
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 17.05.2008, 13:43    Titel: Antworten mit Zitat

Bei ACos(x) darf doch x nicht > 1 und nicht < -1 sein oder? traurig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 17.05.2008, 20:01    Titel: Antworten mit Zitat

Elektronix: Ich weiss nicht wie es in Deutschland ist, aber in der Schweiz ist die Trigonometrie kein Schulstoff für alle, sondern kommt eben erst später (Matura/Technische Lehre) oder gar nicht.

Nitroxis:
Zitat:
Ich möchte jetzt den Winkel zwischen Punkt1 - Punkt2, Punkt1 - Punkt3 und Punkt2 - Punkt3.

Zwischen Punkten kannst du keine Winkel berechnen, weil es zwischen Punkten keine Winkel gibt.
Winkel existieren nur zwischen zwei oder mehr Strecken, Strahlen oder Linie.
Kannst du vielleicht eine Zeichnung machen damit wir es uns besser vorstellen können?
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight


Zuletzt bearbeitet von Michael Frey am 18.05.2008, 13:34, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 18.05.2008, 02:01    Titel: Antworten mit Zitat

Nitroxis hat Folgendes geschrieben:
Bei ACos(x) darf doch x nicht > 1 und nicht < -1 sein oder? traurig

Ist richtig, sollte bei der Formel auch nie rauskommen können (wenn ich mich nicht vertippt habe ...)

Division by zero kann bei Seitenlängen>0 eigentlich auch nicht passieren ... welche Werte hast du denn verwendet?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2511
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 18.05.2008, 10:48    Titel: Antworten mit Zitat

Bei gegebenen Eckpunkten bietet es sich sonst an, die Winkel als Differenz zu deren Polarkoordinaten-Winkel zu berechnen. Beispielcode zum Ganzen, gleich als lauffähiges Beispielprogramm zum etwas Herumspielen können:

http://beilagen.dreael.ch/QB/3ECKWINK.BAS

Wichtig: Punkte A-B-C müssen ein Dreieck im Gegenuhrzeigersinn bilden, sonst werden die äusseren (überstumpfen) Winkel berechnet.

Ansonsten gilt der Ansatz mittels Skalarprodukt aus der linearen Algebra für 2D genauso wie unter

http://beilagen.dreael.ch/QB/3DWINKEL.BAS

gezeigt, d.h. für beispielsweise Winkel alpha nimm AB und AC als Vektoren und berechne

Code:
cos(alpha)=Skalar(AB, AC)/(Betrag(AB)*Betrag(AC))

_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 18.05.2008, 20:26    Titel: Antworten mit Zitat

Also ich habe nur die drei punkte a, b, c und möchte dann allle drei innenwinkel berechnen...
@nemored Oups, kann sein das Seitenlänge = 0 rauskommt verlegen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 18.05.2008, 22:43    Titel: Antworten mit Zitat

Wenn du drei Punkte hast, dann hast du auch die drei Strecken zwischen den Punkten, und diese legen die Winkel fest. lächeln
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 22.05.2008, 16:24    Titel: Antworten mit Zitat

Ok, jetzt habe ich nochmal ein bissl gegoogelt und habs soweit kapiert. Aber was ist wenn ein Winkel mal größer als 90° ist? Dann kann man ihn ja nicht mit Arcsin oder Arccos berechnen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 22.05.2008, 16:52    Titel: Antworten mit Zitat

Warum nicht? cos(100°) = -0,173648178, acos(-0,173648178) = 100°
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 22.05.2008, 18:51    Titel: Antworten mit Zitat

Jaja, ich mache das so: sin(alpha) = Gegenkathete / Hypothenuse. Da kommt manchmal was größeres raus...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 22.05.2008, 20:12    Titel: Antworten mit Zitat

Bei Gegenkathete / Hypotenuse können nur Zahlen zwischen 0 und 1 rauskommen, weil die Hypotenuse die längste Seite ist. Allerdings gibt es da auch keine Winkel > 90°, ist schließlich eine Definition im rechtwinkligen Dreieck.

Für Winkel > 90° kannst du z. B. sin/cos am Einheitskreis anschauen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2511
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 22.05.2008, 20:17    Titel: Antworten mit Zitat

@Nitroxis: Mein Beispiel ist übrigens soweit vollständig getestet. Noch zur PolarWinkel()-FUNCTION in diesem Beispiel: Beruht ebenfalls auf dem rechtwinkligen Dreieck, welches das Deltax und Deltay im Koordinatensystem zwischen zwei Punkten bilden. Dabei wende ich
Code:
TAN(phi) = Gegenkathete(DeltaY) / Ankathete(DeltaX)

an, wobei die Sache mit dem korrekten Quadranten durch die IF-THENs innerhalb dieser FUNCTION richtig gehandhabt wird.

Ansonsten empfehle ich Dir den bisherigen Code hier ins Forum zu posten (CODE-Tag nicht vergessen), dann können wir Dir konkret weiterhelfen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 22.05.2008, 20:43    Titel: Antworten mit Zitat

Code:
DIM A AS DOUBLE, B AS DOUBLE, C AS DOUBLE
DIM Alpha AS DOUBLE, Beta AS DOUBLE, Gamma AS DOUBLE

SCREEN 12

INPUT „Punkt 1“, X1, Y1
INPUT „Punkt 2“, X2, Y2
INPUT „Punkt 3“, X3, Y3

LINE (X1, Y1)-(X2, Y2), 15
LINE (X2, Y2)-(X3, Y3), 15
LINE (X3, Y3)-(X1, Y1), 15

IF X2 >= X1 AND Y2 >= Y1 THEN
  C = SQR((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)
ELSE IF X1 >= X2 AND Y1 >= Y2 THEN
  C = SQR((X1 - X2) ^ 2 + (Y1 - Y2) ^ 2)
ELSE IF X1 >= X2 AND Y2 >= Y1 THEN
  C = SQR((X1 - X2) ^ 2 + (Y2 - Y1) ^ 2)
ELSE IF X2 >= X1 AND Y1 >= Y2 THEN
  C = SQR((X2 - X1) ^ 2 + (Y1 - Y2) ^ 2)
ENDIF
IF X3 >= X1 AND Y3 >= Y1 THEN
  B = SQR((X3 - X1) ^ 2 + (Y3 - Y1) ^ 2)
ELSE IF X1 >= X3 AND Y1 >= Y3 THEN
  B = SQR((X1 - X3) ^ 2 + (Y1 - Y3) ^ 2)
ELSE IF X1 >= X3 AND Y3 >= Y1 THEN
  B = SQR((X1 - X3) ^ 2 + (Y3 - Y1) ^ 2)
ELSE IF X3 >= X1 AND Y1 >= Y3 THEN
  B = SQR((X3 - X1) ^ 2 + (Y1 - Y3) ^ 2)
ENDIF
IF X3 >= X2 AND Y3 >= Y2 THEN
  A = SQR((X3 - X2) ^ 2 + (Y3 - Y2) ^ 2)
ELSE IF X2 >= X3 AND Y2 >= Y3 THEN
  A = SQR((X2 - X3) ^ 2 + (Y2 - Y3) ^ 2)
ELSE IF X2 >= X3 AND Y3 >= Y2 THEN
  A = SQR((X2 - X3) ^ 2 + (Y3 - Y2) ^ 2)
ELSE IF X3 >= X2 AND Y2 >= Y3 THEN
  A = SQR((X3 - X2) ^ 2 + (Y2 - Y3) ^ 2)
ENDIF

Alpha = A / C
PRINT ASIN(Alpha)


Ich hab im moment nur Alpha.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 22.05.2008, 21:46    Titel: Antworten mit Zitat

Code:
IF X2 >= X1 AND Y2 >= Y1 THEN
  C = SQR((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)
ELSE IF X1 >= X2 AND Y1 >= Y2 THEN
  C = SQR((X1 - X2) ^ 2 + (Y1 - Y2) ^ 2)
ELSE IF X1 >= X2 AND Y2 >= Y1 THEN
  C = SQR((X1 - X2) ^ 2 + (Y2 - Y1) ^ 2)
ELSE IF X2 >= X1 AND Y1 >= Y2 THEN
  C = SQR((X2 - X1) ^ 2 + (Y1 - Y2) ^ 2)
ENDIF

ist unnötig - du quadrierst ja, da werden die Zwischenergebnisse sowieso positiv. Besser wäre eine Überprüfung, ob zwei Punkte gleich sind.

Code:
Alpha = A / C
PRINT ASIN(Alpha)

funktioniert wie gesagt nur, wenn das Dreieck zufällig rechtwinklig ist!!
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 22.05.2008, 21:55    Titel: Antworten mit Zitat

Ja, aber was macheich wenn das malnicht der fall ist, das ist ja meine Frage... mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4615
Wohnort: ~/

BeitragVerfasst am: 22.05.2008, 22:07    Titel: Antworten mit Zitat

Du könntest zum Beispiel einen der vielen Hinweise verwenden, die schon in diesem Thread stehen. zwinkern

Code:
DIM A AS DOUBLE, B AS DOUBLE, C AS DOUBLE
DIM Alpha AS DOUBLE, Beta AS DOUBLE, Gamma AS DOUBLE

SCREEN 12

DO
  INPUT "Punkt 1", X1, Y1
  INPUT "Punkt 2", X2, Y2
  INPUT "Punkt 3", X3, Y3
  ' Eingabe pruefen
  IF (X1<>X2 OR Y1<>Y2) AND (X1<>X3 OR Y1<>Y3) AND (X2<>X3 OR Y2<>Y3) THEN EXIT DO
  PRINT "FEHLER: Du musst drei verschiedene Punkte eingeben!"
LOOP

' Berechnung der Strecken
A = SQR((X3 - X2) ^ 2 + (Y3 - Y2) ^ 2)
B = SQR((X3 - X1) ^ 2 + (Y3 - Y1) ^ 2)
C = SQR((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)

' Berechnung des Winkels Alpha mit dem Kosinussatz
Alpha = ACOS((B^2 + C^2 - A^2) / (2*B*C))


edit: das Programm prüft nur, ob die eingegebenen Punkte verschieden sind, und nicht, ob sie auf einer Geraden liegen (auch dann erhält man kein Dreieck).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 23.05.2008, 13:50    Titel: Antworten mit Zitat

Ok, aber wie finde ich heraus ob es ein Rehtwinkeliges Dreieck ist? Denn wie du sagst, hehts ja nur mit solchen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz