« 1 2 3 »
Autor Zpráva
Radovan789
Profil *
Mám tento kód:

var car_speed = 0;
var car_max_speed = 4;
var car_fps = 1000;

for (var i = 0; i<=car_fps; i++) {
var speed = Math.round((car_max_speed*(i/car_fps)*100))/100;
setTimeout("change_speed("+speed+")", Math.sqrt(i*car_fps));
}
}


Soustřeďmě se jen na čas u settimeout, tedy Math.sqrt(i*car_fps) . Tento kód nám spůsobí že pohyb bude pomalu zrychlovat.

Jenže až cyklování skončí tak se to zastaví na speed = 4. Já bych potřeboval upravit Math.sqrt(i*car_fps) tak aby ze začátku pomalu zrychlovala a ke konci spomalovala. Takže bych chtěl poradit se sestrojením vzorce.

Předem děkuji za odpoveďi.
Radovan789
Profil *
Abych to upřesnil:



V toto chvílí to funguje podobně jak OBR 1, a já bych potřeboval to udělat tak aby to fungovalo jak OBR 2.
_es
Profil
Radovan789:
Matematiku (fyziku) snáď v škole nemáš?
Vôbec sa mi nechce vymýšľať a domýšľať ako ti ten divný kód funguje.
Tak tú rýchlosť najprv na začiatku zvyšuj, potom nejaký čas nemeň a potom znižuj, v čom je problém?

Funkcie setTimeout používaš nedoporučovaným spôsobom.

Abych to upřesnil:
Tým si nič neupresnil, čo je na osi x a čo na osi y? Aká to je funkcia?
Radovan789
Profil *
Tým si nič neupresnil, čo je na osi x a čo na osi y? Aká to je funkcia?
Na ose X je čas a na ose Y rychlost. Funkce je: odmocnina z (čas * maximalni_rychlost), podle toho funguje OBR 1.

Tak tú rýchlosť najprv na začiatku zvyšuj, potom nejaký čas nemeň a potom znižuj, v čom je problém?
Problém je asi vtom že nevím jak, asi ti to víc páli když tě to hned napadne, tak by ses semnou mohl podělit.

Matematiku (fyziku) snáď v škole nemáš?
Ale jo, jenže tam sme ještě sinusoidu nedělaly. (teda pokud je potřeba)
_es
Profil
Radovan789:
No tak si to rozdeľ na dve časti a pre každú daj inú funkciu.
To je dosť ťažko radiť niekomu s takými medzerami v základných veciach.
Radovan789
Profil *
No tak si to rozdeľ na dve časti a pre každú daj inú funkciu.
To mě taky napadlo, dokonce jsem to udělal a začal jsem experimentovat. Jenže pořád mě ta druhá funkce nevychází.

To je dosť ťažko radiť niekomu s takými medzerami v základných veciach.
Za pokus to stojí.
Darker
Profil
Radovan789:
sinusoidu nedělaly nedělali.
To neni sinusoida. Tady máš sinusoidu.

V určité chvíli začni snižovat hodnotu, která se přidává k rychlosti. Tu bys měl mít jako proměnnou.
Radovan789
Profil *
Darker:
Jestli se nepletu tak je to část sinusoidy, a na ty jednotloví části existují funkce (vzorce). Jenom ten jeden vzoreček kterej potřebuju bych potřeboval, vím že to patří spíš do matematického fóra ale pokud by mi pomohl někdo tady tak bych byl rád.
Darker
Profil
Pleteš se.
yFang
Profil
Radovan789:
Předpokládám že potřebuješ:
f: y = sin(x - π/2) +1

V definičním oboru
<0;π>
Darker
Profil
yFang:
Jeho funkce byla víc prohnutá. Funkce sinus pokud vím nikdy není prohnutá dovnitř. (pro matematiky: nikdy není konvexní a zároveň stoupající. A míním tu prostou funkci sinus.)
Keeehi
Profil
Darker:
A v intervalu <3π/2;2π>?
_es
Profil
Darker:
Jeho funkce byla víc prohnutá
Ale v hrubých rysoch to sedí.
Radovanovi789 asi ani nejde o sínusoidu, ale skôr o požiadavku: napíšte mi rovnicu, nejakej, hocijakej, funkcie, ktorej graf som si nakreslil na papier.

nikdy není konvexní a zároveň stoupající. A míním tu prostou funkci sinus.
Ale je, napríklad v intervale (-π/2; 0).
yFang
Profil
Darker:
Bral jsem to jako náčrt goniometrické funkce, jejíž graf potřebuje.
Ta funkce co jsem napsal vypadá takhle:
Radovan789
Profil *
yFang:
Děkuji za upřesnění mého požadavku.

V definičním oboru <0;π>
y = <0;π> nebo x = <0;π> ?
Radovan789
Profil *
Ale podle toho grafu to asi bude x = <0;π>
yFang
Profil
Radovan789:
x ∈ <0;π>
Radovan789
Profil *
Momentálně to časování vypadá takhle:

(Math.sin(Math.PI*(i/1000) - Math.PI/2) +1)*1000

i = <0; 1000> (cykluje se)

Pořád ten konec není spomalující se.

Příklady:

i = 0
výsledek = 0;

i = 125
výsledek = 76.120;

i = 250
výsledek = 292.893;

i = 500
výsledek = 1000;

i = 750
výsledek = 1707.107;

i = 875
výsledek = 1923.879;

i = 1000
výsledek = 2000;

Podle mezivýpočtů by to mělo fungovat jak chci, ale v reálu to pořád vůbec není plynulé.
Radovan789
Profil *
Možná jsem zjstil problém, za začátku je to rychlé, uprostřed nejpomalejší, a ke konci zase rychlé. Správně by mělo být ze začátku pomalé, uprostřed nejrychlejší, nakonci pomalé.
yFang
Profil
Radovan789:
Hele a co se snažíš udělat? Co by mělo být rychlé/pomalé?
Radovan789
Profil *
yFang:
Rovnoměrný akcelerační pohyb autíčka z plynulým startem a koncem.
(Math.sin(Math.PI*(i/1000) - Math.PI/2) +1)*1000 slouží k výpočtu času kdy se aktivuje settimeout.
Radovan789
Profil *
Radši uvedu živou ukázku:
http://raceon.4fan.cz/racer/index.htm

Bez ní by se nic nevyřešilo.
Radovan789
Profil *
Pro aktivaci autíčka zmáčkněte šipku dopředu.
_es
Profil
Radovan789:
Rovnoměrný akcelerační pohyb autíčka z plynulým startem a koncem.
To by mala byť snáď rýchlosť na konci nulová a nie podľa toho grafu, čo si načmáral.
Asi nejde v tých grafoch o rýchlosť ale o dráhu, či nie?
Skús si niekde pozrieť čo je rýchlosť a zrýchlenie a ako sa z nich ráta dráha v závislosti od času, v tom skripte to dobre určite nemáš.
Radovan789
Profil *
_es:
rychlost je dráha za určitý čas.
Vtom scriptě se nahoře ukazuje rychlost, od 0 do 4, alespoň by to tak být mělo.
_es
Profil
Radovan789:
rychlost je dráha za určitý čas.
Áno, a z tej rýchlosti a z času v tom skripte zle rátaš celkovú dráhu.
V tej tvojej definícii ide o priemernú rýchlosť.
Radovan789
Profil *
Jo jenže už vtom mám velký zamtek, možná jsem se pustil do něčeho na co nemám ale až bude řešení správné tak to na pochopení nebude problém. Vůbec netuším co bych tam měl teďka upravovat.
yFang
Profil
Radovan789:
Abych to shrnul, jde ti o to, aby auto plynule zrychlilo a plynule zpomalilo?
Radovan789
Profil *
yFang:
Ano, přesně tak.
Radovan789
Profil *
yFang:
Vlastně ne, chci aby plynule zrychlylo a pak mělo stálou rychlost (4 jednotky) ale aby to bylo plynulé.
« 1 2 3 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0