Zum Inhalt springen

[C++] Brechnungen mit Kreisbogen und dessen Punkte


aLeXanDer..

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...