[ Aleksandar94 @ 05.07.2008. 03:04 ] @
E ovako. Imam jedan problem. On glasi ovako. Telo je odredjeno sa 4 parabole. Parabole su odredjene jednakim brojem tacaka. Tacke su odredjene svojim koordinatama. Tacke se spoje kao na slici. Treba nacrtati to i odrediti koordinate tacaka unutar tela. Posto sam pocetnik u c-u nemam predstavu odakle da krenem. Svaka pomoc je dobrodosla. Pozdrav!

[ Nedeljko @ 11.07.2008. 08:19 ] @
Prvo, parabola (ili bilo koji drugi konusni presek) je potpuno odredjena sa bilo kojih svojih pet tacaka. Kroz cetiri tacke prolazi beskonacno mnogo parabola.
[ Aleksandar94 @ 11.07.2008. 11:05 ] @
Dobro. Ja nisam ucio parabole pa ne znam. Ali da li samo moze 5. U primeru koji ja imam kuci je parabola odredjena sa 9 tacaka. I resenje se dobija tako sto se " izvrsi Bulovo sumiranje projektora ". Meni to nije jasno. Da li mozes da mi objasnis. Kako da nacrtam parabolu u C-u ako znam koordinate tacaka kojima je ona odredjena. I kako da odredim koordinate tacaka unutar tela koje se dobijajau spajanjem tacaka.
[ glorius @ 12.07.2008. 19:34 ] @
y = px^2

Ubacis x i dobijes y.
x stavis u petlju da ide od pocetne do krajnje tacke.

Tako iscrtavas tacku po tacku.

startX - x koordinata leve tacke na paraboli na tvojoj slici
endX - -||- desne tacke -||-

Code:


for( int x = startX; x < endX; x++)
{
       int y = p*x*x;   // p je valjda neka konstanta parabole ( ako je 1 dobijamo poznatu kvadratnu j-nu y=x^2 )

       DrawPoint(x,y);
}



E sad, ovo DrawPoint je funkcija koja se implementira u zavisnosti od toga sta koristis za iscrtavanje. To je vec druga i dublja tema...
[ Aleksandar94 @ 13.07.2008. 00:04 ] @
Posto mi je nedeljko rekao da kroz 4 tacke prolazi beskonacno mnogo parabola zakljucio sam da broj tacaka kojima je ona odredjena mora biti neparan! Evo je izmenjena slika!

[ Aleksandar94 @ 13.07.2008. 00:16 ] @
@glorius -> Razumeo sam to za horizontalne parabole. A sta cu za uspravne? Kako onda? Jel onda unosim Y a izracunavam X . Sta je u mom slucaju P ? Evo neki primer mog koda za uspravne->

Code:


for( int y = endy; y> starty; y--)

{
       int x = p*y*y;

       DrawPoint(x,y);
}


starty-> y koordinata donje tacke

endy-> y koordinata gornje tacke

Nazalost nisam stigao da isprobam jer cekam da skinem VS 6.

Imam jos tri pitanja ->

1. Da li moze da se crta u konzolnoj aplikaciji ?

2. Koju biblioteku da koristim ?

3. Kako da odredim koordinate tacaka unutar tela? [ koje se dobiju presekom parabola ]

[Ovu poruku je menjao Aleksandar94 dana 13.07.2008. u 22:19 GMT+1]
[ glorius @ 13.07.2008. 21:41 ] @
Sto se tice vertikalnih, tako bi trebalo.

x = p*y*y

i opet petlja.

p je koeficijent parabole koji je krivi ili ispravlja. ako je p=0, y = 0 a to je jednacina horizontalne linije. Znaci, sto je p manje parabola ce vise da ti izgleda kao horiz. linija. Stoje vece, parabola ce biti ostrija.

Odgovori:

1. Nemoj ni da pokusavas u konzoli. ( Postoje neki nacini koje nisam isprobao ali, ne preporucujem proucavanje)
2. Veoma je tesko preporuciti pocetniku bilo koju biblioteku da bi brzo zavrsio neki posao ali, ako si ambiciozan i zelis da naucis evo nekih:

- MFC ( Microsoft Foundation Classes ), integrisano u Visual Studio ( preko MFC aplikacija )
- SDL, graficka biblioteka koja je mozda i najbolji izbor
- Trolltech Qt - po meni najbolji API za GUI, crtanje... ali, za sada ne preporucujem ( ali opet, ako zelis, probaj )

3. Ove parabole se razlikuju bas po parametru p. Svaka je malo iskrivljenija od druge. Ako imas samo jednu poznatu tacku za svaku parabolu, p svake parabole dobijas na ovaj nacin.

y = p*x*x - osnovna jna

imas x i y, znaci

p = y/(x*x)

ako imas p, mozes naci jednacinu parabole.

Za sada imamo y = p*x*x sa poznatim p

Presekom 2 parabole dobijas srednju tacku a to se dobija pomocu sistema jednacina:

Parabola 1: y = p1*x*x - horizontalna
Parabola 2: x = p2*y*y - vertikalna

zamenis x is druge u prvu

y = p1*(p2*y*y)*(p2*y*y)
y = p1*p2*p2*y^4; // podelimo sa y ( y ne sme da bude 0, jer kad bi bilo tako, p1=p2=0 a to znaci da se dve paralelene linije seku gde ima beskonacno mnogo resenja :) )
znaci:

1 = p1*p2*p2*y^3;

y^3 = 1/(p1*p2*p2);

odavde dobijes y preko treceg korena i ubacis u drugu jednacinu parabole da dobijes x

i, imas koordinate presecne tacke 2 parabole...





[ Aleksandar94 @ 13.07.2008. 22:29 ] @
Hvala puno! Duzan sam ti za ovo! Sutra cu da inst VS 6.0 posto sam dizao system. Pa cu da probam da napisem kod i postovacu! Nadam se da cemo ostati u kontaktu! Pozdrav!
[ glorius @ 13.07.2008. 23:38 ] @
Duguju samo oni kojima je p > 0 :)

Inace, ove jednacine nisu 100% tacne ( mozda i jesu ), posto sam ih izveo na licu mesta.
Mislim da je zadatak dosta slozen. Ako je samo za vezbu programiranja, nastavi da pricas sa world-om :) i okani se ovoga.

Ako je za skolu, ovo je vec naprednija matematika jer su ovo krive drugog reda koje zahtevaju detaljnije izucavanje od ovoga sto je predstavljeno ( da bi se iskoristilo za tacan algoritam ).
[ Aleksandar94 @ 14.07.2008. 15:38 ] @
Hvala! Nije za skolu. Nego preko raspusta radim napredno programiranje. Spremam se za JBOI 2008 [ junior balcan olympic in informatic ] jer ove godine nisam prosao na JBOI 2007. jer mi je ova godina bila prva godina u programiranju i takmicio sam se sa osmacima. Sada sam naucio da radim slozene algoritme ali ovo nisam mogao da resim jer zahteva, kao sto si rekao, naprednu matematiku. Hvala jos jednom i pozdrav! Ako opet budem imao problem sa nekim drugim zadatkom ja cu da se javim! :)
[ Aleksandar94 @ 29.07.2008. 23:47 ] @
Ups... Tek sam sad video greshku... JBOI 2009 i JBOI 2008 umesto JBOI 2008 i JBOI 2007...