🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #92860

Re: rysowanie kółek w pascalu

#92860
From: Łukasz 'Maly' Ostrowski
Date: Mon, 13 Apr 2009 16:22
93 lines
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-mail
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>

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