Vores algoritme, ellers vores distributor, får givet en liste af partikler, og en liste af constraints.
Det første vi gør er at tildele alle partiklerne nogen tilfældige positioner i rummet, og herefter sætter vi antallet af gange vi vil køre vores eksplosionsalgoritme. Vi laver så en while-løkke, hvor vi i hvert skridt først regner gennemsnitspositionen ud. Herefter exploderer vi vores partikler væk fra det punkt. Med andre ord kan partiklerne ikke lide hinanden. Nu har vi fået partiklerne til ikke bare at ligge i en tilfældig klump omkring (0,0,0), men det er stadig ikke godt nok. Derfor er vi nødt til også at have fat i vores constraintlist. Alle vores constraints har attributer der gemmer på de to partikler de er forbundet til, og vi regner nu vectoren mellem de to partikler ud. Vi regner så længden på alle constraintvectorerne ud, og gemmer dem i en liste. Denne længde bruger vi så til at regne ud om de to partikler constrainten binder sammen er for tæt på hinanden eller for langt væk, ved hjælp af constraintens minimum- og maximum-længde. Er partiklerne for tæt på hinanden, bliver de skubbet lidt væk fra hinanden, og omvendt hvis de er for langt væk fra hinanden.
De sidste skridt hvor vi tilpasser constraintsne bliver kørt en del flere gange end selve eksplosionen, og det er fordi det er her vi tilpasser figuren.
Nu har partiklerne så fået tildelt deres positioner, og det er tid til at tegne dem. I vpython foregår det så smart som at man, i en helt almindelig pythonfil, skriver ”from visual import *”. Når det er gjort har vi tilgang til alle de funktioner vi skal bruge. Vi laver så en funktion der hedder draw, der først kører vores distributionsalgoritme, og herefter tegner partiklerne og constraintsne. Partiklerne bliver tegner som bolde, eller spheres for at blive i fagsproget, og constraints som rods, eller rør.
En af de smarte ting ved den her visualiseringsmetode, er at det også er den vi gør brug af når vi importerer vores python i c++, og derved i openengine, så ikke nok med at den gør vores designarbejde utroligt meget nemmere, så er den også med til at sikre os, at vi kan repræsentere det vi har lavet, og det er alt andet lige en hel del sjovere at se på en visualisering af vores skelet, end bare på nogen stumper kode. Til at starte med giver den os dog ikke det helt ønskede resultat, så vi er nødt til at kunne fortælle den hvilken orientering et givent led skal have, men vi får det tegnet og det ser smukt ud selvom retningen ikke altid er den ønskede. Nedenfor ses vores hængselsled tegnet ved hjælp af vpython.

lørdag, december 08, 2007
Visualisering
Når man skal opbygge led som dem vi vil lave, er det utroligt praktisk at have en visuel repræsentering af dem. Og til det formål har vi været så heldige at der findes et tool til at visualisere python, nemlig vpython. I sig selv er det ikke voldsomt svært at vise sin kode ved hjælp af vpython, men vi løber dog hurtigt ind i et problem, da det eneste vi har at tegne vores figurer efter, er partikler uden nogen position i rummet og så nogen constraints der binder disse partikler sammen. Dette gør at vi er nødt til at skrive en algoritme der tildeler partiklerne positioner.
Abonner på:
Kommentarer til indlægget (Atom)




Ingen kommentarer:
Send en kommentar