|
Python Project Ingenieur-Architecten
Algemene Coordinatie
Bart Jansen PL9.1.59 (best op afspraak).
Assistent Mathias Polfliet staat natuurlijk ook ter beschikking.
Doel van het project
Met het project zal de student een grotere opgave krijgen dan in de oefeningen.
Hierdoor leert de student zelfstandig nadenken over het ontwerpen van een algoritme, het implementeren (waarbij datastructuur, iteraties en abstracte, geparameterizeerde functies ontworpen moeten worden) en het overkomen van de moeilijkheden die daarmee gepaard gaan: compilefouten en bugs er uithalen (debuggen), de correctheid van het programma testen, programma uitbreiden en herstructureren indien nodig ... De student zal tegen deze problemen aanbotsen en zichzelf moeten overtreffen om er uit te geraken.
Dit is noodzakelijk om het nodige inzicht en de nodige vaardigheden te bekomen. Enkel zo zal de student de essentie van programmeren onder de knie te krijgen. Elke programmeur heeft deze stap moeten nemen. De oefeningen alleen zijn meestal niet voldoende.
Werkwijze
- Per twee of alleen kies je een maak je een ontwerp voor een stadium .
- Je legt dit voor aan je assistent ter goedkeuring. Dit gebeurt in de lessen op 6 november voor groep A en op 8 november voor groep B.
- Je maakt een tekening over je voorstel met de structuur en de belangrijkste parameters. Geef ook de referenties (websites e.d.) mee die dienden ter inspiratie. (Merk op dat je dit steeds moet doen, want anders kan je van plagiaat beschuldigd worden.)
- Na feedback van je assistent, kan je er aan beginnen.
- Tijdens de laatste oefeningenzittingen krijg je tijd om er aan te werken en assistentie te vragen. Aarzel niet om hulp te vragen. Natuurlijk verwachten we dat je eerst zelf om een oplossing zoekt, aan je collega's vraagt, maar nadien kan je bij ons te recht. Blijf niet te lang met een probleem zitten! Dat is tijdverlies.
- Halverwege je project, beleg je een informeel evaluatiemoment tijden de oefeningenzittingen. Voor groep A vindt dit evaluatiemoment plaats op 27 november en voor groep B vindt dit plaats op 29 november. Dit is verplicht en je project mag niet af zijn! (We trekken 5 punten af indien niet.)
- Ultieme deadline afgeven van code (in .py formaat) via mail naar de assistent Mathias: vrijdag 22 december 23:59.
Evaluatiecriteria
- Correctheid
- Gebruiksvriendelijkheid:
Zorg ervoor dat:
- de naam van je project en jullie namen zichtbaar zijn.
- je camerastandpunt in het begin goed zitten.
- best zelf parameterwaarden standaard instellen, maar de gebruiker toelaten om deze eventueel in het begin aan te passen.
'Properheid' van code:
- Gebruik zinnige namen voor variabelen en functienamen. In geen geval 'a', 'b', 'c', ...
- Probeer je code in een logische volgorde te gieten.
- Gebruik enkel globale variabelen (bovenaan je file) voor de algemene datastructuren. Gebruik andere variabelen enkel lokaal.
- Documenteer niet-triviale dingen: speciale berekeningen die niet direct duidelijk zijn.
Programmatorische complexiteit (dit wordt besproken tijdens het tussentijdse evaluatiemoment)
Creativiteit in het creeren en toevoegen van parameters
Voortgang: toon dat je je een programmeertaal kan eigen maken en de problemen oplossen om tot een resultaat te komen
Nuttige Python-technologie
- Lighting:
Er bestaan drie lichtbronnen in VPython: 'Ambient Light', 'Distant Light' en 'Local Light'. 'Ambient Light' zorgt voor een constant egaal licht, maar kan niet het gevoel van 3D geven. 'Distant Light' zorgt voor een lichtbron dat op oneindig staat en alle objecten vanuit dezelfde richting belicht. 'Local Light' zorgt voor een lokale lichtbron waarbij belichting voor de objecten plaatsafhankelijk is.
Je kan 'Ambient Light' veranderen van intensiteit en kleur volgens:
scene.ambient = color.gray(0.2)
'Local Light' en 'Distant Light' moet eerst aangemaakt worden volgens:
distant_light_1 = distant_light(direction=(x, y, z),color=color.gray(0.8))
local_light_1 = local_light(pos=(x,y,z), color=color.yellow)
Erna kunnen deze dan toegevoegd worden aan de scene met:
scene.lights = [distant_light_1, local_light_1]
- Extrusions:
Met behulp van 'Extrusions' kan men op een erg simpele manier complexe geometrische structuren aanmaken. Een 'Extrusion' bestaat uit twee elementen. Ten eerste heb je een 2D 'Shape' nodig en vervolgens een 3D 'Path'. De 'Shape' wordt dan volgens het 'Path' uitgerokken. Je kan zelf een 'Shape' aanmaken met
shape_1 = Polygon( [(-2,0), (0,4), (2,0)] )
ofwel gebruik je een vooraf gedefinieerde 'Shape' uit de 'Shapes' library. Merk op dat deze definitie plaatsvindt in een fictieve 2D ruimte en de x en y coordinaten not noodzakelijk overéénkomen. Erna moet een 'Path' aangemaakt worden waarlangs de 'Shape' kan uitgerokken worden:
path_1 = [(0,0,0),(0,0,-4)]
Opnieuw kan er ook een pre-gedefinieerde 'Path' geladen worden uit de 'Paths' library. De extrusion wordt dan opgebouwd volgens:
prism = extrusion(pos=path_1, shape=shape_1,color=color.yellow)
|
|