blender3d.cz http://forum.blender3d.cz/ |
|
Nelineárny harmonický oscilátor http://forum.blender3d.cz/viewtopic.php?f=11&t=8604 |
Stránka 1 z 1 |
Autor: | Kapo [ sob kvě 05, 2012 11:25 am ] |
Předmět příspěvku: | Nelineárny harmonický oscilátor |
Snažím sa spraviť si vlastný, nelineárny (konkrétne tento je vzhľadom na duplicitu členu "(length-l0)", kvadratický) harmonický oscilátor. Môj script vyzerá takto: import bge scene = bge.logic.getCurrentScene() cont = bge.logic.getCurrentController() own = cont.owner context = scene.getRenderingContext() Obj2 = scene.objects[own['target']] length = own.getDistanceTo(Obj2) l0 = own['l0'] k = own['k'] dt = 1/context.fps x = own.getPosition(x) - own['target'].getPosition(x) y = own.getPosition(y) - own['target'].getPosition(y) z = own.getPosition(z) - own['target'].getPosition(z) vx = dt*(x/length)*k*(length-l0)*(length-l0) vy = dt*(y/length)*k*(length-l0)*(length-l0) vz = dt*(z/length)*k*(length-l0)*(length-l0) Motion1 = own.actuators['Motion'] Motion1.linV = [vx,vy,vz] Na objekte, kde je prilinkovaný script je gameproperty l0 (dĺžka, keď je oscilátor v rovnováhe), k (tuhosť, konštanta úmernosti) a target (string, ukazujúci na objekt, ktorý tvorí druhú stranu pržiny). Zatiaľ fungovali tie šamaniny s own['target'], dĺžku mi to pekne vypisovalo, no prišiel problém. V bge som nenašiel nič ako set acceleration, takže to musím robiť cez zmenu rýchlosti, resp. nastavovať rýchlosť, ako malú pribudnuvšiu plochu pod pomysleným grafom zrýchlenia. Takže potrebujeme niečo, ako dt. Dt sa ľahko zistí z fps, as long as fps je vlastne s na mínus prvú, teda naše dt bude 1/fps. To je super, no konzola má očividne problém s "context = scene.getRenderingContext()", neviem prečo. Ďalej potrebujeme vektor rýchlosti, no aby sme vedeli, kam mieri, treba zistiť relatívnu pozíciu (rozdiel absolútnych pozícii) oboch koncov pružiny. Teda ono getPosition, napríklad, nefunguje. Neviem prečo. Ďalší problém bol, že som skúšal ešte naneostro objektu cez tento motion priradiť nejakú rýchlosť, konzola nič nehlásila (je prístup own.linV = ... správny?), no ani s objektami sa nič nedialo, proste len spadli. No a posledný problém bol, že script nejako nepoberá zápis Motion1.linV = Motion1.linV + [vx, vy, vz], frfle na dačo s vektorovým súčtom, vraj to robím zle. Googlil som, čo to dalo, no nejako sa mi zdá, že je tej dokumentácie k python+blender nejako málo. Poradil by mi niekto, ako ten kód spraviť lepšie? Nemá poprípade bge v sebe nelineárny harmonický oscilátor podľa funkcie m*a = -F(x)? Za prípadnú pomoc vopred ďakujem. Braňo |
Autor: | Kapo [ čtv kvě 10, 2012 2:47 pm ] |
Předmět příspěvku: | Re: Nelineárny harmonický oscilátor |
To fakt nikto nevie? |
Autor: | jucas [ pon kvě 14, 2012 12:10 am ] |
Předmět příspěvku: | Re: Nelineárny harmonický oscilátor |
Řekl bych, že přístup do dat renderingu zajišťuje modul bpy, ne bge. Krom toho, pokud se jedná o verzi 2.5+, tak je oproti 2.4 jiné api pro přístup do databloků Blenderu (modul bpy). Podívej se do dokumentace api. Sčítání vektorů: buď je vektor reprezentován jako seznam [], a pak nejde takhle sčítat - objekt seznamu o vektorech nic neví, operátor + je pro seznamy přetížený na metodu extend. Součet se dá udělat třeba takhle c=[i+j for i,j in zip (a,b)]. Nebo jde o objekt Vector z modulu mathutils, který jde sčítat, ale musí se správně deklarovat v=v+Vector((1,2,3)). Jak je to konkrétně u actuators řešené je v dokumentaci bge. |
Autor: | Kapo [ pon kvě 21, 2012 12:21 am ] |
Předmět příspěvku: | Re: Nelineárny harmonický oscilátor |
No modul bpy vraj nepozna rendering context. modul bpy nepozna ani logic Druha vec, na vektory sa pozriem, dakujem Tretia vec, stale neviem, ako sa pristupuje k rychlosti objektu, ked mu priradim rychlost, nic sa nedeje, ani konzola nic nehlasi...(own.linV) |
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |