GWBasic en grafische transformatievergelijkingen – III

In eerdere blogposts heb ik de ontwikkeling beschreven van functies die de coordinatenstelsels gekoppeld aan SCREEN en WINDOWS statements van Microsoft’s GWBasic (PCBasic) vertalen naar x,y coordinaten die men gebruikt in een object georienteerde taal zoals  (Lazarus) Pascal . Nu ben ik voornamelijk Lauwerier programma’s aan het vertalen en dan blijkt soms dat men voorzichtig moet zijn met een rechtstreekse vertaling. Een tweede probleem is dat men in Lazarus Pascal geen Circle statement kent. Dit laatste probleem lossen we op door een functie te schrijven die gebruik maakt van het EllipseC statement en die functie aan te roepen in de code (bv. DrawCircle(Canvas, n1, n2);). Door nu de x en y coordinaten binnen deze functie te berekenen lossen we het eerste probleem op.

Stuifmeel gele narcis

De afgelopen week “spoten” de voorjaars bloemen de grond uit en vooral de gele narcissen waren goed te zien. Een mooi moment om even een stuifmeelmonster te nemen en te bekijken onder de microscoop. Het monster heb ik genomen door een beetje Kayser’s glycerine jelly (waaraan wat basisch Fuchsine is toegevoegd) op een objectglas uit te smeren (stolt) en dat langs de meeldraden van de narcis te wrijven.

Microscoop: Euromex ML2000 met polarisatiefilter
Objectief: 20x (Euromex Phase DM 20x/0.40 DIN)
Camera: Luckyzoom YW500 HD 5MP USB Cmos Electronic Digital Eyepiece

Stuifmeel gele narcis
Gele narcis
Kayser's Glycerin Jelly

GWBasic en grafische transformatievergelijkingen – II

In een recente blog post heb ik beschreven hoe je de coordinatenstelsels gekoppeld aan SCREEN en WINDOWS statements van Microsoft’s GWBasic (PCBasic) vertaald, zodat men de programma’s gemakkelijker naar Pascal en Python kan overzetten. De methode die ik in de blog post beschreven heb om de transformatievergelijking te bepalen klopt wel, maar achteraf realiseerde ik me dat dit eenvoudiger kan. Het gaat om een lineaire vergelijking in de vorm F(x) = ax + b. Men kan eerst de hellingshoek berekenen en vervolgens de asafsnede. De berekening kan men ook gemakkelijk in een functie stoppen zoals men kan zien in onderstaande (Lazarus) Pascal voorbeeld.

Raspberry Pi 4B booten van SSD

Ca. een jaar geleden had ik het systeem opgezet waar ik mijn Raspberry Pi 4 Model B laat booten van een SSD. Nadat ik recentelijk echter met Deepseek was gaan experimenteren wilde de Pi niet meer booten van de SSD, hetgeen na wat uitproberen te herleiden was tot de SATA naar USB kabel. Deze heb ik vervangen en besloot alles opnieuw te installeren. Dat werd een groot gevecht. Wat ik ook deed het systeem wilde maar niet soepel opstarten en liep om de haverklap vast of wilde zich maar niet laten configureren. Vandaag ben ik er achter gekomen waar het probleem lag. Ik had de SSD aangesloten op een USB3 poort van de Raspberry Pi, dat geeft echter (al sinds lang) problemen. De SSD moet aangesloten worden op een USB2 poort. Opeens verloopt alles weer soepel.

Fluorescerende monoammoniumfosfaat kristallen

Experimenteerkitjes die men kan gebruiken om kristallen te kweken bevatten meestal monoammoniumfosfaat (NH4H2PO4) kristallen waaraan evt wat kleurstof is toegevoegd. Door een gele markeerstift open te breken en de stift even in alcohol te zettenblost de fluorescerende kleurstof op in de alcohol. Neem een erelenmeyer, maak een verzadigde oplossing van monoammoniumfosfaat in water en voeg daat wat van de alcohol met opgeloste kelurstof aan toe. Zet de oplossing weg met een dikke prop tissue in de hals en laat deze enige tijd staan. Er vormen zich kristallen die oplichten onder UV licht.

Natriumthiosulfaat kristallen

Plaats een kristal natriumthiosulfaat op een objectglas. Leg er een dekglas op. Neem een spritusbrander en verwarm het objectglas voorzichtig. Stop zodra men het kristalwater ziet koken. Wrik indien nodig eem klant van het dekglas een beetje omhoog. Er vind herkristallisatie van de thiosulfaatkristallen plaats.

Microscoop: Euromex ML2000 met polarisatiefilter
Objectief: 4x
Camera: Luckyzoom YW500 HD 5MP USB Cmos Electronic Digital Eyepiece

Calciumoxalaat kristallen

In februari heb ik op verschillende manieren geprobeerd om calciumoxalaat kristallen te maken. Dat leverde uieteraard foto’s op. Onderstaande foto’s zijn van calciumoxalaat kristallen die gegroeid zijn op een objectglaasje, en na een nacht onder gepolariseerd licht bekeken zijn.

Microscoop: Euromex ML2000 met polarisatiefilter
Objectief: 4x, 10x, 20x
Camera: Luckyzoom YW500 HD 5MP USB Cmos Electronic Digital Eyepiece.

Calciumoxalaat kristallen op de rok van een rode ui

Uien zijn voor veel planteneters niet eetbaar omdat de rok van de ui bezaaid is met calciumoxalaat (CaC2O4)  kristallen. Recentelijk zag ik op Microbehunter een tip om de kristallen beter zichtbaar te maken, meer specifiek door het stukje rok van een rode uit in slaolie te leggen i.p.v. water. Het maakt de rok wat doorzichter waardoor de kristallen beter zichtbaar zijn. Zoals men in onderstaande foto’s kan zien is dat inderdaad het geval. De oxalaat kristallen zijn bekeken onder gepolariseerd licht.

Microscoop: Euromex ML2000 met polarisatiefilter
Objectief: Euromex S. Flat Field 10 0.25 – 160 0.17 DIN
Camera: Luckyzoom YW500 HD 5MP USB Cmos Camera Electronic Digital Eyepiece

Calciumoxalaat kristallen op de rok van een rode ui in slaolie

Calciumoxalaat kristallen op de rok van een rode ui in water

Stolpersteine in Haarlem

Wandelend op de Kruisweg in Haarlem vlak bij het station zag ik weer een paar Stolpersteine. Een herinnering aan mensen (waaronder een kind van 10 jaar) vermoord door een immoreel regime. Juist in deze tijd van verrechtsing is het goed om eraan herinnerd te worden wat het betekent als regime’s (zowel links als rechts) afgleiden in een gemoedstoestand waarin het normaal wordt andere mensen als minderwaardig aan te duiden.

GWBasic en grafische transformatievergelijkingen

Als je zoals ik oude GWBasic programma’s om aan het zetten bent naar Pascal en Python krijg je te maken met de SCREEN en WINDOWS statements van GWBasic. In GWBasic worden deze gebruikt om het weergeven van graphics op het scherm te beheersen.

Het SCREEN statement bepaalt de graphics mode en de scherm dimensies.
SCREEN 0: 40 x 25 of 80 x 25, alleen tekst, 16 kleuren (EGA)
SCREEN 1: 320 x 200 pixels, 80 x 25 tekst, 16 kleuren (EGA, CGA)
SCREEN 2: 640 x 200 pixels, 40 x 25 tekst, 16 kleur (EGA, CGA)
SCREEN 3: 720 x 348 pixels, 80×25 tekst, 2 kleuren (Hercules, Olivetti, AT&T)
SCREEN 4: 640 x 400 pixels, 80×25 tekst, 16 kleuren ( Olivetti, AT&T)
SCREEN 7: 320 x 200 pixels, 40 x 25 tekst, 16 kleuren (EGA)
SCREEN 8: 640 x 200 pixels, 80 x 25 tekst, 16 kleuren (EGA)
SCREEN 9: 640 x 350 pixels, 80 x 25 tekst, 64 kleuren (EGA)
SCREEN 10: 640 x 350 pixels, 80 x 25 tekst, 9 kleuren (EGA)
SCREEN 11: 640 x 480 pixels, 80 x 30 / 80 x 60 tekst, 256K kleuren (VGA, MCGA)
SCREEN 12: 640 x 480 pixels, 80 x 30 / 80 x 60 tekst, 256K kleuren (VGA)
SCREEN 13: 320 x 200 pixels, 40 x 25, 256K kleuren (VGA, MCGA)

Het WINDOWS statement (WINDOWS (x1,y1)-(x2,y2)) definieert een rechthoek binnen het door SCREEN gedefinieerde coordinatensysteem. Dit maakt het mogelijk om graphics te tekenen binnen het gespecifieerde gebied. Als SCREEN niet gespecificeerd is dan definieert WINDOW (50,50)-(150,150) een window met de linker benedenhoek op (50,50) en de rechterboevenhoek op (150,150). Als SCREEN wel gespecificeerd is dan definieert WINDOW (50,50)-(150,150) een window met de linker bovenhoek op (50,50) (lager coordinaten) en de rechteronderhoek op (150,150) (hogere coordinaten).

In onderstaande figuur geven we deze relatie meer pictografisch weer.

Als nu een GWBasic programma zowel SCREEN als WINDOWS statements gebruikt moeten we inzicht krijgen in de transformatievergelijking indien we het programma willen vertalen naar een andere taal.