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

Vektoru skalārais reizinājums

 
dev.gamez.lv Forum Index -> Matemātika un fizika
View previous topic :: View next topic  
Author Message
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: 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ē Smile
Paldies par man veltīto laiku!

*aizgāja pabeigt uzdevumus par masīviem*
Back to top
View user's profile Send e-mail
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: 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
View user's profile Send e-mail Visit poster's website
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: 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? Surprised
Back to top
View user's profile Send e-mail
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: 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
View user's profile Send e-mail Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
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
Page 1 of 1

 
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