Hallo, möchte folgende Formel gerne im AVR Studio implementieren. Beim Simulieren bleibt das Ergebnis jedoch unabhängig von der Eingangsgröße 1. Wäre toll wenn mir jemand den Fehler zeigen könnte. Soll Formel: z = [1 - |(H/60)mod_2 - 1|]*255 Meine C-Formel: float z=(1-fabs(((H/60)%2)-1))*255; mfg Thomas
Auch wenn ich direkt für H einen Wert in der Formel einsetze bekomme ich als Ergebnis 1 heraus
Ein Wert zwischen 0 und 360. Die Formel dient zur Umrechnung von HSV zu RGB.
Thomas schrieb: > Ein Wert zwischen 0 und 360. also ein int Thomas schrieb: > (H/60) Damit wird das hier auch in int gerechnet. Für H < 60 ist es damit immer 0, für 60<H<120 immer 1. Ich denke nicht, dass du das beabsichtigt hast ;) -->
1 | float z=(1-fabs((((float)H/60)%2)-1))*255; |
Thomas schrieb: > 1. Wäre toll wenn mir jemand den Fehler zeigen könnte. 2. wäre toll wenn Du die Beiträge lesen würdest
das float kannst du dir sparen, nach der Formel kommt halt entweder z=0 oder z=255 raus
chris schrieb: > Thomas schrieb: >> Ein Wert zwischen 0 und 360. > > also ein int > > Thomas schrieb: >> (H/60) > > Damit wird das hier auch in int gerechnet. > Für H < 60 ist es damit immer 0, für 60<H<120 immer 1. > Ich denke nicht, dass du das beabsichtigt hast ;) > > --> > float z=(1-fabs((((float)H/60)%2)-1))*255; Richtig, ganz so war das nicht geplant :P Wenn ich deinen Vorschlag compilieren möchte bekomme ich nun folgende Fehlermeldung: invalid operands to binary % (have 'float' and 'int') Jedoch weiß ich nicht wo denn da jetzt ein int vorkommt??? Bernd schrieb: > Thomas schrieb: >> 1. Wäre toll wenn mir jemand den Fehler zeigen könnte. > > 2. wäre toll wenn Du die Beiträge lesen würdest Sorry natürlich auch dir vielen Dank für die Antwort. Vermutlich liegt hier der Fehler. Stoße bei den Datentypen und vor allem bei der Umrechnung und Rechnung mit verschiedenen Datentypen immer wieder auf Probleme.
Thomas schrieb: > Vermutlich liegt > hier der Fehler. Stoße bei den Datentypen und vor allem bei der > Umrechnung und Rechnung mit verschiedenen Datentypen immer wieder auf > Probleme. Eigentlich sollte man beim Programmieren schon etwas nachdenken und auch etwas Eigeninitiative entwickeln. Wenn eine Formel nicht das liefert, was man erwartet, was würde man ohne Internet und Foren tun? Na die Formel mal in kleinere Einheiten zerlegen! (Oder, wenn man in diesem Fall den Fehler beim Simulator vermutet, dann testet man den Ausdruck eben am PC mit einem C-Compiler.) >((float)H/60)%2 % ist doch in C die Modulo-Division, die ist wohl für C nur für ganzzahlige Werte definiert. Du hast hier aber float mod int. Aber ich sehe so spontan eh nicht, dass bei deiner Formel etwas sinnvolles herauskommen würde. Vielleicht gibst Du am besten an, wo Du die Formel gefunden hast, dann kann Dir jemand sagen, wie man das am Besten in C schreibt.
Stefan Salewski schrieb: > Eigentlich sollte man beim Programmieren schon etwas nachdenken Habe ich auch gerade getan -- meine Vermutung wäre, dass Du eigentlich statt % fmod nehmen wolltest? Also irgendwas wie float z=(1-fabs((((float)H/60.0) fmod 2.0)-1))*255;
Ich rate mal mit ;-) float z=(1-fabs( fmod( ((float)H/60.0) , 2.0) -1 ) )*255;
Hier noch mal die komplette Rechnung: http://www.had2know.com/technology/hsv-rgb-conversion-formula-calculator.html unten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.