[ H-I-D-E @ 31.03.2005. 12:32 ] @
:-) [Ovu poruku je menjao H-I-D-E dana 06.05.2005. u 15:33 GMT+1] |
[ H-I-D-E @ 31.03.2005. 12:32 ] @
[ H-I-D-E @ 31.03.2005. 12:33 ] @
P.S.
ako je moguće neka mi se i oblažloži nacin na kojice neko to napraviti, jer sam stvarno pocetnik. hvala [ Srki_82 @ 31.03.2005. 17:26 ] @
Ako ti treba bas pravi sat to tako nece moci da radi. Najbolje bi bilo da uradis nesto ovako (ovo je samo pseudokod)
Code: var Sec, Min, Sat: Integer; procedure NacrtajSekunde; var X, Y: Integer; begin // Imas broj sekundi u Sec promenljivoj // Za 60 sec kazaljka treba da obidje ceo krug pa zato X := Cos(Pi / 2 - (2 * Pi / 60 * Sec)); Y := Sin(Pi / 2 - (2 * Pi / 60 * Sec)); Line(CentarX, CentarY, X, Y); end; // Isti princip je i za minute i sate begin InitGraph; NacrtajKrug; Repeat Sec := UzmiSekunde; // Koristi neku od sistemskih funkcija za uzimanje vremena Min := UzmiMinute; // recimo Time; Sat := UzmiSate; NacrtajSate; NacrtajMinute; NacrtajSekunde; Until KeyPressed; CloseGraph; end. Jedino sto treba jos da uradis je kad vidis da se sekunda promenila da obrises linije. Jednostavno ili koristi XOR iscrtavanje pa samo ponovo iscrtaj linije ili ih iscrtaj bojom pozadine, zatim update Sec, Min i Sat promenljive i ponovo iscrtaj sve. Za iscrtavanje texta koristi TextOutXY proceduru. [ H-I-D-E @ 31.03.2005. 17:59 ] @
Fala, ali mi to neznaci puno, jer mi je to zadatak za zadacu pa ga moram da resim po nacinu koji mi je dosadan profesor rekao.
Ako bi mi mogao samoda objsnis kako naterati onaj sat koji smo mi dobili da mu kazaljka bude celo vreme iste daljine? razumes, meni netreba pravi sat, to imam samo to mi treba. Hvala [ Srki_82 @ 31.03.2005. 18:24 ] @
Da bi mogao da stalno crtas kazaljku iste duzine jedan njen kraj ostaje u sredini, a drugi se krece po nekoj kruznici... a to ces tesko da uradis bez sin i cos. Bar ja ne znam kako drugacije.
Ovaj sat se okrece u nazad ili mi se samo cini!? To je samo jos jedan znak da treba da se koristi sin i cos. Sin i cos uzimaju uglove u matematickom smeru (valjda se tako kaze), a on je suprotan smeru okretanja kazaljke. Koliko znam u Palscal-u ne mozes da definises cliping region. Ako je to moguce onda je tvoj problem sa iscrtavanjem resen. Postavis cliping region oko kruga i sve sto se crta van njega se ne vidi. za c) i d) koristi TextOutXY proceduru. Za izlazak iz programa u bilo kom trenutku posle prvog okretanja treba da dodas jos jednu promenljivu... recimo CanExit. Na pocetku programa je postavi na False, a na kraju Repeat Until petlje je postavi na True. U svakoj for petlji na pocetku stavi Code: if CanExit and KeyPressed then Exit; To je to. [ H-I-D-E @ 31.03.2005. 18:39 ] @
Aha, jel moze da onda da mi napises taj program kako si reko.
shvatio sam to. trebao bi mi gotov program, jer, jos sam pocetnik, a glupi prof bi da vec radim sve sam. shvatim ja to, ali tek u analizi, jos mi je malo tesko da pisem sam. Hvala ti unapred, puno si mi pomogao. [ Srki_82 @ 31.03.2005. 21:53 ] @
Problem je sto ja nemam Turbo Pascal, a u Delphi-u su komande za crtanje malo drugacije. Ne mogu da pisem ni napamet (bez syntax checking-a) jer TP nisam godinama koristio i zaboravio sam skoro sve sto je vezano za BGI. Imas ideju sad jos samo nadji nekog sa znanjem TP-a.
[ H-I-D-E @ 31.03.2005. 22:03 ] @
Ako ti se da, mozes mi to rijesiti i u DELPHIJU, vjerojatno ce tip biti zadovoljan.
Puno ti hvala na trudu, a ako trebas TP, reci, imam ga, naso sam ga za pola minue. [ Srki_82 @ 31.03.2005. 23:03 ] @
Ovako bi to nekako izgledalo u Pascal-u (neces moci da iskompajliras ovo, ali ces verovatno lako ispraviti greske u funkcijama koje sam zaboravio kako se koriste):
Code: program Sat_V1; const CentarX = 350; CentarY = 320; Precnik = 354; Duzina = 100; Preciznost = 719; var CanExit: Boolean; I: Integer; procedure NacrtajKazaljku(Ugao: Real); var X, Y: Real; begin X := Cos(Pi / 2 + Ugao) * Duzina; Y := Sin(Pi / 2 + Ugao) * Duzina; Line(CentarX, CentarY, Trunc(X), Trunc(Y)); end; begin CanExit := False; InitGraph; // Ne znam kako ide ova funkcija Circle(CentarX, CentarY, Precnik); repeat for I := 0 to Preciznost do begin SetColor(White); NacrtajKazaljku(2 * Pi / Preciznost * I); Delay(33); SetColor(Black); NacrtajKazaljku(2 * Pi / Preciznost * I); if CanExit and KeyPressed then Exit; end; CanExit := True; until KeyPressed; CloseGraph; end. To bi bilo to... bar mi se trenutno u glavi cini da radi kako treba ![]() [ IgLo @ 01.04.2005. 02:14 ] @
Citat: Srki_82: To bi bilo to... bar mi se trenutno u glavi cini da radi kako treba ![]() Srki, zaboravio si par sitnica, nadam se da neces zameriti sto cu ti malo "razvaliti" kod ![]() Code: program Sat_V1; Uses CRT, Graph; const CentarX = 320; CentarY = 240; Precnik = 200; Duzina = 100; Preciznost = 719; var CanExit: Boolean; I: Integer; procedure NacrtajKazaljku(Ugao: Real); var X, Y: Real; begin X := Cos(Pi /2 + Ugao) * Duzina + CentarX; Y := Sin(Pi /2 + Ugao) * Duzina + CentarY; Line(CentarX, CentarY, Trunc(X), Trunc(Y)); OutTextXY (CentarX - TextWidth ('Ovo je pijani sat') Div 2, CentarY - TextHeight ('Ovo je pijani sat') Div 2, 'Ovo je pijani sat'); end; Var gd, gm : Integer; begin CanExit := True; InitGraph(GD,GM,'..\BGI'); Circle(CentarX, CentarY, Precnik); SetTextStyle (DefaultFont, HorizDir, 3); OutTextXY (CentarX - TextWidth ('12') Div 2, CentarY - Precnik + TextHeight ('12') - 20, '12'); OutTextXY (CentarX - TextWidth ('18') Div 2, CentarY + Precnik - TextHeight ('18'), '18'); OutTextXY (CentarX - Precnik + TextWidth ('21') - 40, CentarY - TextHeight ('21') Div 2, '21'); OutTextXY (CentarX + Precnik - TextWidth ('15'), CentarY - TextHeight ('15') Div 2, '15'); SetTextStyle (DefaultFont, HorizDir, 1); repeat For I := 0 To Preciznost Do Begin SetColor(White); NacrtajKazaljku(2 * Pi/Preciznost * I); Delay(33); SetColor(Black); NacrtajKazaljku(2*Pi / Preciznost * I); if CanExit and KeyPressed then Exit; end; CanExit := True; until KeyPressed; CloseGraph; end. Problem je bio sto Cos(Pi /2 + Ugao) * Duzina vraca kordinatu u odnosu na kordinatni pocetak (0,0), a ne centar kruga, tako da se kazaljka pomerala gore dole u gornjem levom kvadrantu. Drugi problem je bio sa rezolucijom. Ne znam koje graficke kartice se koriste za testiranje ovoga, ali dati kod na VGA kartici inicijalizuje 640x480, pa je sve prilagodjeno tome. Jedino ako profesor pomocu nekih trikova nije naterao TP da mu inicijalizuje VESA modove pomocu ovog koda ![]() Dodat je kod koji ispisuje tekstove (za konstante ne pitajte zasto su takve - stelovao sam dok nije lepo ispalo ![]() [ H-I-D-E @ 01.04.2005. 09:00 ] @
Mnogo vam hvala decki, legende ste!
![]() Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|