Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Denkanstoß 2D Feuer routine
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.10.2012, 22:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 13.10.2012, 22:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 15.10.2012, 17:35    Titel: Antworten mit Zitat

Zitat:

Wird MOD mit Gleitkommazahlen verwendet, so werden diese zu INTEGER-Werten gerundet.

hmm.. stimmt leider

alternativ müsste;
Code:

h = h - (h\360)

funktionieren, ob das vergleichbar 'schnell' wie MOD selbst ist kann ich aber grad nicht sagen...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.10.2012, 17:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Quisslich



Anmeldungsdatum: 09.09.2012
Beiträge: 38

BeitragVerfasst am: 15.10.2012, 19:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 15.10.2012, 19:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.10.2012, 19:26    Titel: Antworten mit Zitat

Du solltest dir halt bewusst sein, wo der Unterschied liegt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 15.10.2012, 22:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.10.2012, 23:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz