dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Tuvaakais celsh starp diviem lenkjiem
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Matemātika un fizika
View previous topic :: View next topic  
Author Message
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Nov 05, 2006 9:52 pm    Post subject: Tuvaakais celsh starp diviem lenkjiem

Vecum vecaa probleema ar diviem lenkjiem un iisaakaa celja atrashanu starp tiem. Atceros,ka kautkad paaris gadus atpakalj es to atrisinaaju diezgan vienkaarshi,bet tagad ziimeejot uz lapaam nesanaak iisti smuki.Sanaak baigi daudz if'u.Meegjinaaju googleet,bet neko iisti neatradu.

Taatad:vajadziiga kaada funkcija,kas vareetu noteikt pa kuru pusi buutu iisaak roteet no kaada lenkja,lai sasniegtu otru lenkji.Labs piemeers buutu kamera,kas seko automobilim.Ja automobilis sagriezhas ljoti aatri,tad kamera nerotees tam pakalj pa garaako celju,bet gan pa iisaako.Visi lenkji ir robezhaas [0;360).
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 05, 2006 10:08 pm    Post subject:

Ko nozīmē "ceļš" tavā jautājumā? Vai tik tu nedomāji uz kuru pusi griezties? Vai tik tu neesi problēmu par daudz noreducējis.. Tev nav dotas divas pozīcijas - vektori A un B, un skata vektors C? Un tad, esot punktā B un skatoties virzienā C, tev jāpagriežās, lai skatītos virzienā no punkta B uz punktu A? Tb jāmaina tas C vektors.

Ja tā, tad es to risinu (Skvēros spēlētāja skatienu vēršu uz bumbu) ar vektoru skalāro reizinājumu: x = C . (A-B);
Ja x > 0, tad jāgriežas uz vienu pusi, ja x < 0, tad jāgriežas uz otru pusi. Ja x=0, tad vai nu tu jau skaties uz A punktu, vai arī skaties uz gluži otru pusi (tad griezties ir vienalga uz kuru pusi). To vai skatās uz otru pusi var apēķināt ar vektoriālā reizinājuma palīdzību, tik tur jāzin kādās dimensijās tev tas notiek. Bet vispārīgi runājot - jāpaņem vektoriālā reizinājuma vienas komponentes zīme, unt ad <0 skatās uz A, >0 skatās prom no A.

Tā apmēram.

Edit:
nu ja doti tiešām leņķi, tad jau var to pārveidot uz šo vektoru risinājumu: B=(0,0) A=(cos(alfa), sin(alfa)), C=(cos(beta), sin(beta)). Un reku ir tavi divi leņķi - alfa un beta.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Nov 05, 2006 10:15 pm    Post subject:

Nee nee probleema irdaudz vienkaarshaaka.Ok,es nedaudz nesaprotami uzrakstiju.

Ir doti divi lenkji-A un B.Lenkjis B ir jaasamazina/jaapalielina tik ilgi kameer B=A.Man ir jaadabuu tas,vai lenkjis ir jaasamazina vai jaapalielina(t.i. uz kuru pusi roteet)-jaadabuu iisaakais celsh.Bet sanaak kaudze ar if'iem,kameer vis straadaa vienkaarshi nepareizi.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Sun Nov 05, 2006 10:31 pm    Post subject:

Pag, es neesmu sapratis problēmu vai arī bubu risinājumu?
a.b = |a|*|b|*cos(alpha) ;
dot > 0 ja leņķis starp vektoriem < pi/2 , un dot < 0 ja leņķis > pi/2. Absolūto virzienu, kurā griezties, tā nenoteikt...

ja runa iet par leņķiem, tad varbūt:
Code:

if( A > B ) {
    if( A - B < 180 ) {
        //++B;
    } else {
        //--B;
    }
} else if( A < B ) {
    if( B - A < 180 ) {
        //--B;
    } else {
        //++B;
    }
}


šitam laikam būtu jāstrādā, vismaz pretpiemēru uzreiz nemāku atrast...
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Nov 05, 2006 10:34 pm    Post subject:

Nu ok.Palikshu pie risinaajuma ar 4 if'iem(tieshi tik pat bija manaa versijaa,vieniigi maneejais kautkaa negribeeja straadaat pareizi-man noteikti bija kluuda ziimees).Ok tuuliit izmeegjinaashu sho variantu.

[EDIT]Paldiesinj,viss straadaataa,vieniigi koods sanaak baigi garsh[/EDIT]
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Nov 05, 2006 11:04 pm    Post subject:

Nu manā stāstītajā jau arī to pašu var izdarīt (laikam par biežu neskaidri izsakos ;):
Code:
float x = cos(A)*sin(B)  - cos(B)*sin(A);
if (x > 0.0f)
{
  //--B
}
else
{
  // ++B
}


To x izrēķināšanu var nedaudz nooptimizēt, ja lieto trigonometrijas formulas:
Code:
float x = sin(B-A) - sin(A-B);


Edit: ahā, pārlasīju sevis teikto iepriekš un sapratu, ka sajaucu vietām skalāro ar vektoriālo reizinājumu. Šitāda nūbiska kļūda :)
x = a.x*b.y - b.x*a.y ir tak vektoriālā reizinājuma trešā komponente!
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Mon Nov 06, 2006 12:47 am    Post subject:

Ou ou ou.Veciit es pat neaizdomaajos,ko to vareetu ar siinusu un csinusu izreekjinaat.Shobriid nav laika iedziljinaaties,bet izskataas logjiski un galvenais-straadaa!Bet ko es ieguustu rezultaataa (t.i. kas ir x).
Es katraa freimaa atnjemu vai pieskaitu skaitli attieciibaa pret FPS.Taapeec kad rezultaats nonaak tuvu nullei-piemeeram,taa pati autamashiinu kamera saaktu raustiities.Kaa es vareetu uszinaat no taa rezultaata (x),ka liidz beigaam ir palicis mazaak,kaa es grasos atnjemt-liidz ar to A=B?
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon Nov 06, 2006 1:25 am    Post subject:

x pēc būtības ir vektora garums, kuš veidojās no A un B vektoru skalārā reizinājuma. x tuvosies 0, kad B tuvosies A, un x=0, kad A=B.

Pie B skaiti klāt -x pareizinātu ar kautkādu koeficientu. To koeficientu piedzen klāt uz aci, tā lai tā kustība notiek tik ātri, cik tu gribētu. Tb jo lielāks koeficients, jo ātrāk kustēsies. Un jo mazāks, jo lēnāk kustēsies.

Vēl viena lieta - ja B pārsviedīsies A otrā pusē, tad x mainīs zīmi.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Mon Nov 06, 2006 1:31 am    Post subject:

Es te meegjinaaju logjiski izspriest.Vai tad nesanaak,ka ar arcsinusu ieguustu atpakalj lenkji (no x),kas ir abu lenkju starpiiba?Tad es vareetu vienkaarshi sho starpiibu saliidzinaat ar atnjemamo skaitli.Ja tas ir mazaaks,tad A=B.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon Nov 06, 2006 1:59 am    Post subject:

Nē, ar arcsinusu tu nekā neiegūsi, jo tur ir divu sīnusu starpība.

Bet, emm.. ja jau tev vajag leņķu starpībi, tad kāpēc to tad tā arī neņem B-A, jo tev taču leņķu vērtības ir zināmas! Ja starpība iznāk >180, tad to vajag atņemt no 360, tb ņemt 360-(B-A).
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Mon Nov 06, 2006 2:03 am    Post subject:

Laikam taapeec,ka es esmu nedaudz tizls.Biju jau aizdomaajies tik taalu,ka vienkaarsho "burkaanu atnjemshanas" metodi neiedomaajos.

Par to arcsinusu.Mees atnjemam divu lenkju starpiibu siinusus.Abi atrodas rinkjii uz Y ass.Taatad to starpiiba arii ir uz Y ass.Tatad ar siinusu kautkas ir saistiits.Ko tad ieguusim ar arcsinusu? Itkaa shis jautaajums vairs nav svariigs,bet tomeer-kautko ieguustam.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon Nov 06, 2006 2:37 am    Post subject:

Ļoti "dīvains" tavs spriedums. Tam tak ar asīm nav nekāda sakara - tb tie nav nekādi vektori tak!

Taču izrādās vēl to x var izteikt šitā (ņemot palīgā divu sinusu stapības formulu):
Code:
float x = sin(b-a);

Vajag tik trigonometrijas formuliņās vairāk paskatīties.. :)

Tā ka paņemot arcsin(x) dabūsi gan savu leņķu starpību.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Mon Nov 06, 2006 2:19 pm    Post subject:

Nee nav diivains.Iedomaajies siinusa un kosinusa rinkji.Siinusa veertiibas sanaak uz y ass,bet kosinusa veertiibas uz x ass.Taatad siinusu starpiibai bija jaasanaak tai lenkju starpiibai un ar arcsinusu vinju var dabuut atpakalj.Un paldies par sin(b-a)-neiedomaajos apskatiities formulinjas trigonometrijas graamataa.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Mon Nov 06, 2006 9:27 pm    Post subject:

Quote:
Iedomaajies siinusa un kosinusa rinkji.Siinusa veertiibas sanaak uz y ass,bet kosinusa veertiibas uz x ass.Taatad siinusu starpiibai bija jaasanaak tai lenkju starpiibai un ar arcsinusu vinju var dabuut atpakalj.


Ar to tu domā, ka: a - b = arcsin( sin(a) - sin(b) ) ? Nebūs vis...
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Mon Nov 06, 2006 9:47 pm    Post subject:

GiGa wrote:

Ar to tu domā, ka: a - b = arcsin( sin(a) - sin(b) ) ? Nebūs vis...

Nee taa es nedomaaju.Es domaaju a-b=arcsin(sin(a-b)).

[EDIT]Shis posts izskatiijaas peec treshaas klases uzdevuma-pie trijiem burkaaniem pieskaita vienu un tad atnjem vienu,sanaak triis burkaani.[/EDIT]
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Matemātika un fizika All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group