Hallo Forum,
ich hab mir eine Liege programmiert, die im Prinzip ganz einfach aus drei Segmenten aufgebaut ist. Beim Objekt kann man die Längen der drei Segmente eingeben und den Winkel, mit denen sie zueinander stehen. Das Problem ist nun, die Liege so zu drehen, dass der zweite Winkel ("winkeloben") genau am Boden zu liegen kommt.
Das klingt jetzt sehr abstrakt, aber ich hoffe, es mit den beigefügten Zeichnungen erklären zu können. Ich dachte eigentlich, dass ich geometrisch die Sache soweit durchschaut und den richtigen Lösungsansatz gefunden hätte, aber leider dreht die Liege sich nie in die richtige Richtung (Ausnahme: "segmentunten" und "segmentmitte" sind gleich lang).
Ich hoffe, mein Skript ist soweit lesbar und jemand findet den Fehler.
Vielen Dank schon mal!
By
seppi1976 at 2012-07-10
By
seppi1976 at 2012-07-10
! Liegestuhl
! breite = 0.8
! rundung = 0.2
! rad = 0.02
! segmentunten = 0.5
! segmentmitte = 1
! segmentoben = 1.25
! winkelanfang = 60
! winkelunten = 80
! winkelmitte = 70
GOSUB 200 ! Berechnung, wie die Liege gedreht werden muss
ROTY winkelanfang ! Liege wird in die richtige Lage gebracht
GOSUB 100 ! Liege schematisch zeichnen
END
100: ! zeichnen einer Liegenhälfte
BLOCK 0.05, breite, segmentunten
ADDZ segmentunten
ROTY winkelunten
BLOCK 0.05, breite, segmentmitte
ADDZ segmentmitte
ROTY (winkelmitte * (-1))
BLOCK 0.05, breite, segmentoben
DEL 4
RETURN ! Ende Subroutine zum zeichnen der Liegenhälfte
200: ! Berchnung, wie die Liege gedreht werden muss
! BIS JETZT FUNKTIONIERT ES NUR, WENN
! DIE UNTEREN BEIDEN SEGMENTE GLEICH LANG SIND
IF winkelunten = 90 THEN ! muss noch genauer definiert werden
winkelanfang = -45
RETURN
ENDIF
! Die folgende Routine funktioniert nur für spitze Winkel.
!
! beta (=winkelunten) sei der Winkel zwischen segmentunten und segmentmitte
! gamma ist der Restwinkel zu beta. gamma bildet mit delta und einem rechten
! Winkel ein rechtwinkliges Dreieck mit der Hypothenuse segmentmitte
IF winkelunten > 90 THEN
gamma = 180 - winkelunten ! Restwinkel vom ersten Knick
delta = 90 - gamma ! zweiter Winkel des neuen
! rechtwinkligen Dreiecks
neueseitelang = sin (gamma) * segmentmitte ! Berechnung neue Dreiecksseiten
neueseitekurz = sin (delta) * segmentmitte
tanvomneuenwinkel = neueseitelang / (neueseitekurz + segmentunten)
! Tadaaa, jetzt kommt das Ergebnis
winkelanfang = ATN (tanvomneuenwinkel) - 90
RETURN
ENDIF
! winkelunten ist offenbar kleiner als 90°
delta = 90 - winkelunten
neueseitekurz = sin (delta) * segmentmitte
neueseitelang = cos (delta) * segmentmitte
tanvomneuenwinkel = neueseitelang / (segmentunten - neueseitekurz)
winkelanfang = ATN (tanvomneuenwinkel)
RETURN