|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Fri Feb 15, 2008 8:49 am Post subject: Vektoru skalārais reizinājums |
|
Zinu ka neesmu ne pirmais, ne pēdējais kurš šajā forumā griežas ar "skolas" uzdevumiem, bet vektori man ir tumša bilde :(
Ir uzdevums:
Quote: | Ir doti divi vektori. Uzzīmēt blokshēmu un uzrakstīt programmu, kas atrod vektoru skalāro reizinājumu
|
Risinājums C++, consoles vidē
Paldies par man veltīto laiku!
*aizgāja pabeigt uzdevumus par masīviem* |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Fri Feb 15, 2008 9:51 am Post subject: |
|
Vektors tas pats masīvs vien ir. Divās dimensijās (plaknē), tas ir 2 elementu masīvs x, y, trijās dimensijās -- triju elementu. Kā sareizināt divus vektorus skalāri? To taču tev mācīja, vai ne? Sareizina katru koordināti (x1*x2, y1*y2...) ar otra vektora atbilstošo koordināti un tad visu saskaita kopā:
x1*x2+y1*y2+...
Viss, kas tev jāizdara ir jāuzraksta programma, kas iziet cauri diviem masīviem (vektoriem) un sareizina atbilstošās pozīcijas:
float vektors_1[3], float vektors_2[3]; // 3D
// aizpildam vektorus kodaa...
float skalarais_reizinajums = vektors_1[0]*vektors_2[0] + vektors_1[1]*vektors_2[1] + vektors_1[2]*vektors_2[2];
Var arī izmantot ciklu, ja tu nezini pirms programmas palaišanas, cik koordinātu vektori tev būs:
int dim=3; // cik koordinaatas vektoram
float skalarais_reizinajums = 0.0f;
for (int i=0;i<dim;i++)
skalarais_reizinajums += vektors_1[i]*vektors_2[i];
Un vektori ir vienkārši -- atšķirībā no parastajiem lielumiem, tev ir vienkārši nevis viens, bet divi, trīs vai vairāk skaitļi. Tb, nevis 0, bet (0, 0, 0). Vot tenzori ir mazliet nepatīkamāk. _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Fri Feb 15, 2008 10:13 am Post subject: |
|
Paldies! Bet tajā bildē ko pievienoju tas viss izskatās sarežģītāk...
Code: | r = x[1] * x[2] + y[1] * y[2]; |
Vai tiešām atbilde ir tik vienārša? |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Fri Feb 15, 2008 10:51 am Post subject: |
|
Tas ir ļoti vienkārši, tici man.
Tiesa, tur tajā bildē ir attēlots vispārīgais gadījums -- kad vektoram var būt n koordinātas. Bet tik un tā elementāri.
Code: |
int n=3; // cik koordinaatas vektoram, tas ir tas pats n, kas formulā
float skalarais_reizinajums = 0.0f;
for (int i=0;i<n;i++) { skalarais_reizinajums += vektors_1[i]*vektors_2[i]; }
|
Tu tak zini, kā darbojas Sigma (summas simbols)? Un kā reizināt divus skaitļus? Tas arī ir viss, uzzīmē blokshēmu un sapratīsi pats.
Tīri praktiski kodējot jāpievērš uzmanību masīvu izmēram (tiem ir jābūt n-lieliem). Ja tu programmē C++, tad īstenībā varētu izmantot pat vector templeitu un tad par izmēru vispār nav jāuztraucas. _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Feb 15, 2008 11:04 am Post subject: |
|
Inf3rnal wrote: | Code: | r = x[1] * x[2] + y[1] * y[2]; |
Vai tiešām atbilde ir tik vienārša? :o |
Uzmanīgi ar masīva indeksiem! C/C++ valodās masīva indeksi sākās no 0, nevis 1.
T.i. ja tev ir masīvs float x[2]; tad tā elementi ir x[0] un x[1]. |
|
Back to top |
|
|
|
|
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
|