Dziwna rzecz podczas rysowania na canvie

0

Witajcie!

Muszę napisać algorytm w c++ rysujący pewnego fraktala. Rysunek fraktala dostępny jest pod adresem http://republika.pl/rotsenbox/Image2.jpg . Mam C++ Builder 6 Ent i napisałem w nim pewną funkcję:

void TForm1::mydraw(int x, int y, int l, int t)
{

  Canvas->MoveTo(x, y);
  Canvas->LineTo(x + l/2, y - l/4);
  Canvas->LineTo(x + l, y);
  Canvas->LineTo(x + l, y + l/2);
  Canvas->LineTo(x + l/2, y + l/2 + l/4);
  Canvas->LineTo(x, y + l/2);
  Canvas->LineTo(x, y);


  if (t > 1)
  {
    mydraw(x, y, (l/5)*2, t-1);
    mydraw(x, y + (l/10)*3, (l/5)*2, t-1);
    mydraw(x + (l/68)*24, y - (l/20)*3, (l/5)*2, t-1);
    mydraw(x + (l/68)*24, y + (l/20)*9, (l/5)*2, t-1);
    mydraw(x + (l/68)*48, y, (l/5)*2, t-1);
    mydraw(x + (l/68)*48, y + (l/10)*3, (l/5)*2, t-1);
  }
}

Po wywołaniu jej z parametrami: mydraw(200, 200, 400, 2) jest prócz gwiazdy niby wszystko dobrze. Jeśli parametr l zmienie np. z 400 na 100 to juz zaczyna sie krzywic :-( Psują się środkowe figury i te na prawo wiec podejrzewam ze chodzi tu o (l/68)*24 itd. Ale dlaczego tak jest?

Dziękuje za wszystkie odpowiedzi.

Ps. jak można zapełnić tą gwiazde w środku? Dopiero ucze sie c++ :-)

0

Nie chce mi się sprawdzać... Ale dziwna wydaje mi się (wszystko wydaje mi się dziwne, ale to szczególnie) ta konstrukcja:

Canvas->MoveTo(x, y);
   Canvas->LineTo(x + l/2, y - l/4);
   Canvas->LineTo(x + l, y);
   Canvas->LineTo(x + l, y + l/2);
   Canvas->LineTo(x + l/2, y + l/2 + l/4);
   Canvas->LineTo(x, y + l/2);
   Canvas->LineTo(x, y);

Jeżeli się nie mylę (czego nie mogę zagwarantować :p) to po wywołaniu każdego LineTo początek skąd jest rysowana linia nie będzie zmieniony, więc po co na koniec znowu LineTo(x,y), skoro to będzie linia od (x,y) do (x,y), czyli jej nie będzie?

PS> Sprawdź coś z Fill, a jak nie to zarysuj to miejsce liniami...

0

Jakby początek nie zostawał zmieniony to guzik by mnie wyszło, a tu mam całkiem podobną figurę.

Najlepiej jak sami wkleicie tą funkcję to zobaczycie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1