Falsche Werte bei Sinus und Cosinus

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Du hast auch angegeben, dass bei einem Drucker mit besserer Auflösung mehr Winkel möglich werden; vom reinen Grundgedanken stimme ich zu.
    Aber, so wie ich deine Bilder bisher verstehe, hast du momentan 1 Pixel = 1 Punkt. Ein Punkt sollte aber mehr als 1 Pixel sein, damit das bei einer etwaigen Druckauflösung einen Unterschied macht.
    Quasi wenn die Auflösung doppelt so gut wird, muss der Punkt die 4-fache Fläche umschreiben. Und dann kann man auch beliebige Drehungen sinnvoll annähern.
    Das ist nicht ganz richtig. Ein Brailledrucker macht Punkte in einer festen Größe. Bei der Blindenschrift ist der optimale Punktabstand 2,5 mm. Allerdings kann die Schrift auch mit 2 mm Abstand gut gelesen werden. Wenn die Auflösung sich ändert, paßt sich nur der Abstand an, die Punkte bleiben aber gleich groß. Natürlich ist es so, dass aufgrund der geringen Auflösung diagonale Schrift nicht optimal dargestellt werden kann. Allerdings können, wie ich schon geschrieben habe, die neueren Drucker eine Auflösung bis zu 0,1 bzw. 0,05 mm. Damit läßt sich eine diagonale Schrift bei einem Punktabstand von 2 mm doch deutlich besser darstellen. Da die Punktgröße festgelegt ist, dürfen zwei Punkte nicht zu nah beianander sein, da sie sich gegenseitig wegdrücken bzw. können sie mit den Fingern nicht mehr so gut unterschieden werden. Ein sehr geringer Punktabstand eignet sich gut für Rahmen, die das Papier dann perforieren, um eine bestimmte Form abzutrennen.

    Schaut euch doch mal ein Video bei Youtube über Brailledrucker, beispielsweise Index Braillebox V5 an.

    Ich habe das Problem nun so gelöst, dass ich den Drehpunkt bei (-1, -1) festgelegt habe. Dadurch verhindere ich, das es Punkte in der gleichen waagerechten bzw. senkrechten Linie gibt. Nun funktioniert es, eben so gut, wie es bei einem Punktabstand von 2 mm geht. Je höher die Auflösung, desto genauer die Punkte.

    Nun werde ich mich an die Aufgabe machen, gekrümmte Schrift zu berechnen, die beispielsweise zum Beschriften einer Skala verwendet werden kann.
    So, jetzt habe ich die Funktionen fertiggestellt. Allerdings habe ich noch ein kleine, wahrscheinlich, Verständnisßproblem.

    Ich habe 3 Reihen mit jeweils 5 %-Zeichen geschrieben. Bei jedem Zeichen sind alle Punkte gesetzt. Wie man sieht, schreibt er die Zeichen schön untereinander, aber der linke Rand verschiebt sich von Zeile zu Zeile.

    Der Drehpunkt liegt bei (-1, -1). Demnach ist der erste Punkt des ersten Zeichens 1 Punkt rechts vom Mittelpunkt und 1 Punkt unterhalb. Demnach müßte der Winkel 45 Grad sein. Die Funktion bekommt aber einen Winkel von 40,5 Grad heraus.

    Ich verstehe nicht, wo der Fehler liegt:

    VB.NET-Quellcode

    1. 'Bestimmen des Abstandes des Punktes zum Mittelpunkt.
    2. 'Dazu muß ein rechtwinkeliges Dreieck berechnet werden.
    3. 'Die Hypotinuse ist dabei der Abstand des Punktes zum Mittelpunkt.
    4. MitteX1 = -1
    5. MitteY1 = -1
    6. X = 0
    7. Y = 0
    8. Breite = X - MitteX1
    9. Hoehe = Y - MitteY1
    10. Abstand = Sqrt((Hoehe * Hoehe) + (Breite * Breite))
    11. Winkel = Sin(Hoehe / Abstand)
    12. Winkel = Asin(Winkel)
    13. Winkel *= 180 / PI ' = 40.514234227069771
    Bilder
    • Screenshot 2024-10-01 162517.png

      74,05 kB, 1.920×1.080, 8 mal angesehen
    Welche Werte haben Hoehe und Breite?
    Nur wenn beide gleich sind, kommen da 45° heraus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Breite und Hoehe haben die Werte 1. Der Drehpunkt liegt bei (-1, -1). Der erste Punkt aus dem Brailletext ist bei (0, 0). Demnach liegt der erste Braillepunkt 1 Punkt weiter rechts und 1 Punkt weiter unten vom Drehpunkt. Punkt 2 vom ersten Zeichen beispielsweise hätte demnach die Breite bei 1 und die Hoehe bei 2.
    Das ist falsch:

    tron25 schrieb:

    VB.NET-Quellcode

    1. Winkel = Sin(Hoehe / Abstand)

    VB.NET-Quellcode

    1. Winkel = Atan(Hoehe / Abstand)
    2. ' oder mit 360°
    3. Winkel = Atan2(Hoehe, Abstand)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe die Zeile ausgetauscht, bekomme aber leider immer noch nicht das richtige Ergebnis:

    VB.NET-Quellcode

    1. Abstand = Sqrt((Hoehe * Hoehe) + (Breite * Breite))
    2. 'Winkel = Sin(Hoehe / Abstand)
    3. Winkel = Atan(Hoehe / Abstand)
    4. Winkel = Asin(Winkel)
    5. Winkel *= 180 / PI


    Auch wenn ich "ATan2" verwende, oder auch "360 / PI", bekomme ich nicht einmal einen annähernden Wert zu "45" heraus.

    Könntest du mir die Codezeilen entsprechend umformen?

    Vielen Dank

    tron25 schrieb:

    Könntest du mir die Codezeilen entsprechend umformen?
    Schmeiß mal die Zeile 4 raus:

    VB.NET-Quellcode

    1. Winkel = Asin(Winkel)

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank. Ich habe gerade im Internet nachgelesen und tatsächlich eine Seite gefunden, bei der nicht so viel mit Bildern gearbeitet wird. Nun habe ich folgenden Code:

    VB.NET-Quellcode

    1. Abstand = Sqrt((Hoehe * Hoehe) + (Breite * Breite))
    2. Winkel = Atan(Hoehe / Breite)
    3. Winkel *= 180 / PI


    Vielen Dank nochmal