|
| Forslag til løsning? Fra : Klaus Petersen |
Dato : 22-01-03 16:56 |
|
Hej NG.
Jeg skal bruge et sæt algoritmer til at bevæge et stykke grafik over skærmen
fra et sæt koordinater til et andet.
- Retningen på bevægelsen skal være liniær, og har et givent antal trin,
opløsning, "snapshots", frames, samples eller hvad i nu bruger til at
betegne det.
- Når bevægelsens distance mellem hvert trin er ens i alle trin, er det let
nok. Men det komplicerer sagen når bevægelsen skal indeholde en accelration,
en maks hastighed og en deaccelration.
Med andre ord, grafikken starter på koordinat x,y, accelrerer til en given
makshastighed, hvorefter den deaccelrerer igen og ender på koordinat _x, _y.
Hvordan kunne man løse dette?
Findes der f.eks. en matematisk kurve, som følger det mønster?
Og så håber jeg ellers at min forklaring er tilstrækkelig - ellers må i jo
lige spørge.
Klaus.
| |
Jesper Sørensen (22-01-2003)
| Kommentar Fra : Jesper Sørensen |
Dato : 22-01-03 17:16 |
|
En parabel har den ønskede egenskab.
mvh
JS
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:b0metp$56h$1@sunsite.dk...
> Hej NG.
>
> Jeg skal bruge et sæt algoritmer til at bevæge et stykke grafik over
skærmen
> fra et sæt koordinater til et andet.
>
> - Retningen på bevægelsen skal være liniær, og har et givent antal trin,
> opløsning, "snapshots", frames, samples eller hvad i nu bruger til at
> betegne det.
>
> - Når bevægelsens distance mellem hvert trin er ens i alle trin, er det
let
> nok. Men det komplicerer sagen når bevægelsen skal indeholde en
accelration,
> en maks hastighed og en deaccelration.
>
> Med andre ord, grafikken starter på koordinat x,y, accelrerer til en given
> makshastighed, hvorefter den deaccelrerer igen og ender på koordinat _x,
_y.
>
> Hvordan kunne man løse dette?
> Findes der f.eks. en matematisk kurve, som følger det mønster?
>
> Og så håber jeg ellers at min forklaring er tilstrækkelig - ellers må i jo
> lige spørge.
>
> Klaus.
>
>
| |
Lasse Reichstein Nie~ (22-01-2003)
| Kommentar Fra : Lasse Reichstein Nie~ |
Dato : 22-01-03 18:22 |
|
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> writes:
> Med andre ord, grafikken starter på koordinat x,y, accelrerer til en given
> makshastighed, hvorefter den deaccelrerer igen og ender på koordinat _x, _y.
>
> Hvordan kunne man løse dette?
> Findes der f.eks. en matematisk kurve, som følger det mønster?
Utvivlsomt. Du vil lade x og y koordinaterne have samme acceleration,
så det er nok med en funktion der giver et tal mellem 0 og 1, og som
skifter langsomst i enderne. Altså noget i stil med grafen:
punkt på kurve
^
1| xxx
| xxx
| xx
| xx
| x
| x
| x
| x
| x
| x
| x
| x
| x
| x
| xx
| xx
| xxx
|xxx
0+-----------------------------> t (tid)
0 1
Det ligner umiddelbart en 0.5-cos(t*PI)/2
(eller sin(t*PI/2)^2, det er det samme)
Hvis den funktion hedder f, så kan du finde koordinaterne som
var p = f(t)
var x = x_fra*(1-p) + x_til*p
var y = y_fra*(1-p) + y_til*p
hvor t går fra 0 til 1.
(eller, lige som den lineære, blot bruger man f(t) i stedet for t)
Hvis det ikke går accelererer hurtigt nok, så kan du bruge p=f(f(t)).
> Og så håber jeg ellers at min forklaring er tilstrækkelig - ellers må i jo
> lige spørge.
Det gav fint mening :)
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'
| |
Henning Makholm (22-01-2003)
| Kommentar Fra : Henning Makholm |
Dato : 22-01-03 22:59 |
|
Scripsit Lasse Reichstein Nielsen <lrn@hotpop.com>
> så det er nok med en funktion der giver et tal mellem 0 og 1, og som
> skifter langsomst i enderne. Altså noget i stil med grafen:
[billede]
> Det ligner umiddelbart en 0.5-cos(t*PI)/2
> (eller sin(t*PI/2)^2, det er det samme)
Eller også kan man bruge 3t²-2t³ som også er pæn og symmetrisk, men nok
hurtigere at udregne.
> Hvis det ikke går accelererer hurtigt nok, så kan du bruge p=f(f(t)).
Det vil nok bare gøre bevægelsen mere ujævn. Jeg ville bare lade t
vokse hurtigere.
--
Henning Makholm "De kan rejse hid og did i verden nok så flot
Og er helt fortrolig med alverdens militær"
| |
|
|