View previous topic :: View next topic |
Author |
Message |
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: 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 |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: Wed Feb 23, 2005 6:50 pm Post subject: |
|
nee tur nav - tur ir Matrix3x3 * Vector2. . |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: Wed Feb 23, 2005 7:00 pm Post subject: |
|
da nevaig iespringt . 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: 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 |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: 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 |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: 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 |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: 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 |
|
|
|