aLeXanDer.. Geschrieben 4. Dezember 2008 Geschrieben 4. Dezember 2008 Hallo Community, Ich möchte gern so eine Art Schaltuhr zeichnen lassen mit C++ und C++ Borland 2007. Ziel ist es, eine Uhr darzustellen von 0 -12 Uhr oder 12-24 Uhr je nachdem wieviel Uhr es gerade ist. Und dann erhält man für diesen Zeitraum Schlatungen, wann sie an und wann sie aus geht. So ich habe schon Die Uhr und bin dabei die Pixel zu berechnen um dann eben diesen bestimmten Bereich von "Ein" bis "Aus" farbig als Kuchenstück zu zeichnen. Ich nutze dazu folgenden Code, wobei dieser nur manchmal stimmt und manchmal total falsch gezeichnet wird. Kann mir bitte jemand helfen? Ich glaube, bzw. bin mir sicher das es an den Formeln liegt... //Maximum ist entweder 12 oder 24 , je nachdem ob Nachmittag oder vormittags //Minimum entweder 0 oder 12 //time = die Einschaltzeit, also sowas wie 6Uhr morgens //timeAus = die Ausschaltzeit, sowas wie 7Uhr morgens //time und timeAus erhalte ich in einem TDateTime->String //diesen zerlege ich in Stunden und minuten und schreib ihn in //timeAus = timeAus + StrToFloat(wsWork) //die variable Differenz = Maximum - Minimum; maxWinkel = 360; minWinkel = 0; Winkel = Cos(minWinkel/maxWinkel); Winkel = Winkel * (360/3.14159265); Ergebnis = ((time - Minimum) /Differenz) * ((360-Winkel) - Winkel) + Winkel; ErgebnisAus = ((timeAus - Minimum) /Differenz) * ((360-Winkel) - Winkel) + Winkel; //phi in Bogenmaß umrechnen Ergebnis = Ergebnis * (3.14159265/360); ErgebnisAus = ErgebnisAus * (3.14159265/360); //Punkt auf Kreisbahn = Xmittelpunkt + Radius * cos(Bogenmaß phi) xEin = (x2-x1) + (y2-y1) * Cos(Ergebnis); xEin = (x2-x1) - xEin; //Darstellung umkehren//Spiegeln yEin = (y2-y1) + (x2-x1) * Sin(Ergebnis); //Punkt auf Kreisbahn = Xmittelpunkt + Radius * cos(Bogenmaß phi) xAus = (x2-x1) + (y2-y1) * Cos(ErgebnisAus); yAus = (y2-y1) + (x2-x1) * Sin(ErgebnisAus); //Zeichnen Image1->Picture->Bitmap->Canvas->Brush->Color = clGreen; Image1->Picture->Bitmap->Canvas->Pie(x1,y1,x2,y2,xEin,yEin,xAus,yAus); Image1->Picture->Bitmap->Canvas->Brush->Color = clWhite; Ist es überhaupt möglich ne einheitliche berechnung zu machen, um das tortenstück zeichnen zu könnnen? oder muss man immer abfragen für Sonderfälle machen , wie genau 6 Uhr oder ob es größer oder kleiner 6 Uhr ist, da man ja indiesem Fall beim Zeichnen einmal vom Mittelpunkt addieren muss und das andere Mal subtrahieren?!1 Danke Alex Zitieren
Klotzkopp Geschrieben 5. Dezember 2008 Geschrieben 5. Dezember 2008 Ist es überhaupt möglich ne einheitliche berechnung zu machen, um das tortenstück zeichnen zu könnnen? oder muss man immer abfragen für Sonderfälle machen , wie genau 6 Uhr oder ob es größer oder kleiner 6 Uhr ist, da man ja indiesem Fall beim Zeichnen einmal vom Mittelpunkt addieren muss und das andere Mal subtrahieren?!1 Das sollte schon passen, denn die Winkelfunktionen haben da an der passenden Stelle Vorzeichenwechsel. Allerdings sieht der Code etwas seltsam aus. Zunächst ist der Umrechnungsfaktor zwischen Grad und Bogenmaß Pi/180, nicht Pi/360. Und dein Mittelpunkt liegt bei (x2-x1)/2; (y2-y1)/2. Auch der Radius ist doppelt so groß wie er sein sollte. Zitieren
aLeXanDer.. Geschrieben 8. Dezember 2008 Autor Geschrieben 8. Dezember 2008 Das mit den 360 war ein Fehler meinerseits, da ich einmal einen Halbkreis damit brechnet hatte und dann gedacht und gefolgert habe das bei einem Kreis wohl 360° gelten, aba war ein mathematischer irrtum. Das mit dem Radius hab ich auch bemerkt, nur dass allein wars auch nicht. Ich bin irrtümlicher weiße davon ausgegangen das die Berechnung der Winkel des Kreises oben starten, und hab deshalb das ganze nicht um einen viertel Kreis weiter geschoben.. und mittlerweile funktioniert das ganze auch. Wenn man jetzt den Code anschaut, frag ich mich warum ich solange damit beschäftigt war. naja Danke für die Hilfe Alex Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.