Právě je čtv bře 28, 2024 3:36 pm

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 
Autor Zpráva
 Předmět příspěvku: Nelineárny harmonický oscilátor
PříspěvekNapsal: sob kvě 05, 2012 11:25 am 
Offline
..........
..........
Uživatelský avatar

Registrován: pon úno 04, 2008 7:03 pm
Příspěvky: 1624
Bydliště: Bratislava
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


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Nelineárny harmonický oscilátor
PříspěvekNapsal: čtv kvě 10, 2012 2:47 pm 
Offline
..........
..........
Uživatelský avatar

Registrován: pon úno 04, 2008 7:03 pm
Příspěvky: 1624
Bydliště: Bratislava
To fakt nikto nevie?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Nelineárny harmonický oscilátor
PříspěvekNapsal: pon kvě 14, 2012 12:10 am 
Offline
 ...
 ...

Registrován: pon bře 12, 2007 2:46 pm
Příspěvky: 172
Bydliště: Brno a okolí
Ř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.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Nelineárny harmonický oscilátor
PříspěvekNapsal: pon kvě 21, 2012 12:21 am 
Offline
..........
..........
Uživatelský avatar

Registrován: pon úno 04, 2008 7:03 pm
Příspěvky: 1624
Bydliště: Bratislava
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)


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 6 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz