alvoren i aktion

, tyngdekraft i aktion,,,,, andel,,,,,,,, 5,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie, ringede du? euclidean vektorer i flashhit målet med en dødelig målsøgende missil, undersøgelse af kræfter er af central interesse i dynamik, en undersøgelse af årsagerne til forslag og ændringer i bevægelse., tyngdekraft, er et eksempel. det er det, der forårsager satellitter centreret omkring planeter og at blive på jorden.i denne forelæsning, vi vil bygge en simulering af dette fænomen og være i stand til at overholde, forsøg og lege med partikler på stedet.,,, sup (skriftstørrelse: 60%; lodret linje: top;} afrika (skriftstørrelse: 60%; lodret linje: bunden.}, blandt alle partikler, der opstår, en af de vigtigste partikel vil tiltrække andre.da disse partikler i retning af de vigtigste brugere kan klik på det primære partikler til at trække den, at disse partikler til at omdirigere deres kurs.disse partikler vil stoppe, som de kolliderer med kanten af vigtigste bold, men de vil ikke overlapper hinanden.strukturen i denne lektion er udformet på en måde, hvor en kort teori i fysik i leveret før om gennemførelsen af simulationen.nyd det!,, endelige resultat forpremiere, lad os tage et kig på det endelige resultat, vi arbejder hen imod:,, klik og trække de store grønne cirkel til at bevæge sig rundt, og se, hvordan den lille blå ring reagere.,, trin 1: tyngdekraft, formel, dels en fysik forord.de attraktive tyngdekraft mellem to ting kommer til udtryk gennem følgende formel:,, offentlig funktion getmagnitude(): antal (var - lengthx: antal =. _x; var langvarige: antal =. _y; tilbage matematik. sqrt (lengthx * lengthx + langvarige * langvarige)} offentlig funktion getangle(): antal (var - lengthx: antal =. _x; var langvarige: antal =. _y; tilbage matematik. atan2 (lange, lengthx)} offentlig funktion getvectordirection(): vector2d {var vectordirection: vector2d = nye vector2d (. _x /. getmagnitude(), det her. _y /. getmagnitude()); tilbage vector2d (vectordirection);} offentlig funktion minusvector (vector2: vector2d): ugyldig (. _x - = vector2.vecx; dette. _y - = vector2.vecy;} offentlig funktion addvector (vector2: vector2d): ugyldig (. _x + = vector2.vecx; dette. _y + = vector2.vecy;} offentligheden sig (scalar: antal) ugyldig (. _x * = scalar; dette. _y * = scalar.}, trin 8: ball.as tegning, bold, klasse hvis alle de interessante aktiviteter finder sted.til at begynde med vores liv, er vi nødt til at tage en bold og en række kinematik - og dynamik forbundne variabler.den funktion at drage en bold er som følger:, privat funktion henlede (radius: antal, farve: uint): ugyldig (grafik. beginfill (farve, 1); grafik. drawcircle (0, 0, radius) grafik. endfill();}, trin 9: ball.as private variabler, nævnt flere kinematik og dynamikken variabler vedrørende angives nedenfor, private var _disp: vector2d; //deplacement vektor, i forhold til oprindelsen private var _velo: vector2d; //hastighedsvektor private var _acc: vector2d; //accelerationsvektoren private var _attractive_coeff: antal = 500; private var _mass: antal;,, trin 10: ball.as indledning, som producenten af kugle - kursus hedder, grafik er trukket.en gang henledt, bolden vil blive lagt på scenen tilfældigt.vi vil også sætte private variabler.alle vektor mængder vil også blive igangsat på 0, undtagen for forskydning, som måles i forhold til oprindelse. offentlige funktion kugle (radius: antal = 20, farve: uint = 0x0000ff) {. træk (radius, farve). _mass = radius /2 //- masse er halvdelen af radius denne. x = math2. randomisebetween (0, 550). y = math2. randomisebetween (0, 400). _disp = nye vector2d (. x. y); //sæt indledende forskydning. _velo = nye vector2d (0, 0). _acc = ny vector2d (0, 0)), trin 11: ball.as beregne attraktive kraft, er vi nødt til at beregne de underliggende kraft, der gør, at vores partikler til livlig.ved du hvad, det er tyngdekraften.de fungerer under, vil hjælpe i beregningen af denne kraft.bemærker, at en fælles landbrugspolitik for acceleration, 5.den horisontale og vertikale elementer i kraft er fremstillet ved hjælp af trigonometri, informationstiltag ovenfor kan hjælpe med at forstå matematik. offentlige funktion bliver mass(): antal (tilbage _mass;} privat funktion getforceattract (m1: antal m2: antal, vec2center: vector2d): vector2d {* beregne attraktive kraft, baseret på følgende formel: * f = k * m * m2 /r * r * /var tæller: antal =. _attractive_coeff * m * m2 var fællesnævner: antal = vec2center. getmagnitude() * vec2center. getmagnitude(), var forcemagnitude: antal = tæller og nævner, var forcedirection: antal = vec2center. getangle(); //at fælles landbrugspolitik, hvis (forcemagnitude > 0) forcemagnitude = matematik. min (forcemagnitude, 5); //deriving kraftkomponent, horisontale, vertikale var forcex: antal = forcemagnitude * matematik. - (forcedirection) var forcey: antal = forcemagnitude * matematik. synd (forcedirection) var kraft: vector2d = nye vector2d (forcex, forcey); tilbage kraft;}, trin 12: ball.as beregne acceleration, når kraft vektor er blevet fremstillet, kan vi beregne den resulterende acceleration.kan du huske, f = mor,,, a = f /m. offentlige funktion getacc (vecforce: vector2d): vector2d (//om fremskyndelse af kraft var vecacc: vector2d = vecforce. sig (1 /. _mass); tilbage veccacc;}, trin 13: ball.as beregne forskydningen med acceleration beregnet, vi effektivt kan beregne den deraf følgende forskydning. huske, at tvinge beregnet faktisk er baseret på den forskydning mellem midten af kugler, privat funktion getdispto (bal: bold): vector2d {var currentvector: vector2d = nye vector2d (bal. x, bold. y); currentvector. minusvector (. _disp); tilbage currentvector;} offentlige funktion tiltrukketaf (bal: bold): ugyldig (var - tocenter: vector2d =. getdispto (bal) var currentforceattract: vector2d =. getforceattract (ball.mass, det her. _mass, tocenter). _acc =. getacc (currentforceattract). _velo. addvector (. _acc). _disp. addvector (. _velo)), punkt 14: ball.as gennemføre forskydning, så vi er i stand til at flyt bolden til den nye beliggenhed, gennem de fungerer under.bemærk, at flytning beregnes aldrig er gennemført på bolden er nuværende lokation med det samme.en sådan konstruktion er, at kontrollen foretages: kollision detektering mellem nosser. offentlige funktion setposition (vecdisp: vector2d): ugyldig (. x = matematik. runde (vecdisp. vecx); denne. y = matematik. runde (vecdisp. vecy)}, kraften er baseret på afstanden mellem centre.derfor er de kugler kan trænge igennem og fortsætte på grund af attraktive kraft er højere, når de er tættere på.vi er nødt til at nulstille acceleration og hastighed til 0, når kuglerne rører hinanden kant.men vi er nødt til at få et middel til påvisning af sammenstødet mellem to nosser.,, trin 15: ball.as kollision afsløring, kollision let kan kontrolleres.adskillelse mellem to kugler, ikke bør være mindre end summen af deres radier.her er kollision påvisning funktion: offentlig funktion collisioninto (bal: bold): boolean {var ramt: boolean = falske var mindist: antal = (ball.width +. bredde) /2; hvis (. getdispto (bal). getmagnitude() < mindist) {ramte = sandt.} tilbage -;), trin 16: ball.as beregne flytte for at afværge, normalt når kollision er blevet påvist mellem to kugler, deres stat er overlapper hinanden.vi er nødt til at sikre, at de bare vil sidde pænt på kanten og ikke overlapper hinanden.hvordan?vi kan flytte en af de bolde, væk fra de andre, men vi er nødt til at beregne den rigtige forskydning til at tilpasse sig først.her er forskydningen beregning: offentlig funktion getrepel (bal: bold): vector2d {var mindist: antal = (ball.width +. bredde) /2 //beregne afstanden til at modstå var toball: vector2d =. getdispto (bal) var directtoball: vector2d = toball. getvectordirection(); sig (directtoball. mindist); directtoball. minusvector (toball); directtoball. sig (- 1); tilbage directtoball;}, skridt 17: ball.as gennemføre forskydning til at modstå, efter at vi har beregnet den forskydning, er vi nødt til at gennemføre det.de foranstaltninger, som at afvise en af nosserne.desuden er vi nødt til at gøre et par ekstra kommandoer.husk, vi har at gøre med et dynamisk miljø.selv efter at vi har sat den forskydning af bolden til kanten, fremskyndelse af kraft og den deraf følgende hastighed vil give næring til det, der forårsager en uønsket flytning af den ind og ud.vi er nødt til at nulstille disse værdier af acceleration og hastighed nul. offentlige funktion repelledby (bal: bold): ugyldig (. _acc. reset(); dette. _velo. reset(), var repeldisp: vector2d = getrepel (bal). _disp. addvector (repeldisp)}, gå 18: ball.as livfulde endelig kan vi manipulerer (gøre vores bold, som om det var tiltrukket af hinanden.når kollision er påvist, forskydning skal tilpasses således, at det ikke vil trænge ind på kanten.dette vil ske først for, når de kolliderer med center, og derefter for de nosser, når de kolliderer med hinanden. offentlige funktion, levende (center: bold, alle: system): ugyldig (. tiltrukketaf (i midten); hvis (collisioninto (i midten)). repelledby (i midten) (var jeg: int = 0. jeg < all.length; jeg + +) (var - current_ball: bold = alle [i] som bold, hvis (collisioninto (current_ball) & amp; & amp; current_ball.name!=. navn). repelledby (current_ball)}. setposition (. _disp)}, skridt 19: main.as private variabler, videre til vores sidste klasse, main.vigtigste klasse er genereret ved projektets begyndelse.private variabler vil omfatte en bold, der tiltrækker alle de andre, og antallet af kugler i vores flash præsentation, private var mainball: bold, private var totalballs: int = 10, 20: main.as henlede nosser, skridt, for det første, vi bør sæt nosser.der vil være en stor kugle, der tiltrækker alle de andre.de andre er ved navn, så refererer til, kan let blive gjort senere. privat funktion createballs (): ugyldig (mainball = ny kugle (50, 0x00ff00). addchild (mainball) til (var - jeg: int = 0. jeg < this.totalballs; jeg + +) (var - currentball: bold = nye ball(); currentball.name = "bold" + i dette. addchild (currentball)}}, gå 21: main.as gennemføre bold interaktion, tildele begivenheder på de vigtigste bolden til at gøre det draggable når klikkede og stoppe når løsladt. privat funktion lokalitet (e: begivenhed = for ugyldig (removeeventlistener): (event.added_to_stage, lokalitet); //kontaktpunkt createballs(); mainball. addeventlistener (mouseevent.mouse_down, onmousedown) fase. addeventlistener (mouseevent.mouse_up, onmouseup); animateall();} privat funktion onmouseup e: mouseevent): ugyldig (stopdrag();} privat funktion onmousedown e: mouseevent): ugyldig (e.target. startdrag();}, skridt 22: main.as livfulde nosser, inspirerende bolde, der er ved at blive tiltrukket af de vigtigste.en enterframe tilfælde tildeles hver bold, privat funktion animateall(): ugyldig (for (var - jeg: uint = 0. jeg < totalballs; jeg + +) (//hver bold er trukket fra main_ball var current_ball: bold =. getchildbyname ("bold" + i) som bold. current_ball. addeventlistener (event.enter_frame, enterframe)}} privat funktion enterframe e: begivenhed): ugyldig (var - allobj: array = nye array(); (var - jeg: int = 0. jeg < = totalballs; jeg + +) (var - current_ball: bold =. getchildat (i), som allobj bold.. - (current_ball)} e.target. manipulerer (mainball, allobj)}, gå 23: test film, endelig, tryk ctrl + træde forpremiere på animation, konklusion, at bringe denne lektion et skridt videre, læsere kan udvide dette projekt ved implementing andre lineære styrker. under alle omstændigheder simulationer, tjene som en stor redskab i forbindelse med idéer, svært at forklare med almindelig tekst og billede i fysik klasse miljø, især når staten ændringer over tid. håber jeg, at denne lille forelæsning hjælper dig på nogen måde.- tak, det er "tak" i malaysia), for at tage sig tid til at læse og ser frem til at høre kommentarer fra mine læsere.,

Formula of attractive force
Calculate displacement to repel so that two overlapping balls are placed side by side without overlapping.
Implementing repelling displacement onto a ball



Previous:
Next Page: