Hein Pragt Heinpragt.com   
© Hein Pragt ( Facebook ,  Google auteur )

 
 
Programmeren

© 2011 Hein Pragt

Vanaf het moment dat ik ruim 30 jaar geleden mijn eerste computer kocht ben ik aan het programmeren. Eerst in basic, daarna in z80 assembler, daarna vele jaren in C en C++. Hier is een lijst van programmeertalen waarin ik "beroepsmatig" gewerkt heb: Java, Perl, Php, C, C++,C#,Delphi, Cobol, Unix Shell scripts, JavaScript, VBScript, Xslt, Turbo Pascal, Basic, Assembly voor diverse processors (8080,Z80,8031,80186,80386,Pentium). Ook programmeerde ik 30 jaar geleden al spellen, eerst in Basic, toen in Basic en assembler, daarna in C en Assembler en de laatste jaren C++ en Assembler. Beroepsmatig programmeer ik momenteel in C# (DotNet), Java en C, maar ook een projectje in Psql kwam er nog even tussendoor. Door mijn brede kennis en ervaring ben ik heel breed inzetbaar en bovendien vind ik (bijna) alles ook leuk om te doen. Dit is een index pagina naar alle onderwerpen op mijn site die te maken hebben met computers en programmeren.
Vriendelijke groet, Hein Pragt



Starfield code in win32 c

starfield demo in c Een klassiek stukje grafische code is een starfield demo. Het wekt de suggestie dat u door de ruimte vliegt en de sterren op u afkomen en u aan alle zijden passeren. Sterren die ver weg zijn zullen kleiner zijn en ze moeten groter worden als ze de camera (onze kijk positie) naderen. Voor de helderheid geldt hetzelfde, sterren die verder van ons vandaan zijn hebben een minder heldere kleur dan sterren die dichtbij zijn. Dit wekt de indruk dat de sterren echt op ons afkomen.

De broncode met uitleg in C voor Win32 kunt u vinden op de volgende pagina: Starfield code in win32 c



Tunnel code in win32 c

3d tunnel met circels demo in c Nog een klassiek stukje grafische code is een 3d tunnel met circels demo. Het wekt de suggestie dat u in een tunnel van circels kijkt die op u afkomen en u aan alle zijden passeren. Voor de punten gebruiken we een structure waarin we de eigenschappen van de punt opslaan. Dat zijn de x, y en z positie als float, een 3d coordinaat in de wiskunde, waarmee we de positie horizontaal, verticaal en in de diepte opslaan. Een groter z positie betekend dus dat het voorwerp ver van ons verwijderd is (in dit wiskundig model) en de grootte en helderheid kunnen we dan ook berekenen uit de (z) afstand. Verder slaan we deze vector (x,y,z) ook op als int waarbij ze omgerekend zijn naar een punt op het beeldscherm. Dit is eenvoudig te doen als we toch aan het rekenen zijn en scheelt weer tijd als we de punten willen schrijven in het venster. Deze demo verschilt ten opzichte van het starfield, dat hier ook een leuke demo van wat toegepaste wiskunde in zit. We gebruiken de sinus en cosinus functie, zetten radialen om in graden en voeren een extra transformatie uit zodat lijkt alsof de tunnel een sinusvirmige beweging maakt in de ruimte. In de init routine laat ik zien hoe je met behulp van een sinus en cosinus vrij eenvoudig een circel kunt maken.

De broncode met uitleg in C voor Win32 kunt u vinden op de volgende pagina: Tunnel code in win32 c



Vuur code in win32 c

vuur demo in c Een heel leuk grafisch effect dat u vaak tegenkomt in demo's is gegenereerd vuur. Ik zal in het kort proberen uit te leggen hoe we vuur kunnen maken. Eerst hebben we een kleurenpalet nodig dat van donkerblauw naar donkerrood overloopt en dan van rood naar geel en daarna van geel naar wit. Dit zijn de kleuren waar het vuur uit gaat bestaan. We hebben 255 kleuren en 0 is het meest donker en 255 is het meest licht. We maken een scherm buffer en die vullen we eerst met alleen maar 0. We zetten onder in de laatste regel om de beurt 255 of 0 met een random functie. Daarna gaan we het scherm omhoog scrollen waarbij we van een punt het gemiddelde kleurwaarde nemen met de omliggende punten. Dit zetten we als kleurwaarde in het nieuw pixel en dit blijven we herhalen. De pixels op hogere lijnen zullen dus steeds meer gedempt gaan worden en aangezien ons kleurenpalet mooi de kleuren van vuur bevat zal het een redelijk realistisch beeld van vuur opleveren.

De broncode met uitleg in C voor Win32 kunt u vinden op de volgende pagina: Vuur code in win32 c



Opengl programmeren

opengl programmeren In de begintijd van de computer werden in grafische applicaties het beeld pixel voor pixel uitgerekend door de CPU en daarna doorgestuurd naar de grafische kaart die ervoor zorg droeg dat een videosignaal naar de monitor gestuurd werd. Dit lost natuurlijk veel rekenkracht en telkens moesten allerlei grafische functies opnieuw geschreven worden. Nu is een eenvoudige lijn niet zo'n probleem maar ingewikkelde 3D transformaties werden al iets moeilijker. OpenGL wat staat voor Open Graphics Library gebruikt een heel andere aanpak voor het genereren van een beeld via een standaard bibliotheek. Naast de CPU kan er ook een grafische processor van de videokaart ingezet worden (de GPU) om het beeld te genereren. In plaats van het beeld punt voor punt aan te leveren, worden kunnen complete objecten, camera posities en licht instellingen aan de GPU geleverd die dit dan afzonderlijk van de CPU kan renderen. De GPU gaat dus zelfstandig het beeld punt voor punt berekenen en dat beeld wordt uiteindelijk naar de monitor gestuurd. Meestal gaat het om het samenwerken van de CPU en de GPU, afhankelijk van de mogelijkheden die beiden hebben.
OpenGL introductie
OpenGL en Visual Studio (Deel 1)
OpenGL en Visual Studio (Deel 2)


3D programmeren

3d kubus demo In 1991 en 1992 werd mijn belangstelling voor 3d technieken als ervaren C en C++ programmeur gewekt door de serie artikelen van Michael Abrash in het Amerikaanse tijdschrift Dr Dobbs die ik in die tijd trouw elke maand las. Aangezien de computers nog niet zo snel waren in die tijd en geheugen ook nog beperkt was moesten we via omwegen toch proberen om enige snelheid te halen. Ik heb in deze tijd ook een complete fixed point wiskundige bibliotheek in x86 assembler geschreven waarmee ik in C snel 3d vectoren kon omrekenen en polygonen kon renderen. Samen met alle informatie over 3D programmeren van Michael Abrash heb ik in die tijd een een vrij aardige 3D demo gemaakt en deed ik mee aan demo competities. Michael Abrash ging ten tijd van deze artikelen voor voor Microsoft werken en toen ik tegen de beperkingen van de hardware aanliep begon mijn belangstelling wat terug te lopen maar de basiskennis is altijd gebleven. Op deze pagina wil ik wat algemene informatie geven over 3D technieken en 3D programmeer technieken maar ook een klein stukje wiskunde. Wanneer u wilt programmeren voor 3D applicaties is een basis van wiskunde noodzakelijk. Maar nog nooit was wiskunde zo leuk omdat u gelijk erg leuke resultaten kunt zien.

lees meer over 3D technieken.


Het spel reversi

othello of reversi spel Het spel Reversi (ook wel othello genoemd) is een bordspel voor twee personen dat in 1888 bedacht is door Lewis Waterman in Engeland. Het spel Othello werd later door een Japanner genaamd Goro Hasegawa bedacht in 1971 en James R. Becker ontwikkelde het spel en bracht het op de markt. Het spel is heel bekend geworden op de computer, maar is ook nog steeds als bordspel te koop. Er is een bordspel met de naam Rolit te koop waarmee reversi door vier personen tegelijk gespeeld kan worden. De steentjes zijn bij deze variant balletjes die in vier standen op het bord kunnen worden gelegd, met een bepaalde kleur boven. Het spel leent zich ook perfect voor de computer en aangezien de spelregels vrij simpel zijn is het ook snel en eenvoudig te implementeren. Het spel is in bijna elke programmeertaal gemaakt en er zijn ook veel online versies van het spel. Aangezien javascript en flash script niet uitblinken in snelheid zijn de meeste van deze programma's niet erg sterk en hebben ze meestal een 2 ply (spelzet niveau) min/max berekening met soms wat uitbreidingen met tabellen met veld waarden. Maar deze programma's zijn vaak te gretig in het veroveren van stukken waardoor ze met een beetje tactiek al snel verliezen. De wat betere versies van het programma zijn tegenwoordig in java geschreven maar zoals voor elk spel opgaat is de taal C en C++ natuurlijk de meest voor de hand liggende keuze als het om snelheid gaat.
lees meer over het spel reversi...


Spellen programmeren

Het programmeren van spellen is leuk, verslavend, een bron van heel veel ergernis maar ook heel veel plezier. Maar hoe kunt u een spel programmeren? Grafische vormgeving en geluid zijn de dingen die het eerst opvallen wanneer we computer spellen bekijken. Maar schitterende animaties en goede geluidseffecten zijn slechts de buitenste laag van deze fascinerende vorm van technologie. 3D techniek vereist een goede kennis van wiskunde en verder is een spel vaak een ingewikkelde structuur van logica en regels. Ook raken spellen vaak het vak psychologie omdat het spel een vorm van actie en reactie is en de speler een mens is die op menselijke wijze reageert op het spel.
lees meer...


De programmeertaal C

Deze pagina gaat over mijn oude liefde, de programmeertaal C. Ik leerde de taal C kennen in 1986 (dus 24 jaar geleden) door het werk wat is toen deed. Ik was programmeur van embedded software en schreef hoofdzakelijk in Z80 assembler code maar langzaam ging dit steeds meer richting C. De taal C is ook maar één stap hoger dat assembler dus het was ook een logische stap. Naderhand ben ik ook PC applicaties gaan schrijven in C en er was zelfs een tijd dat ik de compiler als rekenmachine gebruikte. Na het lezen van de C bijbel, het bekende witte boekje van Kernighan en Ritchie was ik een totale fan van de programmeertaal C. Samen met de collega's probeerden we steeds meer geavanceerde dingen te doen en werd het schrijven van code in C een soort van kunst.
lees meer over de programmeertaal C


De programmeertaal C++

In dit artikel probeer ik een aantal goede redenen te geven om over te stappen op 'C++' zonder het object georiënteerd deel te gebruiken. Dit is in mijn visie de eerste stap die 'C' programmeurs kunnen maken zonder een cultuur schok door te maken. Object georiënteerd programmeren is namelijk een andere denk en ontwerp wijze in plaats van alleen wat nieuwe functies. Maar 'C++' is heel goed te gebruiken zonder object georiënteerd te werken. Toen ik voor het eerst kennismaakte met 'C++' zei ik spottend tegen een collega, "Alles wat in 'C++' mogelijk is, kan ik ook in standaard 'C' maken, ik zie het nut niet zo". Ik had volkomen gelijk, en vele collega 'C' programmeurs waren het met me eens.
lees meer over de programmeertaal C++


De Povray raytracer

Mede door de nieuwe 3D spellen is er veel belangstelling voor 3D technieken. Bijna elke nieuw spelconsole is weer meer realistisch, sneller en meer gedetailleerd. Er bestaan enkele goede 3D ontwerp programma's maar het prijskaartje dat hier aan hangt is voor de gemiddelde hobbyist niet op te brengen. Maar er is een heel goed alternatief 3D ontwerp programma genaamd Povray, voor wie zich echt wil verdiepen in 3D technieken. Voor het maken van 3D afbeeldingen kunt u een raytracer gebruiken, veel 3D ontwerp pakketen hebben deze onder de motorkap zitten. Ray tracing of raytracing is een methode waarmee een 3D scene omgezet kan worden in een afbeelding. De objecten in de scene worden wiskundig omschreven en er worden eigenschappen aan toegekend zoals kleur en reflectie. In deze scene bevinden zich ook een of meerdere lampen en een camera. Voor elke beeldpunt in de afbeelding wordt een lichtstraal (ray) vanuit de camera de scene in geschoten. Deze lichtstraal zal dan door een wiskundige berekening gevolgd (tracing) worden om te kijken met welk object deze in aanraking komt. Voor elk punt waar de straal het object raakt wordt de kleur berekend en zal er een beeldpunt in de afbeelding gegenereerd worden. Dit kost zeer veel rekenkracht van de computer maar kan spectaculair mooie plaatjes opleveren.
lees meer over de Povray raytracer


Bestandsformaten

Sinds het begin van de computers zijn er verschillende soorten van opslag van gegevens ontstaan. In eerste instantie ontstonden er zelfs verschillende wijze van opslaan van tekens zoals ascii, ebcdic en tegenwoordig unicode. Maar ook werden er veel binaire bestandsformaten ontwikkeld, niet zelden om het bestand onleesbaar te maken en ook om een bestand type aan een specifieke applicatie te koppelen. Ook zijn er bijvoorbeeld verschillende formaten voor grafische bestanden zoals gif, jpeg, png en tiff. Ondanks dat sommige fabrikanten de indeling van hun bestandsformaat niet wilden prijsgeven om concurrentie buiten de deur te houden, werden deze formaten snel door slimme gebruikers gedecodeerd en beschreven. Tegenwoordig kunnen de meeste programma's elkaars bestandsformaten lezen naar hun eigen formaat omzetten. Het bestandsformaat wordt vaak aangegeven door middel van een zogenaamde extensie aan het einde van de bestandsnaam.
lees meer over bestandsformaten


PragtTextUtil programma

PragtTextUtil is geen editor hoewel de basis functies om tekst te kunnen bewerken wel aanwezig zijn in het programma. Het programma is bedoeld om bewerkingen uit te voeren op tekst zoals het omzetten naar hoofd of kleine letters of het verwijderen van HTML tags en het omzetten naar nette paragrafen. Maar ook bewerkingen als trim, uniq, sort en filtering zitten in dit programma en een complexe bewerking om een gesorteerd woord frequentie overzicht te maken om bijvoorbeeld goede keywords voor een webpagina te kunnen bepalen. Ook kunt u bijvoorbeeld uit een logbestand alle regels filteren die een bepaald woord bevatten of juist niet een bepaald woord bevatten. Ook een leuke optie is zoek en vervang met de mogelijkheid om CTRL tekens te gebruiken in de zoek maar ook de vervang tekst. Als invoer kan het programma natuurlijk alle vormen van platte tekstbestanden lezen, maar ook bestanden als hex/ascii dump, html pagina's, webpagina's via een HTTP verzoek (simpele wget) om de exacte response van een internet server op te vangen. Maar ook kunt u de inhoud van uw directory in de tekstbewerker laden om zo bijvoorbeeld een gesorteerde lijst van al uw muziek te maken. (Onder Windows is het nog steeds niet mogelijk om de lijst uit de verkenner te knippen en plakken). Ook kunt u de uitvoer van een command line opdracht rechtstreeks in de tekstbewerker inlezen. Verder zit er een variant van de bekende Linux / Unix utils grep, diff, head en tail in maar dan geschikt gemaakt voor MS-Windows.
lees meer over het PragtTextUtil programma





Last update: 05-06-2011

Wilt u deze site steunen dan kunt u dit doen door VIA deze site iets te bestellen op:
bol.com Partner


Programmeren



Disclaimer.

Hoewel de heer Hein Pragt de informatie beschikbaar op deze pagina met grote zorg samenstelt, sluit de heer Pragt alle aansprakelijkheid uit met betrekking tot de informatie die, in welke vorm dan ook, via zijn site wordt aangeboden. Het opnemen van een afbeelding of verwijzing is uitsluitend bedoeld als een mogelijke bron van informatie voor de bezoeker en mag op generlei wijze als instemming, goedkeuring of afkeuring worden uitgelegd, noch kunnen daaraan rechten worden ontleend.
Op de artikelen van de heer Pragt op deze Internetsite rust auteursrecht. Overname van informatie (tekst en afbeeldingen) is uitsluitend toegestaan na voorafgaande schriftelijke toestemming van de rechthebbende. Voor vragen over copyright en het gebruik van de informatie op deze site kunt u contact opnemen met: (email: copyright@heinpragt.com)

Webdesign: © Hein Pragt
Fotografie: © Hein Pragt
Auteur: © Hein Pragt (Veenendaal - Utrecht - Nederland)

De groep sites van Hein Pragt bestaat uit: www.heinpragt.com    www.eroses.eu    www.pragt.info    www.zxy.nl/vraagbaak    www.codebank.nl