Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Reikia pagalbos pasirasyti skaiciavimo formule


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2789 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki reikia pagalbos parasyti skaiciavimo formule atvirksce sitai :

width 50 height 50 
for (int a = 0; a < heigth; a++) {
     for (int b = 0; b < width; b++) {
         b + a * width;
     }
}
sita formule grazina rezultata nuo 0 iki 2500(width * height) , nekreipkit demesio y
sintakses klaidas ce tik pavizdys, ir man reikia formules kuri tai padarytu atvirkstine
 tvarka nuo 2500(width* height) iki 0

for (int a = heigth; a > 0; a--) {
        for (int b = width; b > 0; b--) {
              ????
    }
}
Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

ce tas pats gaunasi kas a + b * width , rezultatas buna nuo maziausio iki didziausio o man reikia nuo didziausio iki maziausio

50px x 50px is viso 2500 pixeliu kai lupini sita formule tai nuo 0 iki 2500 man reikia atvirkstines nuo 2500 iki 0

 

edited , ir tai rezultatas ne toks gaunasi , padarykim width 50 height 80 kad tikslesnis rezultatas butu

width = 50 height 80 
for (int a = heigth; a > 0; a--) {
        for (int b = width; b > 0; b--) {
              b + a * height; // 50 + 80 * 80= 6450 max pixeliu 4000(width * height)
    }
}
Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

Tavo pirmasis pavizdys eina iki 2499

 

Pataisiau kodą ir dabar gaunu normaliai 2500:

 

    int width = 50, height = 50, a, b;
    for (a = 0; a < height; a++) {
        for (b = 0; b <= width; b++) {
            cout << b + a * width << endl;
            }
    }
Redaguota , nario Simuciokas
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

 

Tavo pirmasis pavizdys eina iki 2499

 

Pataisiau kodą ir dabar gaunu normaliai 2500:

 

    int width = 50, height = 50, a, b;
    for (a = 0; a < height; a++) {
        for (b = 0; b <= width; b++) {
            cout << b + a * width << endl;
            }
    }

 

paziurek atidziau sitas kodas yra toks pats kaip as parasiau pirmam poste , man reikia atvirkstinuo nes sitas kodas duoda nuo 0 iki 2500 o man reik nuo 2500 iki 0  .ir juk ce yra for loopai ce ir turi eiti iki 2499 nes juk prasideda nuo 0 :) 2500 isviso elementu

 

Gal as nelabai moky paaiskinti bet pabandysiu dar karta

Taigi sita sita forumule "b + a * width" duoda rezultata nup 0 iki (width*height) ka man tai duoda ?
 ogi tai man duoda objekto indexus nuo 0 iki 2499 kuriuos naudoju priesti objektu situ skaiciavimu objektas 2D piesiasi nuo virsutinio kairiojo kampo 



nuo Virsutinis kampas
_|............
  ...--->.....
  ............
              iki apatinio desinio 

o man reikia nupiesti objekta nuo apatinio desinio iki virsutinio kairio 

iki Virsutinis kampas
_|............
  ...<---.....
  ............
              Nuo apatinio desinio 
Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

 

    for (a = height-1; a >= 0; a--) {
        for (b = width; b >= 0; b--) {
            cout << b + a * width << endl;
        }
    }  
 
Šitas nuo 2500 iki 0

 

tame ir esme buvo man vis mete klaida kadangi strukturos dydis yra 2500 o sitas apskaiciavimas duoda 2501 todel viskas ka reikejo padaryt tai (b-1) + a * width , dq uz pagalva

Nuoroda į komentarą
Dalintis per kitą puslapį

tame ir esme buvo man vis mete klaida kadangi strukturos dydis yra 2500 o sitas apskaiciavimas duoda 2501 todel viskas ka reikejo padaryt tai (b-1) + a * width , dq uz pagalva

Nepasitikiek juo, nes jo kodas dubliuos output'ą kas 50 :D 

Papildau:

Kaip tu sakei, reiktų -1 pridėti prie b. Bet for() conditionas antras turėtų atrodyti taip, kad gautum identiškai atvirkščia 2499-0 ir be dubliavimosi:

for(a = height-1; a >= 0; a--)
   for(b = width; b > 0 ; b--)
     cout << b-1+a*width << endl;
Redaguota , nario D34DC0D3
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

 

Nepasitikiek juo, nes jo kodas dubliuos output'ą kas 50 :D 

Papildau:

Kaip tu sakei, reiktų -1 pridėti prie b. Bet for() conditionas antras turėtų atrodyti taip, kad gautum identiškai atvirkščia 2499-0 ir be dubliavimosi:

for(a = height-1; a >= 0; a--)
   for(b = width; b > 0 ; b--)
     cout << b-1+a*width << endl;

 

tai kad nesidubliuoja niekas

(b - 1) + a * width
49 + 49*50 2499
48 + 49*50 2498
47 + 49*50 2497
46 + 49*50 2496
45 + 49*50 2495
......
1 + 49*50 2451
0 + 49*50 2450
49+48*50 2449
.........
viskas normalei gaunasi 


Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

 

tai kad nesidubliuoja niekas

(b - 1) + a * width
49 + 49*50 2499
48 + 49*50 2498
47 + 49*50 2497
46 + 49*50 2496
45 + 49*50 2495
......
1 + 49*50 2451
0 + 49*50 2450
49+48*50 2449
.........
viskas normalei gaunasi 


2449 turėtų du kart išvest, jeitu kaip @Simociuko kode vidiniam for conditionui naudoji: "b >= 0". Tada taip dubliuojasi.

P.S. Dar pridursiu, kad čia dvigubas ciklas tokiam paprastam skaičiavimui net nereikalingas. Apsieitum ir su:

for(a = 0; a < width*height; a++)

  cout << a << endl;

bei:

for(a = width*height -1; a > 0; a--)

 cout << a << endl;

Redaguota , nario D34DC0D3
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

2449 turėtų du kart išvest, jeitu kaip @Simociuko kode vidiniam for conditionui naudoji: "b >= 0". Tada taip dubliuojasi.

P.S. Dar pridursiu, kad čia dvigubas ciklas tokiam paprastam skaičiavimui net nereikalingas. Apsieitum ir su:

for(a = 0; a < width*height; a++)

  cout << a << endl;

bei:

for(a = width*height -1; a > 0; a--)

 cout << a << endl;

supranti ce viskas dauk giliau neigu as parodziua as tik formules paprasiau nes man kazkaip nesigalvoja visiskai :D , sitam cikle yra dar dauk visko kam ir reikalingas dvigubas , yra kordinates yra yra stuktura kiekviena kordinate turi savo structura su RGB spalvom kad nupiesti objekta

Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

 

Vis tiek vienu ciklu apsieini :/ Tarkim jei reikia kordinačiu, tai jas iš a apsiskaičiuoji:

for(a = 0; a < width*height; a++){

  x = a/width;
  y = a-x*width;
}

 

kjp tu apskaicuosi sitai vienu cuklu ?

void Graphics::DrawSpriteBackW(int x, int y, int width, int heigth, std::vector<Color>& image)
{
	for (int a = heigth-1; a > 0; a--) {
		for (int b = width; b >= 0; b--) {
			PutPixel((x+width) - (width -, (y+heigth) - (heigth- a), image[b - 1 + a*width].GetR(), image[b - 1 + a*width].GetG(), image[b - 1 + a*width].GetB());
		}
	}
}
Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

kjp tu apskaicuosi sitai vienu cuklu ?

void Graphics::DrawSpriteBackW(int x, int y, int width, int heigth, std::vector<Color>& image)
{
	for (int a = heigth-1; a > 0; a--) {
		for (int b = width; b >= 0; b--) {
			PutPixel((x+width) - (width -, (y+heigth) - (heigth- a), image[b - 1 + a*width].GetR(), image[b - 1 + a*width].GetG(), image[b - 1 + a*width].GetB());
}

Atvirkščiai? Netestavau nk, bet gali tekt a ir b raides apkeist.

P.S. Dar sutaisiau tavo PutPixel. 

 

(x+width)-(width-=(x+width-width+=(x+
void Graphics::DrawSpriteBackW(int x, int y, int width, int heigth, std::vector<Color>& image)
{
    for(int i = width*height-1; i >= 0 ; i--){
        int a = i/width;
        int b = i-a*width;
        PutPixel((x+, (y+a), image[i].GetR(), image[i].GetG(), image[i].GetB());
    }
}
Redaguota , nario D34DC0D3
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

dq uz pagalba bet nieko taisyt nereikia :D , sitas kodas nedaro tai ka turetu daryti :) jis tik apvercia objekta o ne piesia jy nuo kito galo , trecia deklaruoti kintamuosius ciklo viduje yra nesamone :) nes tu juos deklaruoji width*height kartu (2500) kartu , kai gali viena karta deklaruoti uz ciklo ir cikle jiems priskirti skirtingas reiksmias :)

Redaguota , nario yahoo5000
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2789 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...