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

Interpoleejam 2D funkciju.

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



Joined: 04 Feb 2006
Posts: 23
Location: Riga

PostPosted: Mon Oct 02, 2006 7:58 pm    Post subject: Interpoleejam 2D funkciju.

Sveiki, jau kaadu meenesi domaaju par probleemu:

x, y - punkta kordinaates telpaa.
F(x, y) - punkta augstums telpaa.

Ir matrica: M, kur kur elemens e[n, k] = F(x, y), jeb latviski runaajot aprakstam izliektu plakni (taa vispaar var teikt?), kur katram punktam (x, y) ir aukstums - F(x, y).

Probleema:
Matrica nav pilna bet tikai daljeeji piepildiita. Kaa atrast paareejo punktu veertiibas, lai:
* ja apreekjinaamais punkts atrodas pa vidu matricai tad punktam jaatrodas uz plaknes.
* ja atrodas uz matricas malas, tad jaaturpina defineetaas plaknes kritums/kaapums esoshajaa virzienaa.
* plakne nedriikst sasniekt kaadu noteiktu aukstumu maxH, bet taa vietaa tai vai nu tam jaatuvojas vai jaaizdara paarliekums.

Risinaajumi?

Kaut kad pamaskolaa maacijaamies par funkcijas izvirziishanu rindaa. Shajaa gadijumaa ideaali vareetu atrisinaat probleemu ar videejiem "nezinaamajiem", bet uz malaam baidos ka funkcija var strauji aizlekt prom no noteiktajaam robezhaam.
Un vispaar kaa taadu divdimensiju f-ju var izvirziit?

Kaadas idejas?
_________________
Program to an interface, not an implementation.
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: Mon Oct 02, 2006 8:15 pm    Post subject:

"aprakstam izliektu plakni (taa vispaar var teikt?)"
Es būtu teicis - apraksta virsmu (jeb izliektu virsmu). Plakne jau nevar būt nekādīgi liekta, jo tad tā vairs nav plakne.

Es īsti nesaprotu, kas tev ir tajā matricā.. Vai gadījumā nedomāji, ka e[x,y] = F(x,y), tb parastu heighmapu? Tādā gadījumā tavas minētās problēmas, man lieka, ka var risināt vienkāršākajā gadījumā ar visparastāko lineāro (x+y)/2, vai, ja nepieciešams, ar kādas augstākas kārtas funkcijas interpolāciju. Tb sanāktu tāda kā Teilora rinda divargumentu funckijai, jeb, no otras puses skatoties - vienargumenta funkcijai kompleksajos skaitļos. Atliek parasto teilora rindu izvirzīt ņemot vērā, ka mainīgais ir komplekss skaitlis. Te ir sarakstītas precīzākas formulas, ja pašam negribās domāt (meklē "complex variable"): http://mathworld.wolfram.com/TaylorSeries.html


Citādākā gadījumā es tad nesaprotu, kas ir n un k šajā formulā: e[n,k]=F(x,y).
Back to top
View user's profile Send e-mail
Muntis



Joined: 04 Feb 2006
Posts: 23
Location: Riga

PostPosted: Mon Oct 02, 2006 8:21 pm    Post subject:

Paldies, iechekoshu linku. Domaaju ka tas vareetu buut tas kas man vaidziigs.
Neesu iisti experts shajaa terminologjijaa, bet jaa, tas ko es domaaju vareetu buut nosaukts par heightmapu.
n un k izmantoju jo cik pareizi atminu taa apziimeeja elementa indeksus matricaa, bet tikpat labi tie vareetu buut x un y vai i un j.
_________________
Program to an interface, not an implementation.
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: Mon Oct 02, 2006 8:51 pm    Post subject:

Nē ne jau tā tos indeksus es prasīju. Es vienkārši neredzu kā tie indeksi saistās ar to, kas ir ielikts rūtiņā. Vai tu domā e[n,k]=F(n,k), tb ka piektajā rindā un ceturtajā kolonā ir skaitlis, kurš ir vienāds ar F(5, 4) ?
Back to top
View user's profile Send e-mail
Muntis



Joined: 04 Feb 2006
Posts: 23
Location: Riga

PostPosted: Mon Oct 02, 2006 8:55 pm    Post subject:

Jep tieshi taa.
_________________
Program to an interface, not an implementation.
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: Mon Oct 02, 2006 9:31 pm    Post subject:

Tā tad arī uzreiz vajadzēja rakstīt ;)

Tādā gadījumā tas ir parasts heightmaps. Ņem interpolē starp rūtiņām lineāri, ja punkti ir pietiekoši tuvu, vai arī izvirzi kādā polinomiālā fjā (šaubos vai vairāk par 3-4 kārtu vajadzēs, paliks tikai lēnāk un īpaši precīzāk nepaliks).
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: Tue Oct 03, 2006 4:16 pm    Post subject:

Manupraat Muntis kodee ieksh DarkBasic,taapeec arii heightmapu sauc par matricu. Nekad neesmu sapratis kaapeec pie visiem sveetajiem pipstikjiem DarkBasic'aa heightmapu sauc par matricu.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Muntis



Joined: 04 Feb 2006
Posts: 23
Location: Riga

PostPosted: Tue Oct 03, 2006 5:27 pm    Post subject:

Masiivu par matricu sauc matemaatikaa. Taa kaa sheit es vairaak prasiju tieshi par matemaatisku risinaajumu probleemai mineeju sho terminu un nav svariigi kur to glabaaju tos datus - masiivaa, mapaa vai relaaciju datubaazee.

DarkBasic savaa dziivee neesu redzeejis. Peec tava komenta noprotu - labi gan ka taa Smile
_________________
Program to an interface, not an implementation.
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: Tue Oct 03, 2006 7:24 pm    Post subject:

Muntis wrote:
Masiivu par matricu sauc matemaatikaa.

Divdimensiju masīvu!! Ne jau kuru katru.
Back to top
View user's profile Send e-mail
Muntis



Joined: 04 Feb 2006
Posts: 23
Location: Riga

PostPosted: Tue Oct 03, 2006 9:19 pm    Post subject:

bubu wrote:
Muntis wrote:
Masiivu par matricu sauc matemaatikaa.

Divdimensiju masīvu!! Ne jau kuru katru.


Par to jau ir runa Wink

OK, kaadas paaris stundas pavadiju guugleedams un lasiidams. Juutu ka kaut kur esu smagi pazaudeejis savas zinaashanas skaitliskajaas metodees.
Taadi reaali piemeeri arii nebija, vieniigi ieksh GoogleAnswers kaadreiz bij, bet cik noprotu tad pie taa koda lai tiktu buutu jaaiemaksaa.
Taatad cik taalu esu ticis

F(x,y) = Sum ( 1/ !n * (c1*x+c2*y)^n) kur n - ir iteraacijas kaarta. Vai pareizi?

Kaa dabuut shos koeficientus, kurus apziimeeju ar c1 un c2? Saprotu ka tiem jaaizriet no esoshajiem punktiem.
Tak ne jau izmantojot sho pashu funkciju, ielikt iekshaa zinaamos x un y, dabuut vienaadojumu sisteemu, kur vieniigie nezinaamie buutu tie c. Neizklausaas paaraak vienkaarshi.

Jabuut citaam metodeem. Mazaako kvadraatu? Kaa tas viss liimeejas kopaa? Kaadas idejas kaa mazaakos kvadraatus pielietot divargumentu funkcijaas?
_________________
Program to an interface, not an implementation.
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: Tue Oct 03, 2006 9:44 pm    Post subject:

Jā, runa ir par tādu masīvu, taču tu to iepriekšējā postā nepieminēji.. atkal kādu būsi maldinājis :) Bet nekas nepareizs jau tas nav - saukt heightmapu par matricu. Tas ir viens no diskrētas divdimensiju funkcijas uzdošanas veidiem.

Taču es nesaprotu tavus "kā"? (iepriekš teilora rindai, tagad mazāko kvadrātu metodei..) Nu to mazāko kvadrātu metodi tā arī pielieto kā vienmēr! Tak nav svarīgi cik argumentu ir funkcijai - viens, divi vai kautkvai četrdesmit astoņi. Metode no tā nemainās, mainās tikai formulas.

To formulu nezinu kur izrāvi, tāpēc par c1 un c2 nekā nemācēšu teikt.

Ja gribēsi dabūt precīzu virsmu, tad no vienādojumu sistēmas risināšanas tev neizbēgt. Protams, labāk atrast/izdomāt vienādojumu sistēmu, kura būtu lineāra, tad nevajadzētū būt problēmām to atrisināt.

Vai vispār biji pamēģinājis prastu bilineāru interpolāciju (lineāra interpolācija pēc 2 argumentiem), vai bikubisku interpolāciju uz savas matricas un paskatīties kāda virsma tad viedojas? Varbūt pietiekoši gluda sanāk un neko vairāk tev nemaz nevajag? Vai arī tu risini pavisam kautkādu savādāku uzdevumu?
Back to top
View user's profile Send e-mail
Muntis



Joined: 04 Feb 2006
Posts: 23
Location: Riga

PostPosted: Tue Oct 03, 2006 10:31 pm    Post subject:

Piedod ka tiranizeeju. Mani "kaa" to arii noziimee - kaa to panaakt, funkcijas, algoritmi utt.
Bilineaaro nevaru izmanot, jo nav zinaams cik pukti ir zinaami.

Bikubiska interpolaacija arii buus ok:

Code:

F = a00 + a10*x + a01*y + a20*x^2 + a11*x*y + a02*y^2 + a21*x^2*y + a12*x*y^2 + a22*x^2*y^2 + a30*x^3 + a03*y^3 + a31*x^3*y + a13*x*y^3 + a32*x^3*y^2 + a23*x^2*y^3 + a33*x^3*y^3


Bet kur njemam tos "a"? Varbuut atbile man ir acu priekshaa, bet es jau te kaadas paaris h njemos. Nogurums varbuut.


Uzdevums taads arii ir - nepilniigs "heightmaps", kursh vajadziibas gadijumaa jaaaizpilda vai jaapapildina. piem:
Code:
|n/a| 1 |1,5| 2 |1,5| 1 |
|n/a| 1 | 1 |n/a|1,5| 1 |
|n/a| 1 |1,5| 1 | 1 | 1 |
|n/a| 1 | 0 | 1 |n/a|n/a|
|n/a| 1 |n/a|n/a| 2 | 3 |


Protams taa matrica ir nedaudz lielaaka un skaitlji ar nav tik apalji.
_________________
Program to an interface, not an implementation.
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: Tue Oct 03, 2006 10:41 pm    Post subject:

Kāds sakars pieejamajam punktu daudzumam ar nevarēšau pielietot bilineārās interpolāciju?
Tak x1..x2 intervālā lieto vienu, x2..x3 nākamo (tas pats arī pa y asi). Jeb kubiskās gadījumā - viena fja x1..x3 intervālā, otra x2..x4 gadījumā.

Tos a jāņem no vienādojumiem F(x,y)=z. Jo konkrētām x,y vērtībām (matricas rinda/kolonna) taču tie z ir zināmi (pašas matricas elementu vērtība! Domā taču tāpatās kā 1d gadījumā, ja ir zināms F(x1)=y1 un F(x2)=y2, tad var lineāru interpolāciju uztaisīt - taise no (x1,y1) līdz (x2,y2). Tāpat arī telpā.
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