Article View: pl.comp.lang.pascal
Article #92860Re: rysowanie kółek w pascalu
From: Łukasz 'Maly' Ostrowski
Date: Mon, 13 Apr 2009 16:22
Date: Mon, 13 Apr 2009 16:22
93 lines
4062 bytes
4062 bytes
On Mon, 13 Apr 2009 06:24:49 -0700 (PDT), bala_dżi wrote:
> Tak, wiem o tym ale nie bardzo wiem jak to zaimplementowac. Byłbym
> wdzięczny jakbyś mi napisał fragment kodu z tym sprawdzaniem.
> W podręczniku od informatyki mam przedstawione tylko łatwe przykłady z
> rysowania okręgów, te trudniejsze są w formie "zrób-se-sam" ;-).
Zacznijmy od pseudokodu, a Ty powiedz który fragment jest w
nim zbyt skomplikowany/niejasny:
1. Rozpoczynamy z pusta kolekcja okręgów
2. Dopoki nie spełniamy warunku zakończenia*
3. Losujemy sobie okrag (x,y,r)
4. Jezeli okrag nie znajduje się w kolekcji
5. Dodajemy go do kolekcji.
*) Warunek krańcowy może być zależny od ilości prob wrzucenia
kolejnego okregu, ogolnej ilości okręgów w kolekcji etc.
Z racji na zapewne Twoją nieznajomość złożonych typów danych,
kolekcja okregów u Ciebie automagicznie zmienia się w
const
MAX_ITEMS = 1337;
type
TTab = array[1..MAX_ITEMS] of integer;
var
tx : TTab;
ty : TTab;
ile : integer; // ilosc elementow w kolekcji
Zakładając że wszystkie promienie są równe dochodzi do
tego:
var
r : integer;
I potrzebujesz do szczęścia jeszcze sprawdzenia czy dany
okrag jest "legalnie postawiony" pośrod wszystkich istniejących.
Przy czym to sobie ulatwiasz za pomocą dekompozycji
do dwóch 'pod-problemów' ;) :
function czyKolidujaDwa(x1,y1,r1,x2,y2,r2):boolean;
begin
// umiesz zaimplementowac?
end;
procedure dodajOkrag(ox,oy);
begin
// też powinieneś w stanie być odpowiednio zmanipulowac
// zmienne tx, ty i ile zeby dodac element do kolekcji
end;
function czyKolidujeZeWszystkimi(x,y,r):boolean;
begin
czyKoliduje := false;
for n:=1 to ile do
if (czyKoliduja2(tx[n], ty[n], r, x, y, r))
czyKoliduje := true; // tu mozna nawet machnac Exit(true); ;)
Result := czyKoliduje;
end;
W pseudokodzie celowo brakuje niektórych delaracji.
Musisz klocki uzupełnić i poskładać do kupy.
W razie czego mów co jest niejasne, wszystko pisane na
kolanie, mogłem coś spie... zepsuć. ;).
> Ekran z założenia ma być ograniczony. Okręgi, jak zapewne się
> domyślasz wystają, chciałbym aby nie wystawały, będe musiał dołożyć
> jeszcze jedna procedurę sprawdzającą przecięcia:
> z osią x dla x np:320
> i analogicznie dla y
Utrudniasz sobie, losuj przesunięte okręgi.
x := Random(320-2*r)+r;
analogicznie y. Będziesz miał pewniaka że wszysto będzie
w View Porcie, bez zbędnego kombinowania.
p.s. Jakiego kompilatora używasz? Mam nadzieję że fpc
bo ja preferuje ten dialekt, i preferuje ludzi
nie używających archaicznego Turbo Pascal'a z
powodów:
- bo nauczyciel każe kraść
- bo tak
;-).
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
ICQ: 148498663 GG: 2544385 AIM: malyzgora
GTalk: l3vi4than@gmail.com ASTRA: L3viathan
Technical Details
Message-ID:
<1wwtx7p9jg45z.1qenm4vzw4dnd$.dlg@40tude.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<965c12ab-f22e-4c33-be78-3718696c62c7@r33g2000yqn.googlegroups.com> <bjr6f5u3nmup.7gtm65h9drt6.dlg@40tude.net> <cf45cc82-118b-403c-9d74-0f2e44329e03@l1g2000yqk.googlegroups.com> <q025rvbbsfsw.1ll6oa39v41ha$.dlg@40tude.net> <8be05bb3-a81c-45ec-8d42-a56108df3072@f17g2000vbf.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Łukasz 'Maly' Ostrowski <maly@nemo.pl> Newsgroups: pl.comp.lang.pascal Subject: Re: rysowanie kółek w pascalu Date: Mon, 13 Apr 2009 18:22:20 +0200 Organization: Acme Lines: 93 Message-ID: <1wwtx7p9jg45z.1qenm4vzw4dnd$.dlg@40tude.net> References: <965c12ab-f22e-4c33-be78-3718696c62c7@r33g2000yqn.googlegroups.com> <bjr6f5u3nmup.7gtm65h9drt6.dlg@40tude.net> <cf45cc82-118b-403c-9d74-0f2e44329e03@l1g2000yqk.googlegroups.com> <q025rvbbsfsw.1ll6oa39v41ha$.dlg@40tude.net> <8be05bb3-a81c-45ec-8d42-a56108df3072@f17g2000vbf.googlegroups.com> NNTP-Posting-Host: static-78-8-208-81.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1239639796 10524 78.8.208.81 (13 Apr 2009 16:23:16 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Mon, 13 Apr 2009 16:23:16 +0000 (UTC) User-Agent: 40tude_Dialog/2.0.15.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit