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

Pagriezieni iekš 2D
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Matemātika un fizika
View previous topic :: View next topic  
Author Message
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Wed Feb 23, 2005 2:55 pm    Post subject: Pagriezieni iekš 2D

STEIDZAMI Vai juus ludzu nepateiktu, kaa veel var veikt pagriezienus ieksh 2d. Uz papiira sanaaca:
x1 = cos(alpha + arccos(x))
y1 = sin(alpha + arcsin(y)),
bet ieliekot ieksh c++ nekas nestraadaa. Vinsh iet tikai ~45 graadu lenkii neskatoties, ka alpha ir ap 90.
Back to top
View user's profile Send e-mail
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Wed Feb 23, 2005 3:02 pm    Post subject:

izmanto 3x3 transform matricas. Nebuus jaachakareejaas un galvenais ka tie pashi principi kas ieksh 3D rotaacijas, translaacijas un scaling.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Feb 23, 2005 6:42 pm    Post subject:

GazZ, nu un ka matricas jāizmanto. Tur doma formulas nav?
Nu dīvainas gan tev tās formulas. Man, pagriešanai ap nulles punktu par alpha leņķi sanāk šādas formulas:
Code:

x1 = x*cos(alpha) - y*sin(alpha)
y1 = y*cos(alpha) + x*sin(alpha)
Back to top
View user's profile Send e-mail
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Wed Feb 23, 2005 6:50 pm    Post subject:

nee tur nav - tur ir Matrix3x3 * Vector2. Cool . Wink
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Feb 23, 2005 6:53 pm    Post subject:

Bāc, a kā to Matrix3x3 izveido neesi iedomājies? No zila gaisa rauj koeficientus? Varbūt vari pastāstīt tieši kāpēc un tieši kāpēc attiecīgajās vietās ir 0 1 vai sin vai cos?
Back to top
View user's profile Send e-mail
gazz



Joined: 03 Jan 2004
Posts: 355
Location: Teika

PostPosted: Wed Feb 23, 2005 7:00 pm    Post subject:

da nevaig iespringt Wink . es noraadiiju tikai roadmapu par ko vaidzeetu padomaat.

Last edited by gazz on Wed Feb 23, 2005 7:10 pm; edited 1 time in total
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Feb 23, 2005 7:08 pm    Post subject:

Es neiespringstu. Vienk tu tā teici, ka lūk ar matricām esot mazāks čakars. Nu nez, ja vienkārši izmanto formulas neizprotot jēgu... Nezinu vai tad vispār ir vērts programmēt. Savu piegājienu es varu vienkārši izskaidrot:

Lai "pagrieztu" V par alfa leņķi līdz V1 jāmaina vektora abu x un y projekciju garumi no:
Code:
Vx = |V|*cos(beta)
Vy = |V|*sin(beta)

uz
Code:
V1x = |V1|*cos(alfa+beta) = |V1|*cos(alfa)*cos(beta) - |V1|*sin(alfa)*sin(beta)
V1y = |V1|*sin(alfa+beta) = |V1|*sin(alfa)*cos(beta) + |V1|*cos(alfa)*sin(beta)

Tagad, atceroties, ka |V|=|V1|, jo vektora garums nemainās:
Code:
V1x = Vx*cos(alfa) - Vy*sin(alfa)
V1y = Vx*sin(alfa) + Vx*cos(alfa)

Manuprāt diezgan vienkārši.
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Wed Feb 23, 2005 9:02 pm    Post subject:

Es njeemu peec taada pasha ziimeejuma, tikai izmantojot formulu, ko atradu vienaa graamataa. Ja ja pagrieziena saakumpunkts ir uz Vieniibas rinka x ass(1;0), tad peec pagriezien pa alpha buus
x1=cos(alpha)
y1=sin(alpha)
Takaa man vaidzeeja ieguut beta, t.i. lenki starp (1;0) un(x;y), tad izmantoju arccos(x) un arcsin(y) (hipotenuuza = Raadiuss = 1).
Back to top
View user's profile Send e-mail
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Wed Feb 23, 2005 9:08 pm    Post subject:

Varbuut Tev nestraadaa taapeec, ka arcos izdod lenkji robezaas 0 liidz 180 graadiem, bet arcsin -90 liidz 90 graadiem? Tad sanaak, ka pareizu rezultatau ieguusi tad, ja beta buus 0 - 90 graados tikai?
_________________
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Feb 24, 2005 12:12 am    Post subject:

Angel: vispār, ja godīgi, man nav ne jausmas, ko uz vienības riņķa nozīmētu izteiksme arccos(x) vai arcsin(y), es vēl saprastu arcos(y/x) vai arcsin(sqrt(1-x*x)/x), bet nu... Ja jau tavi izvedumi ir pareizi, tad nezinu, kāpēc nestrādā tava programma, varbūt vaina kļūdā (a moš parādi savu izvedumu?)
Back to top
View user's profile Send e-mail
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Thu Feb 24, 2005 12:31 am    Post subject:

bubu, uz vieniibas rinkja liinijas y=sin(a); un x=cos(a); taapeec a=arcsin(y)=arccos(x);

a ir lenkjis beta tavaa ziimejumaa
_________________
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Feb 24, 2005 10:03 am    Post subject:

Ak tā, nja, nu labi, bet kāpēc tad vajag to leņķi dabūt divos dažādos veidos? :) (retorisks jautājums) Ja jau viņš ir tikai viens.
Nja, te visdrīzāk ir arī problēma, ko GiGa minēja, ka netiek atgriezti leņķi pilnās robežās, bet tikai noteiktā intervālā. Korektāk būtu izmantot arctan2 funkciju: float atan2(float y, float x);
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Thu Feb 24, 2005 7:16 pm    Post subject:

Baac, man ar geometriju laikam ir pavisam shvaki. Nevareetu luudzu pateikt, kur te ir kluuda:
Code:

void sAI::GetMovement(CVector3 vCenter,sCharacter &char_){

   CVector3 vPos = char_.Position;
   char_.Heading = Math.Normalize(vPos-vCenter);

}

It kā uz lapas sanaak, bet ieksh cpp vinsh kustās tikai sīka kvadrātina apkārtnē (centrs (0;0;0), tālākais punkts ~(5;0;5) (vina koordinaates))
Nu tas ir liidz +/- 5 vienībām pa X, pa Z, pa Y nepameeginaaju.
Ja iznem aaraa normalizeeshanu, tad peec kaada laicina aizlido "taalees zilajaas"
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Feb 24, 2005 7:19 pm    Post subject:

A moš pateiksi, ko tam kodam jādara?
Pašlaik tavs kods atgriež iekš char_.Heading vekotra virzienu uz char_.Position punktu no pozīcijas vCenter.
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Thu Feb 24, 2005 7:27 pm    Post subject:

sryr, laiam aizmirsu pierakstiit. Es dodu koordinaatas un charam buutu jaaizveelas virziens uz to punktu.
Piemeers... Veipoints (vai Vajpoints vai Ceļpunkts nezinu, kaa buutu latviski) atrodas punktā 10;0;0, chars atrodas 0;0;0 un, shai funkcijai buutu jaaatgriezh 1;0;0 un vinja to arii dara liidz koordinaatas ir 5;0;0 kaut kaada mistika...
Back to top
View user's profile Send e-mail
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