robv
New Member
Posts: 10
|
Post by robv on Jun 21, 2024 14:05:10 GMT
Naar aanleiding van de onderhoudende demonstratie van en verhandeling over "colormaps" ben ik even wat gaan experimenteren met kleurverloop. In de bijgaande voorbeeld-listing loop ik tegen het probleem aan, dat als je r1 en r2 (of g1 en g2 of b1 en b2) dezelfde waarde geeft, het programma op tilt slaat. Hoe voorkom ik dat vastlopen, want bij willekeurige kleuren random invoeren is dat risico groot. kleurverloop horizontaal of vertikaal.lbf (2.52 KB)
|
|
|
Post by Marco Kurvers on Jun 21, 2024 23:19:39 GMT
Hoi Rob,
Dat het programma vastloopt door bijvoorbeeld twee dezelfde r1 en r2 of g1 en g2 waarden is toevallig. Waarom? Hieronder het volgende:
In de FOR lussen zeg je FOR c = a TO b STEP (b - a) / 800. Het probleem zit er dat b - a nul is als beide waarden gelijk zijn. Toch kun je dit eenvoudig oplossen om twee gelijke waarden uit te voeren.
1. Gebruik een variabele, bijvoorbeeld STAP. Maak een toekenning met STAP voordat je de FOR lus uitvoert.
stap = a - b 2. Controleer of stap gelijk is aan 0. Wijzig hem in 1 als deze 0 is.
IF stap = 0 THEN stap = 1 / 800 3. Gebruik een ELSE als het niet zo is om de expressie te gebruiken.
ELSE stap = (b - a) / 800
Gebruik dan deze variabele achter het STEP commando.
N.B. Let er ook op dat als a groter is dan b, de lus niet zal werken. Het lijkt mij dat het mogelijk moet wezen om een hogere r1 te hebben met een lagere r2. Schrijf code erbij om te controleren of a > b. Als dat zo is, dan kun je zeggen: ((b - a) / 800) * -1. De waarde wordt dan negatief.
Probeer het eens.
|
|
keesb
New Member
Posts: 22
|
Post by keesb on Jun 22, 2024 23:31:51 GMT
Naar aanleiding van de onderhoudende demonstratie van en verhandeling over "colormaps" ben ik even wat gaan experimenteren met kleurverloop. In de bijgaande voorbeeld-listing loop ik tegen het probleem aan, dat als je r1 en r2 (of g1 en g2 of b1 en b2) dezelfde waarde geeft, het programma op tilt slaat. Hoe voorkom ik dat vastlopen, want bij willekeurige kleuren random invoeren is dat risico groot. View Attachment Hallo Rob, - step (b-a)/800 is een goed idee maar de implementatie laat nog iets te wensen over
- een loop met stepsize 0 zal nooit eindigen (programma hangt/loopt vast) dus stepsize 0 moet je uitsluiten
- LB maakt zelf integers van de aangeboden getallen in grafische routines, int(c) is dus niet nodig, zie ook de r,g,b berekening in de i-loop in de bijlage die zeker niet allemaal integer waardes oplevert
- de stepsize 0.5 in de m-loop levert alleen meer rekentijd op, er zijn maar 800 pixels die je kunt berekenen, alle .5 waardes worden afgerond naar integer pixelwaardes in het line-commando, dus die 800 waardes worden zo 2x berekend
- in de bijlage een versie die iets anders van opzet is maar geen last heeft van het door jou genoemde probleem Met vriendelijke groet, Kees.
|
|
robv
New Member
Posts: 10
|
Post by robv on Jun 25, 2024 19:22:36 GMT
|
|
|
Post by Marco Kurvers on Jun 25, 2024 22:25:35 GMT
Hoi Rob,
Ik zet je als onderwerp erbij.
|
|
keesb
New Member
Posts: 22
|
Post by keesb on Jun 28, 2024 21:45:00 GMT
"Ter leering ende vermaeck" in de bijlage het programma waarin het idee van Rob grafisch wat verder uitgewerkt is. Er is een optie om het kleurverloop op het scherm in verschillende resoluties op te kunnen slaan voor gebruik in andere programma's. De bmpbutton-versie heeft twee bmp-tjes nodig en wat aanpassingen in de code maar dat wijst zich vanzelf.
|
|
keesb
New Member
Posts: 22
|
Post by keesb on Jul 20, 2024 13:25:45 GMT
Ik had nog een programma liggen dat in deze thread ook wel toepasselijk is, het toont grafisch een aantal alfabetisch gerangschikte en veelgebruikte colormaps met 256 kleurschakeringen. In de code staan de kleuren gedefinieerd als stringarrays met 256 elementen en in het commentaar is aangegeven hoe je hiervan lagere resoluties kunt maken (zie ook het ColorFader programma hierboven) . De jaargetijden-colormaps plus de cool- en de gray-colormap zijn lineaire verlopende kleurschakeringen, de andere colormaps hebben meestal ook een duidelijke ontwerpfilosofie maar dat is weer een verhaal apart.
|
|
keesb
New Member
Posts: 22
|
Post by keesb on Jul 27, 2024 14:41:33 GMT
Ik vond bij het reorganiseren van mijn bestanden nog iets voor deze thread. Sommige 256 kleuren colormaps zoals gnuplot, jet, plasma, rainbow en dergelijke moeten ieder met 256 regels code gedeclareerd worden i.v.m. het complexe kleurverloop. De drie- (en soms iets meer-) regelige colormapdeclaraties in onderstaand programma kunnen handig zijn als je even een kleurverloopje nodig hebt. De formatteringsroutine LAS3$() is eigenlijk overbodig omdat LB de 3 getallen (dan wel met str$) en 2 spaties ertussen ook wel herkent zonder formattering, maar ik vind netjes onder elkaar geformatteerde output altijd prettiger lezen en fouten worden op die manier ook eerder ontdekt.
|
|
|
Post by Marco Kurvers on Jul 28, 2024 20:44:47 GMT
Ja, dit voorbeeld. Inderdaad. Dit is een leuk voorbeeld hoe je de kleurverloop doet.
Een goede oplossing die je hebt gedaan is een label [AdjustXY] gebruiken. De reden is de wijziging van twee variabelen die we niet tegelijk in een functie kunnen retourneren. Omdat x en y globaal zijn, kan dit een goede mogelijkheid zijn. Wie van een uitdaging houdt, kan toch de label vervangen door onderstaande SUB.
SUB AdjustXY h, BYREF x, BYREF y x=0 y=y+1.5*h END SUB
Vergeet niet de GOSUB te vervangen door een CALL en geef de variabelen als argumenten mee.
Maar natuurlijk, een label is voor deze twee wijzigingen net zo handig. Vooral voor degenen die het gebruik van BYREF lastig vinden om te begrijpen.
|
|
keesb
New Member
Posts: 22
|
Post by keesb on Aug 2, 2024 9:20:06 GMT
Onderstaand programma mag in deze thread ook niet ontbreken, het is een variant/uitbreiding op een van de vorige. Je kiest een colormap en het programma toont dan het kleurverloop in 4 horizontale balken met verschillende resoluties plus de waardes van de afzonderlijke RGB componenten in een grafiek. Sommige colormaps zoals bv gnuplot, plasma, rainbow , turbo en parula blijken dan vrij exotisch kronkelgedrag te vertonen.
Speel ook eens met de checkbox voor het omzetten naar grijstinten, dan blijkt waarom de veelgebruikte jet-colormap helemaal niet zo ideaal is (hint : je wil een geleidelijk toenemende/afnemende intensiteit, ook i.v.m. kleurenblindheid).
Als je een andere routine voor het omzetten naar grijstinten kiest kun je in dit programma ook veel beter zien wat het effect daarvan is.
|
|