Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 13.10.2012, 22:25 Titel: |
|
|
Ich weiss noch das ich es für mich einfacher gestalten wollte, hab daher nur integer (gerundete) Werte genommen und sie in ein 4byte paket verpackt.
Im 'hiword' (vergleich einem ARGB UInteger, AR) hab ich den Hue Wert gesteckt (0-360) und in den anderen (G und B) jeweils S und H (0-100)
Ich glaube dadurch das ich nur Integer Werte nutzte konnten nicht alle Farben erreicht werden, rein visuell würde man davon aber kaum was merken...
Ist schon eine Weile her das ich den Code geschrieben habe, als Quelle nahm ich den Wiki Artikel HSV-Farbraum und habe dann mit Grafikprogrammen, Images ect. experimentiert, getestet und verglichen. Das Ergebnis hab ich für mich dann für ausreichend gut befunden.
Hab ihn dann aber nur noch selten benutzt weil ich ihn wie oben erwähnt leider für viel zu langsam empfunden habe... _________________
 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 13.10.2012, 22:40 Titel: |
|
|
japp, diese Seite hab ich heut auch schon des öfteren besucht.
Will das jetzt auch nicht weiter ausbreiten... ist ja schließlich OT
Vielen Dank fürs Antworten
Mutton
PS:
funktioniert nur wenn h integer ist...
Code: | h= h mod 360
huecase= (h/60)+1 |
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 15.10.2012, 17:35 Titel: |
|
|
Zitat: |
Wird MOD mit Gleitkommazahlen verwendet, so werden diese zu INTEGER-Werten gerundet.
|
hmm.. stimmt leider
alternativ müsste;
funktionieren, ob das vergleichbar 'schnell' wie MOD selbst ist kann ich aber grad nicht sagen... _________________
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.10.2012, 17:37 Titel: |
|
|
Eternal_pain hat Folgendes geschrieben: | Zitat: |
Wird MOD mit Gleitkommazahlen verwendet, so werden diese zu INTEGER-Werten gerundet.
|
hmm.. stimmt leider |
Modulus geht prinzipiell nur mit Ganzzahlen. Es gibt schlichtweg keinen Rest bei Fließkommadivision... |
|
Nach oben |
|
 |
Quisslich
Anmeldungsdatum: 09.09.2012 Beiträge: 38
|
Verfasst am: 15.10.2012, 19:07 Titel: |
|
|
die MATH Funktionen der C-Standard-Bibliothek bietet ja bei Bedarf auch die fmod-Funktion an, wenn man es denn braucht. Wieviel das langsamer ist als MOD, kann ich allerdings nicht sagen.
Code: | #Include "crt/math.bi"
Dim a As Double = 18.5
Dim b As Double = 4.2
Print fmod(a, b)
Sleep
|
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 15.10.2012, 19:18 Titel: |
|
|
Hab diese noch nie verwendet, macht einen guten Eindruck auf mich...
Code: |
#Include "crt/math.bi"
Dim a As Double = 18.5
Dim b As Double = 4.2
Dim c As Double = 110.1123
Dim as Double af,am
Dim as Double bf,bm
Dim as Double cf,cm
af = fmod(a,10) : am = a - ((a\10)*10)
bf = fmod(b,10) : bm = b - ((b\10)*10)
cf = fmod(c,10) : cm = c - ((c\10)*10)
?af,am
?bf,bm
?cf,cm
sleep
|
_________________
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.10.2012, 19:26 Titel: |
|
|
Du solltest dir halt bewusst sein, wo der Unterschied liegt. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 15.10.2012, 22:33 Titel: |
|
|
Die beiden ein Stück weit eng zusammengehörenden Operatoren "\" und "mod" sind für reine Integerarithmetik, d.h. "Dim .. as Integer" und "Dim .. as Long" und deshalb in reinen Ganzzahlausdrücken sehr effizient.
Für Gleitkommazahlen deshalb auf Int() zurückgreifen (dies ist übrigens eine reine Fliesskommaoperation, d.h. der Rückgabewert ist immer noch Fliesskomma: Darf bei Double ohne Weiteres grösser als 2^31 sein!) und z.B. so etwas wie
Code: | Function fmod(a As Single, b As Single) As Single
fmod = a - b * Int(a / b)
End Function |
verwenden. => In dem Sinn kann sehr wohl Modulo auch für Fliesskommazahlen definiert werden (z.B. gleichlange Teile von einem Stab solange absägen, bis ein Rest kürzer wie ein Teil entsteht). _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.10.2012, 23:10 Titel: |
|
|
dreael hat Folgendes geschrieben: | Die beiden ein Stück weit eng zusammengehörenden Operatoren "\" und "mod" sind für reine Integerarithmetik, d.h. "Dim .. as Integer" und "Dim .. as Long" und deshalb in reinen Ganzzahlausdrücken sehr effizient. |
Liegt auch einfach daran, dass bei x86 der Modulo eh bei jeder Division berechnet wird. Allerdings gelten Divisionen an sich eh als nicht sonderlich schnelle Operationen, ob moderne CPU-Designs dafür immernoch ne handvoll Zyklen brauchen, weiß ich allerdings nicht. |
|
Nach oben |
|
 |
|