Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Ahoj, řeším do školy příklad, v podstatě vůbec nevím oč tam jde...
Jde o to, že dělám program, ve kterém mám 2 body.
Střelec a cíl.
Střelec a cíl má pozici X, Y a výšku(v m) ve které se nachází.
Střelec střílí na cíl.
Výstřel probíhá následovně:
Zadám:
– azimut (ve stupních)
– elevaci (ve stupních)
– počáteční rychlost střely (v m/s).
Mám za úkol vypočítat body trajektorie (na střelu působí vítr).
Řešení úkolu má probíhat takhle:
Může mi někdo poradit co s tím, vůbec nevím co tam s tím dělat...
Děkuji všem za rady.
Offline
Opakovane se dosazute do tech rovnic
pokus o pseudokod
t=0 v(0)=... x(0)= ... delta_t=0.01 for t in (0,tmax) t=t+delta_t v(t+delta_t)= .... x(t+delta_t)=x(t)+delat_t*v(t) plot (x(t))
Offline
↑ kaja.marik:
Ahoj Kájo, děkuji za pomoc, mám k dispozici kód z matlabu (to jsem měl asi vložit do dotazu), bohužel mu vůbec nerozumím.
http://forum.matweb.cz/viewtopic.ph … 21#p510321
Nechápu jak může být počáteční rychlost, rychlost větru,atd. definovaná jako vektor
v0 = [100, 0, 100];
Offline
Rychlost (pocatecni i jakokoliv jina) ma nejakou x-ovou, y-ovou a z-ovou komponentu. tj. je to vektor. Stejne tak rychlost vetru. Kdyz to hodne fouka, je rozdil, jestli jdu proti vetru nebo s vetrem v zadech.
Offline
↑ kaja.marik:
Ahoj Kájo.
Děkuji, chápu to, mohl bys mi ještě prosím poradit s následujícím?:
Zadám úhly azimut[°], elevaci[°] a počáteční rychlost střely (v m/s).
– azimut (ve stupních, 0 = východ, 90 = sever, –90 = jih, 180 = západ),
– elevaci (ve stupních, 0 = vodorovně, 90 = svisle),
Jakým způsobem tyto tři hodnoty přepočítám na vektory, abych s nima mohl dále pracovat ve svém kódu?
Takhle vypadá moje inicializace vektorů pře začátkem výpočtu:
// doba simulace [s] float T = 30; // casovy krok simulace [s] float deltaT = 0.01f; //rychlost vetru [m/s] Vector3 vw = new Vector3(0, 10, 0); //gravitacni zrychleni [m/s^2] Vector3 g = new Vector3(0, 0, -10); //pocatecni rychlost [m/s] Vector3 vx = new Vector3(100, 0, 100); //odpor naboje ve vzduchu [1/s] float c = 0.05f; //pocatecni poloha [m] Vector3 px = new Vector3(0, 0, 0);
Vstupní úhly mají nějaký vliv na počáteční rychlost, je to tak? Ale jaký?
EDIT:
Tedy podle mého uvážení, se změní pouze počáteční rychlost. Ale, jak?
Offline
Nejak takto:
v(0)=(v*cos(elevace)*cos(azimut),v*cos(elevace)*sin(azimut),v*sin(elevace))
Offline
↑ kaja.marik:
Děkuji za odpověď, to vypadá rozumně.
Jednotky (stupeň a m/s) řešit nemusím?
(vše počítám v m/s a stupních)
Offline
Ahoj, tak jsem to implementoval a jak si to nefunguje :(
Podle mě je problém ve vstupu, tedy ve výpočtu první souřadnice.
Při vstupu :
Azimut: 90.0[°]
Elevace: 50.0[°]
Speed: 100.0[m/s]
Jsou vypočtené hodnoty: http://pastebin.com/0bjqcMDF
(první sloupec je čas simulace).
Počátek je v [x=70,y=83].
Předpokládal bych že při zadání Azimutu poletí střela kolmo (pro X,Y). Elevace značně ovlivňuje směr letu.
Vítr jsem zadal nulový.
Mohl bys mi prosím ještě poradit?
Algoritmus počítá správně, měl jsem testovací data, na který jsem to porovnával (přímo od vyučujícího).
Vidím to na chybu ve vstupu v
v(0)=(v*cos(elevace)*cos(azimut),v*cos(elevace)*sin(azimut),v*sin(elevace))
Offline
Me to leti na sever. Presne podle azimutu. Viz odkaz https://sagecell.sagemath.org/?z=eJxdjt … ;lang=sage
t=0 elevace=50 azimut=90 elevace=elevace*pi/180 azimut=azimut*pi/180 v=100 v=vector([v*cos(elevace)*cos(azimut),v*cos(elevace)*sin(azimut),v*sin(elevace)]) x=vector([70,83,0]) delta_t=0.01 for i in range(0,10): t=t+delta_t x=n(x+v*delta_t) v=n(v+vector([0,0,-1])*10-v*0.05*delta_t) print (t,x,v)
Language: (0.0100000000000000, (70.0000000000000, 83.6427876096865, 0.766044443118978), (0.000000000000000, 64.2466215881696, 66.5661420897419)) (0.0200000000000000, (70.0000000000000, 84.2852538255682, 1.43170586401640), (0.000000000000000, 64.2144982773755, 56.5328590186970)) (0.0300000000000000, (70.0000000000000, 84.9273988083420, 1.99703445420337), (0.000000000000000, 64.1823910282368, 46.5045925891876)) (0.0400000000000000, (70.0000000000000, 85.5692227186244, 2.46208038009524), (0.000000000000000, 64.1502998327227, 36.4813402928930)) (0.0500000000000000, (70.0000000000000, 86.2107257169516, 2.82689378302417), (0.000000000000000, 64.1182246828064, 26.4630996227466)) (0.0600000000000000, (70.0000000000000, 86.8519079637797, 3.09152477925164), (0.000000000000000, 64.0861655704650, 16.4498680729352)) (0.0700000000000000, (70.0000000000000, 87.4927696194843, 3.25602345998099), (0.000000000000000, 64.0541224876797, 6.44164313889876)) (0.0800000000000000, (70.0000000000000, 88.1333108443611, 3.32043989136998), (0.000000000000000, 64.0220954264359, -3.56157768267069)) (0.0900000000000000, (70.0000000000000, 88.7735317986255, 3.28482411454327), (0.000000000000000, 63.9900843787227, -13.5597968938294)) (0.100000000000000, (70.0000000000000, 89.4134326424127, 3.14922614560498), (0.000000000000000, 63.9580893365333, -23.5530169953824))
Offline
↑ kaja.marik:
Ahoj, vypadá to, že mi to začalo fungovat taky, ani nevím proč. Zkusil jsem to přepsat znovu a najednou jde. Asi jsem měl nějaký překlep v kódu. Nevím.
Tak tedy děkuji za pomoc.
Ušetřil jsi mi spousty nervů
Offline
S vetrem?
t=0 elevace=50 azimut=90 azimut_vetru=225 rychlost_vetru=80 b=0.05 elevace=elevace*pi/180 azimut=azimut*pi/180 azimut_vetru=azimut_vetru*pi/180 v=100 v=vector([v*cos(elevace)*cos(azimut),v*cos(elevace)*sin(azimut),v*sin(elevace)]) vw=vector([rychlost_vetru*cos(azimut_vetru),rychlost_vetru*sin(azimut_vetru),0]) x=vector([70,83,0]) delta_t=0.01 for i in range(0,10): t=t+delta_t x=n(x+v*delta_t) v=n(v+vector([0,0,-1])*10+(vw-v)*b*delta_t) print (t,x,v)
Offline
↑ kaja.marik:
Děkuji kájo, opravdu to funguje, implementoval jsem to v programu a trajektorie střely vypadají reálně.
Ještě bych se zeptal (tedy spíš ujistil).
Počátek střely (vektor x) má souřadnici Z (tedy výšku), řekněme 500.
Algoritmus se tedy pak změní jen při definici výšky vektoru X z
x=vector([70,83,0])
na
x=vector([70,83,500])
? Děkuji
Offline
Ahoj,
tak jsem vše dal pomocí vašich odpovědí do kupy. Nyní je vše funkční a postup, který jste doporučily funguje.
Děkuji za pomoc.
Offline
Čaute,
jak pracovali s větrem? Vítr má být třírozměrný vektor, tak že jste generovali všechny 3 složky nebo jste foukali pouze rovně beze sklonu?
Offline
foukali rovne ...
Offline
Stránky: 1