Desse datasystemane er jammen kompliserte, la oss leke med dei!

Tenk deg det at vi kan f? lys til ? gj?re som vi vil! Du som blar i denne bloggen for eksempel: R?rer du ved tastaturet for ? bla ned, ja da ?ker du lysstyrken en plass p? skjermen og kanskje senker den en annen plass. P? samme m?te kan vi vri virkeligheten s?nn som vi vil med kode! Her vil du lese litt om metodene vi bruker, ikke bli bekymret om du ikke forst?r!

Bildet kan inneholde: datamaskin, data-tastatur, personlig datamaskin, perifer, inndataenhet.

Abstrakt tegning av kode.

Et ganske ?yeblikkelig problem oppsto jo n?r vi skulle kj?re simuleringen v?r. Partiklene fortsatte i alle retninger for alltid! Boksen v?r utvidet seg og ble bare st?rre og st?rre! Partikler er dumme, vi m?tte jo selvf?lgelig fortelle dem at de opplever et ellastisk st?t med veggen. Vi pr?vde f?rst ? sjekke alle partiklene for ? se om de traff "veggene" for s? endre fortegn til hastigheten til den komponenten som var vinkelrett p? veggene. Du husker at vi definerte ellastisk st?t som ingen energi tapt til omgivelsene? Det er derfor vi bare kan "snu" hastigheten til partikkelen. Viste seg at det tok enormt lang tid! Etter iherdig leting fant vi en funksjon som finner alle OG endrer hastighetene p? ett blunk! Denne heter "numpy.where" og m?ten den fungere p? er at den sjekker om x-, y- eller z-posisjonene er rundt 0 eller L. Om det stemmer s? endrer den fortegnet til den respektive hastighetskomponenten. Du kan se for deg "numpy.where" som en pirat som alltid f?lger med og skyter deg p? rett kurs som illustrert i figur 2.

Bildet kan inneholde: produkt, svart, organisme, skr?ningen, gj?re.
Figur 2: Her ser vi numpy.where som alltid f?lger med ved vegg \(x = L,\quad z = L\).

Endelig! Boksen v?r er full av bevegelige partikler! Da kan vi begynne med ? lage et hull slik at boksen v?r kan f? en drivkraft i retning oppover. Vi setter at z-aksen er positiv oppover og definerer et hull i bunnen av boksen (alts? i x-, y-planet). Partiklene er skikkelig dumme, de aner ikke hvor de er eller hvorfor. De bare flyr rundt. Det vil vi ogs? at de skal gj?re! Fordi, for ? slippe og kompensere for partikler som g?r ut av boksen med nye s? registrerer vi bare de som befinner seg innenfor "hullet". Vanskelig og se for seg, men la oss vise deg i figur 3. En uvitende partikkel (oransje) havner i omr?det hvor vi har definert et hull! Hva er kriteriene for hullet?, sp?rr du. Vel:

  1. x-posisjonen m? v?re st?rre enn "low" og mindre enn "high". Det vil si at vi kan skrive betingelsen som: \(low \leq x \leq high\).
  2. y-posisjonen m? ogs? v?re st?rre enn "low" og mindre enn "high". Vi kan ogs? skrive det om p? formen: \(low \leq y \leq high\).
  3. z-posisjonen til partikkelen m? v?re mindre eller lik 0. Som kan skrives som \(z \leq 0\)
    Bildet kan inneholde: rektangel, skr?ningen, triangel, gj?re, linje.
    Figur 3: Detaljert tegning av hullet som vi implementerer.

     

Den opplever et ellastisk st?t med "veggen" og fortsetter videre. MEN, f?r den f?r oppleve st?tet lagrer vi partikkelen sin kontaktinformasjon og hastighet i z-retning uten samtykke. Deretter forteller vi partikkelen at den opplever et ellastisk st?t. Dette gj?r vi for hver partikkel som oppfyller alle kriteriene for hullet og finner dermed alle som "forlater" boksen p? et gitt tidsintervall. Finne ut en m?te ? sjekke alle kriteriene samtidig p?, var vrient. Det f?rste som slo oss var ? bruke "numpy.where", men den tar bare to argumenter! Vi har jo tre... Etter litt om og men, mye kaffe, litt sm?godt og s?vn. Kom vi over en annen metode fra samme pakke kalt "numpy.logical_and". Den klarer b?de flere argumenter OG returnerer kun noe som heter "booleanske" verdier. I korte trekk er det "True" eller "False". Slik som en datamaskin opererer vet du, 0 og 1! Dette gjorde at argumentene v?re kunne bli evaluert mye raskere og finere enn med "numpy.where". Hvis alle kriteriene er oppfylt, er partikkelen godkjent og telt som en av de som har forlatt boksen. Slik som vist i figur 4.

Figur 4: Her sitter numpy.logical_and og manuelt sjekker alle partiklene med scanner.

Spennende! Ta meg videre:D

Publisert 13. sep. 2021 22:08 - Sist endret 13. sep. 2021 22:08