Vorüberlegungen zu einem 'Sisyphus table'

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • tschoeatsch schrieb:

      Die Berechnungen takten und zwischen den Berechnungen schauen, dass ich die nötigen steps in dieser Zeit unter bringe?
      Ich hab mir deine Software nicht angeschaut (mach ich, wenn ich Zeit habe, als Rentner)
      Wenn die Software am Limit ist und die Berechnungen in den Endlagen zu lange dauern, dann kannst du nichts machen, außer bremsen.Wenn es an der Hardware liegt( zu kleine Schritte), dann kannst du ja berechnen, ob die zurückgelegte Strecke im gewünschten Bereich liegt, also eine Art Bresenham für Strecke-Zeit.
    • Bresenham Strecke-Zeit kapier' ich grad' net. Um von A nach B zu kommen bewegen sich die stepper nicht linear, die Anzahl der steps ist über den Weg ungleich verteilt.
      Das ist auch ein Problem am Mittelpunkt. Benachbarte Punkte haben zwar einen ähnlichen Radius (polar betrachtet) aber der Winkel kann erheblich unterschiedlich sein, bei Durchlaufen des Mittelpunktes 180°. Da werde ich nie eine gleichförmige Bewegung bekommen.
      Ich denke der Mangel liegt bei der derzeitigen sw an dem Punkt, dass die steps gleichmäßig ausgegeben werden, aber eben die steps über den Weg ungleich verteilt sind. Die Berechnung (Rechenzeit) pro Punkt ist eigentlich immer konstant, egal ob Rand oder mitten drin. Ok, das berechnen der Funktion kommt ab und an dazu.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • So langsam wird's. Beide stepper haben jetzt eine eigene isr.
      Jede neue Berechnung der Kugelposition liefert eine Anzahl von steps für jeden der beiden stepper. Diese durchaus unterschiedlichen Anzahlen von steps werden jetzt, wenn möglich, innerhalb einer fixen Zeitspanne ausgeführt. Das wird durch anpassen der Periode (so heißt das beim xmega) erreicht. Wenige steps werden in der gleichen Zeit wie viele steps ausgegeben. Das klappt zwar nicht überall, um den Mittelpunkt kann es zu sehr vielen steps führen, die nicht alle in dem vorgesehenen Zeitfenster passen, aber auch die Kugel nicht großartig bewegen, sondern nur drehen. Das sieht man nicht, und so hat man den Eindruck, es passiert nix :/ . Insgesamt führt das aber zu einem relativ gleichmäßigen Lauf der Kugel, aber auch zu einem 'Flötenspiel' der stepper. Auch kann es zu unerwünschten Resonanzen mit der Mechanik kommen, was sich in einem lauten Rattern äußert. So ist jetzt wohl eine Überarbeitung der Mechanik dran.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Und für die am code interessierten, hier mein Geschreibsel. Man erkennt auch, dass es für das 'Blumenmuster' nicht viel code braucht. Es ist angedacht, solche Muster zu entwerfen, vielleicht mit paar random-Variablen auszustatten und dann in einer zufälligen Reihenfolge abzuspielen. Mit Pausen dazwischen natürlich, dass man das Gemälde auch mal betrachten kann. Vielleicht täglich wechselnd...
      Dateien
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ein Löschen ist nicht vorgesehen, es wird immer überschrieben.
      Für die Muster gibt es gerade 2 Varianten. Die eine ist, mit einer Formel zu arbeiten. Eine Spirale, zB. im polarem System betrachtet erhält man eine Spirale, wenn man den Radius an den Winkel koppelt. Winkel=0, Radius=0, nächster Punkt Winkel=1°, Radius=1mm, nächster Punkt Winkel=2°, Radius=2mm...mal ganz einfach. Man muss halt drauf achten, dass die Bahnen nicht zu weit voneinander entfernt liegen, oder so weit, dass das vorher gemalte Muster 'durchscheint'.
      Die 2. Variante ist Punkte über die Malfläche wandern lassen und diese miteinander zu verbinden. Ein 3-Eck, dessen Eckpunkte erst mal nahe dem Mittelpunkt liegen, verbinden, jetzt den Abstand vom Mittelpunkt bisschen verändern und wieder alle Punkte mit einer Linie verbinden und so weiter. Das gibt dann parallele oder gefächerte Linien. Unendlich viele Möglichkeiten, das Programm wird vielleicht nie fertig werden, ähnlich wie bei einer Modelleisenbahn. Hm, der Sandkasten soll in meinem Couchtisch, wo mal eine Eisenbahn drin fahren sollte, die in den 20 Jahren, wo der Tisch schon rum steht, nicht fertig geworden ist a_28_2c02f089
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hier mal ein Versuch von mir, wie man Übergänge zwischen verschiedenen Figuren/Bildern hin kriegt, ohne was unbeabsichtigt zu übermalen. Die Kugelgeschwindigkeit ist hier noch sehr hoch, einfach damit ich mein gemaltes Ergebnis zu meiner erdachten Formel schnell bekomme. Bei den '6 Kringel' werden dann Zufallszahlen für 'Anzahl_Eckpunkte', U (=Umdrehungen) und dann noch für die Richtung der Umdrehungen eingebaut. Das gibt dann eine Fülle von Varianten beginnend von 3-Ecken bis runde Spiralen mit verschiedenen Linienabständen.
      Es werden übrigens die Eckpunkte des Dreiecks mit einer Auflösung von ca. 0,3mm verbunden. Der code für diesen Ablauf ist von der Größe her überschaubar :rolleyes: , vom Verstehen her eher schwierig :/

      BASCOM-Quellcode

      1. ...
      2. Letzter_winkel = 0
      3. Do
      4. 'Dreieck
      5. R(1) = 2
      6. W(1) = Letzter_winkel
      7. W(2) = Letzter_winkel + 2.0944
      8. W(3) = Letzter_winkel + 4.1888
      9. Do
      10. R(1) = R(1) + 5
      11. W(1) = W(1) + 0.05
      12. W(2) = W(2) + 0.05
      13. W(3) = W(3) + 0.05
      14. Linie_zu_w_r W(1) , R(1)
      15. R(1) = R(1) + 3
      16. Linie_zu_w_r W(2) , R(1)
      17. R(1) = R(1) + 3
      18. Linie_zu_w_r W(3) , R(1)
      19. Loop Until R(1) >= 166
      20. Letzter_winkel = W(3)
      21. '6 Kringel
      22. R(2) = 166 'Orbit der 6 Kringel
      23. R(4) = R(2) / 2 'Radius der Kringel
      24. Anzahl_eckpunkte(1) = 5
      25. Anzahl_eckpunkte(2) = 20
      26. Dw(1) = 2pi / Anzahl_eckpunkte(1) 'Verdrehwinkel
      27. Dw(2) = 2pi / Anzahl_eckpunkte(2) 'Verdrehwinkel
      28. U(1) = 5 'Umdrehungen
      29. Dr(1) = U(1) * Anzahl_eckpunkte(1)
      30. Dr(1) = R(4) / Dr(1) 'Radiuserhöhung bei jedem Eckpunkt
      31. U(2) = 9
      32. Dr(2) = U(2) * Anzahl_eckpunkte(2)
      33. Dr(2) = R(4) / Dr(2) 'Radiuserhöhung bei jedem Eckpunkt
      34. W(1) = 0
      35. W(2) = Letzter_winkel
      36. X_t(1) = 0 : X_t(2) = 0
      37. Y_t(1) = 0 : Y_t(2) = 0
      38. Z(1) = 0
      39. Do
      40. R(1) = 0 'Radius des Kringels zurück setzen
      41. T = U(1) * 2pi : T = T + Pi_halbe
      42. Do
      43. R(1) = R(1) + Dr(1) 'R(1)vergrößert sich mit Drehwinkel
      44. X_t(1) = R(1) * Cos(t) 'Koordinaten des Punktes
      45. Y_t(1) = R(1) * Sin(t) 'Koordinaten des Punktes
      46. X_t(2) = X_t(1) + R(2) 'Punkt verschieben
      47. X_t(3) = X_t(2) * X_t(2) 'Quadrat für Pytagoras Radius zum Mittelpunkt
      48. Y_t(2) = Y_t(1) * Y_t(1) 'Quadrat für Radius zum Mittelpunkt
      49. R(3) = X_t(3) + Y_t(2)
      50. R(3) = Sqr(r(3))
      51. X_t(3) = Y_t(1) / X_t(2) 'Radius vom Mittelpunkt
      52. W(1) = Atn(x_t(3)) 'Verdrehung des Punktes von der Nulllinie
      53. W(3) = W(1) + W(2) 'Verdrehung um einen fixen Wert
      54. Linie_zu_w_r W(3) , R(3)
      55. T = T - Dw(1)
      56. Loop Until T <= Pi_halbe
      57. W(2) = W(2) + 1.0472 'Fixer Wert erhöhen, sodass 6 Spiralen gezeichnet werden
      58. R(1) = 0 'Radius des Kringels zurück setzen
      59. T = U(2) * 2pi : T = T + Pi_halbe
      60. Do
      61. R(1) = R(1) + Dr(2) 'R(1)vergrößert sich mit Drehwinkel
      62. X_t(1) = R(1) * Cos(t) 'Koordinaten des Punktes
      63. Y_t(1) = R(1) * Sin(t) 'Koordinaten des Punktes
      64. X_t(2) = X_t(1) + R(2) 'Punkt verschieben
      65. X_t(3) = X_t(2) * X_t(2) 'Quadrat für Pytagoras Radius zum Mittelpunkt
      66. Y_t(2) = Y_t(1) * Y_t(1) 'Quadrat für Radius zum Mittelpunkt
      67. R(3) = X_t(3) + Y_t(2)
      68. R(3) = Sqr(r(3))
      69. X_t(3) = Y_t(1) / X_t(2) 'Radius vom Mittelpunkt
      70. W(1) = Atn(x_t(3)) 'Verdrehung des Punktes von der Nulllinie
      71. W(3) = W(1) + W(2) 'Verdrehung um einen fixen Wert
      72. Linie_zu_w_r W(3) , R(3)
      73. T = T - Dw(2)
      74. Loop Until T <= Pi_halbe
      75. W(2) = W(2) + 1.0472 'Fixer Wert erhöhen, sodass 6 Spiralen gezeichnet werden
      76. Incr Z(1)
      77. Loop Until Z(1) > 2 'Ende nach 6 Kringeln
      78. Letzter_winkel = W(3)
      79. 'wellige Spirale
      80. R(3) = 0
      81. R(1) = 250
      82. W(1) = Letzter_winkel
      83. Dw(1) = 0.1257
      84. Dr(1) = 0.2
      85. Do
      86. R(1) = R(1) - Dr(1)
      87. W(1) = W(1) + Dw(1)
      88. W(2) = 5 * W(1)
      89. If R(1) > 15 Then R(4) = R(1) / 10 Else R(4) = 0
      90. If R(4) > 30 Then R(4) = 30
      91. R(2) = Sin(w(2)) : R(2) = Abs(r(2)) : R(2) = R(2) * R(4)
      92. R(3) = R(1) + R(2)
      93. If W(1) > 2pi Then W(1) = W(1) - 2pi
      94. If W(1) < -6.28319 Then W(1) = W(1) + 2pi
      95. Linie_zu_w_r W(1) , R(3)
      96. Loop Until R(1) < 5
      97. Letzter_winkel = W(1)
      98. Loop
      99. ...
      Alles anzeigen
      Das schaut dann so aus
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • In nur 6 Wochen dieses Projekt soweit entwickeln - meine HOCHACHTUNG !!!

      Ich möchte nur kurz das Niveau des Themas auf meine Verständnisebene senken!
      Die Schreibweise der Variablen mit den Ziffern / Zahlen in Klammer
      wie zum Beispiel:

      Dim R(10) As Single 'Radien
      Dim Dr(10) As Single 'Radieneänderungen
      Dim W(10) As Single 'Winkel
      Dim Dw(10) As Single 'Winkeländerungen

      Hat das eine besondere Bedeutung oder könnte man die Klammer auch weglassen?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von avralfred ()

    • Ich bin unzufrieden, komm aber nicht recht weiter. Die 'Bewegungen' sind irgendwie nicht 'geschmeidig'.
      Derzeit arbeitet mein Programm im Groben so:
      Beispiel: eine gerade Linie vom aktuellen Punkt zu einem neuen.
      aus den beiden Punktkoordinaten wird im kartesischem System zunächst ermittelt, welche Differenz in x oder y Richtung die größere ist. Abhängig davon wird die Geradengleichung errechnet, auf dieser Geraden liegen diese beiden Punkte. Jetzt wird der größere Weg in kleinen Schritten von dem aktuellen Punkt zum neuen entlang der Geraden gemacht und der korrespondierene Wert der anderen Achse mit dieser Geradengleichung bei jedem Schritt berechnet. Nach jeder Berechnung wird diese x-y-Koordinate in's polare System umgerechnet, um den Radius und den Winkel zu erhalten. Aus diesen Werten werden die Anzahl der notwendigen steppersteps berechnet, um die Kugel dahin zu positionieren. Je nachdem wo sich im System die Kugel befindet und wo der nächste anzufahrende Punkt ist,gibt es unterschiedliche Anzahlen von steps. Um das ein bisschen Auszugleichen, damit das Anfahren möglichst gleichmäßig geht, werden viele nötige steps schneller ausgegeben als wenige. Dazu wird der timerload durch die Anzahl der steps geteilt. Kleinerer load ergibt schnellere stepfolge.
      Das klappt aber nur leidlich. Jetzt suche ich einen neuen, besseren Ansatz. Es kommt nicht auf möglichst hohe Geschwindigkeit an, mehr auf die Gleichmäßigkeit.
      Hat jemand eine Idee dazu?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Ich bin unzufrieden, komm aber nicht recht weiter. Die 'Bewegungen' sind irgendwie nicht 'geschmeidig'.
      Könnte das aber nicht doch mit deiner Mechanik zusammen hängen?
      In dem Video (Post #43) waren die Bewegungen doch schon relativ "flüssig".
      Ich neheme mal an das deine Schritte jetzt sehr viel kleiner geworden sind und sich dadurch die Bewegung um einiges verlangsamt hat.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Das täuscht, oder vielleicht bin ich auch zu kleinlich. Ich werde mal die Geschwindigkeit soweit reduzieren, dass für ein neues Bild eine halbe Stunde gemalt wird. Soll ja auch 'zen' sein, nicht hektisch... :sleeping:
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------