Powoli rysujacy sie kwadrat

0

Witam. Jak zrobić aby było widać jak ten kwadrat się rysuje?? Potrzebuje to mieć w Free Pascalu nie w delphi ani asm..

uses graph;
var s,t:integer;
begin
s:=detect;
initgraph (s,t,'');
rectangle(100,100,400,400);
end.
0

Rysuj piksel po pikselu i co parę pikseli rób sleep.

1

No dobra. Zainwestuj w 8086.

0
ProProgramer napisał(a)

Weź nie podawaj mi tu przykładów mikroprocesorów tylko jakies konkretne podpowiedzi..

Słuchaj koleś, ludzie mają wchodzić, czytać Twoje wątki i odpowiadać na pytania tylko po to, żebyś sobie pomarudził?

@Wibowit podał Ci sposób, dzięki któremu możesz to wykonać, więc zamiast jojdać może weźmiesz się do roboty i sprawdzisz jak to działa? Chyba, że trzeba Ci jeszcze podać dokumentację procedury Sleep() i gotowca z różnymi przykładami?

2

pro to ty jesteś ale idiota. Dostałeś konkretne rozwiązanie to czego jeszcze chcesz? Jak chcesz pokazać jak się kwadrat rysuje rysując go "na raz"??

2

@proprogrammer:
Mała podpowiedź - piksele rysuj w pętli. Dzięki temu wyjdzie kilka linijek kodu, zamiast około 90 000 (300x300).

0

Wiem, że jest jakiś sposób z buforem..

No widzisz? To albo jesteś wyjątkowym debilem, albo jesteś mądrzejszy od nas wszystkich tu obecnych! Ja zgaduję że to pierwsze...

1
ProProgrammer napisał(a)

Pixelowanie kwadratu zajeło by mi cały dzien..!

Zmieńcie mu nicka, na JestemIdiotąProProgrammer :)

Bitch please..! :D Rozjebałeś mnie tym.. tekst roku normalnie :D

0
ProProgramer napisał(a)

Pixelowanie kwadratu zajeło by mi cały dzien..!

Ja normalnie oci___je za niedługo... Słyszałeś kiedyś o takim dziwnym ficzer'ze jak PĘTLA??? Ty naprawdę nie masz zielonego pojęcia o programowaniu...

Jadeszek napisał(a)

Zepsułeś całą zabawę. ;-)

Najwyraźniej tak, bo faktycznie zajebiście długo trwałoby pikselowanie kwadratu bez wykorzystania pętli;

Może lepiej będzie napisać algorytm do generowania kodu, który będzie pikselował? Dzięki temu wygenerujesz sobie 180 tys. linii jednym kliknięciem, a później wkleisz do kodu modułu? Niezłe, muszę zacząć w ten sposób programować, a aplikację będą super szybkie i wagowo lepsze od czystego API...

2

Proszę, dokładnie 90602 linii/linie kodu:
code.pas

Przyjmując, że pisałbyś dokładnie jedną linijkę na 2 sekundy zajęłoby ci to ~13 godzin.

A skompilowana aplikacja zajmuje... 1.5 MB (czysta, konsolowa, bez jakichkolwiek modułów; PutPixel oraz Sleep to nic nie robiące funkcje) w porównaniu z 16 KB aplikacji która to generowała :P

0

@ProProgramer palnąłeś kawał, który zrozumie jednodniowy programista. Gdy i ty go zrozumiesz będziesz w stanie napisać ten program.

edit: spóźniłem się 2 min :)

co do twojego pytanie o procedurkę to chyba sam sobie już odpowiedziałeś.

0

Poradziłem sobie z petlą i tym prostokatem.. A teraz mam pytanko czy jest jakiś sposób aby nie psiać drugi raz tej petli z prostokatem tylko np zrobić z tej petli jakas procedurke i zeby sie juz kwadrat, i prostokat malował..?

Tak da się zrobić... Tak się nawet powinno robić :P

0
ProProgramer napisał(a)

A jak..?

A bardzo prosto; Napisz sobie szkielet procedury, wyposaż ją w potrzebne parametry oraz oprogramuj pętlę rysującą kwadrat wykorzystując argumenty; Za każdym razem, gdy będziesz potrzebował narysować kwadrat wywołasz jedynie procedurkę z odpowiednimi argumentami;

To jest podstawa krótkiego i zwięzłego kodu - poczytaj o regule DRY;

0

Jak już coś to takie coś:

procedure abc();
begin
  for i:=1 to 300 do
  begin
    PutPixel(100+i,100,kolorlini);
    delay(10);
  end;

  for i:=1 to 400 do
  begin
    PutPixel(400,100+i,kolorlini);
    delay(10);
  end;

  for i:=1 to 300 do
  begin
    PutPixel(400-i,500,kolorlini);
    delay(10);

  end;

  for i:=1 to 400 do
  begin
    PutPixel(100,500-i,kolorlini);
    delay(10);
  end;
end;

Naucz się formatować kod i wstawiać go pomiędzy znacznikami <code class="delphi">Kod</code> - będzie bardziej przejrzysty i zrozumiały dla innych;

Brakuje Ci przede wszystkim argumentów procedury, według których rysowana będzie figura; Poza tym tak jak wcześniej napisał @Patryk - wystarczą dwie zagnieżdżone pętle do rysowania prostokątu;

0

np zamiast:

  for i:=1 to 300 do
  begin
    PutPixel(100+i,100,kolorlini);
    delay(10);
  end;

daj

for i:=1 to w do
begin
    PutPixel(x+i, y, kolorlini);
    delay(10);
end;
0

Ja proponuję taki szkielet procedury:

procedure DrawRectangle(X, Y, Width, Height: Word; LineColor: TColor);
begin

end;

Masz w tym:

  1. X - współrzędna X na ekranie,
  2. Y - współrzędna Y na ekranie,
  3. Width - szerokość figury,
  4. Height - wysokość figury,
  5. LineColor - kolor linii (typ ustaw sam, bo nie wiem jaki wykorzystujesz);
    I teraz wykorzystaj podane parametry do rysowania figury;

Przykład wywołania (dla Borland Delphi 7):

DrawRectangle(100, 100, 300, 300, clWhite);
2

Przednia zabawa.

0

Masz jeszcze jedną podpowiedź:

RectProps.png

(ewentualnie odjęcie 1 przy Width / Height, ale nie zagłębiałem sie dokładniej);

Znając takie rzeczy wiesz wszystko, co trzeba do napisania procedury malującej dowolny prostokąt;


Chyba czas opisać obrazek...

  1. Linia górna - pikesele o współrzędnych od [X, Y] do [X + Width, Y],
  2. Linia dolna - piksele o współrzędnych od [X, Y + Height] do [X + Width, Y + Height],
  3. Linia lewa - piksele o współrzędnych od [X, Y] do [X, Y + Height],
  4. Linia prawa piksele o współrzednych od [X + Width, Y] do [X + Width, Y + Height];
    I to tyle, nie trzeba być niesamowitym programistą by takie coś zrobić; Tobie nie o tyle brakuje wiedzy z programowania, tylko z matematyki, bo to są proste obliczenia, a funkcję rusyjącą piksel znasz;
0
ProProgramer napisał(a)

To w końcu w czym mam błąd

To nie błąd, tylko niedopatrzenie; W sumie sam już nie wiem jak to nazwać...

Wiesz w ogóle cokolwiek o procedurach / funkcjach? O ich parametrach (argumentach)? Bo jeśli ja Ci piszę, że masz wykorzystac parametry w ciele funkcji, bo po to się je podaje, to Ty masz pętle ustawione na sztywno...

Jeśli podaję Ci informację, że masz użyć parametrów, to podczas pisania pętli muszą się w niej znaleźć...


Przykładowe wykorzystanie podanych parametrów:

{ DEFINICJA PRZYKŁADOWEJ PROCEDURY }
procedure Foo(X, Y: Word);
begin
  WriteLn('Podana wspolrzedna X: ', X);
  WriteLn('Podana wspolrzedna Y: ', Y);
end;

{ PRZYKŁADOWE WYWOŁANIE PROCEDURY }
Foo(100, 100);

Ta procedura obsługuje (wykorzystuje) podane parametry (diwe liczby jako współrzędne); Obsługuje, czyli w tym wypadku wyświetla ich wartość;

Skoro podaję podczas wywołania X = 100 i Y = 100, to znaczy, że po wywołaniu tej procedury na ekranie zostanie pokazane to:

Podana wspolrzedna X: 100
Podana wspolrzedna Y: 100

Tak się właśnie wykorzystuje podane argumenty; Ty masz je w definicji procedury podane, ale w jej kodzie ich nie ma, więc rysowanie zawsze będzie odbywać się tak samo;

Zastanów się nad tym jak wykorzystać Twoje parametry;

3

Macie cierpliwość. Tyle postów. Ten temat to jakiś żart. Zamiast prowadzić ProProgramera krok po kroczku, odeślijcie go do książki. Przecież przed chwilą jeszcze nie wiedział, że jest coś takiego jak pętla (albo wiedział, ale nie myślał że można tego tak "po prostu" użyć).
Jeżeli natomiast ma problem z problemem od strony matematycznej, czy ogólnie projektowej (nie wiem jak to nazwać), w takich banałach, no to cóż - pozostaje dla niego kartka, długopis i rozmyślania. Nie chcę nikogo przekreślać, ale pytania z tego wątku są mocno przesadzone swoją prostotą.

0

Co to jest X1 i Y1...? Współrzędne prawego dolnego rogu...? Bo jeśli tak to co Ty wyprawiasz...?


ubuntuser napisał(a)

Zamiast prowadzić ProProgramera krok po kroczku, odeślijcie go do książki.

Zobacz w poprzednich postach ile razy został odesłany do kursu z podstaw programowania...

0
ProProgramer napisał(a)

Dalej mi to nic nie mowi.. Ja dopiero zaczynam z programowaniem w wy wszyscy tu obecni wszystko po kończone..
patrząc na twoje problemy ze składnią i logiką dobrze by było gdybyś zaczął programować od logo czy innej grafiki żółwia i nie piszę tego z przekąsem.

2

Koniec, poddaję się... Niech ktoś bardziej cierpliwy wytłumaczy autorowi jak to zrobić;

2

Teraz kolejne newbe będą truć aż nie dostaną gotowca. Tak ich uczycie. Jeśli autor tematu nie potrafi napisać takiego programu to jego problem. Niech go komuś zleci albo się poduczy.

2
Furious Programming napisał(a)

I minusujcie sobie, mam to gdzieś; Jemu nie wytłumaczy nic, nie zmusi domyślenia, będzie pytał dotąd, aż dostanie gotowca, więc podałem mu jedno z multum rozwiązań; To jest jedna animacja, może ich być wiele, ta rysuje po obwodzie zgodnie z kierunkiem wskazówek zegara; Jak chce mieć inną niech sobie napisze; Wszystko jest beznadziejnie proste, ale trzeba poczytać; Ten nie przeczytał nic, nie wykorzystał licznych wskazówek, więc nawet za miesiąc nie napisze tego algorytmu;

A czy to jest Twój, mój, nasz problem? To jest jego problem, on ma to wymyślić, on ma to zakodzić. Boli Cię, że tego nie potrafi? Gość nie jest chętny do nauki, do posiedzenia nad zadaniem chociaż chwilę, więc nie jest mi go żal ani trochę. A jak przyjdzie Ci kiedyś z nim (lub podobnym jemu) spotkać się na studiach/w pracy i będziecie mieli do wykonania jakieś wspólne zadanie, a on będzie truł dupę, że nie potrafi, że nie rozumie podstawowych zagadnień matematycznych itd., to co? Też mu pomożesz się prześliznąć, bo może następnym razem już truł d**y nie będzie?

Furious Programming napisał(a)

Zobacz ile wskazówek dostał, ile tłumaczenia było, nic tylko siąść i płakać... Mam nie dać gotowca? temat do północy będzie miał 10 stron z pytaniami... Przynajmniej nie będzie 100 niepotrzebnych postów na rzecz jednego, cholernego gotowca...

O ile dobrze pamiętam, to to forum ma jeszcze moderatorów. Jak się taki jeden z drugim za bardzo rozbryka to są odpowiednie metody do uciszania, więc się nie bój. Najlepszym i najprostszym sposobem jest zostawienie go samemu sobie. Jak go przyciśnie, to siądzie sam i zrozumie. Jak nie siądzie lub nie zrozumie, to (powtórzę się) jest JEGO problem.

Miłego odpoczynku życzę Wam wszystkim.

0

No jak chcesz do deltoidów, trójkątów tego użyć?
Nazwij napisaną funkcję "DrawRectangle" i napisz "DrawTriangle", która rysuje za pomocą trzech wierzchołków. I najlepiej przeładuj też DrawRectangle by dało się za pomocą czterech punktów narysować prostokąt.

0

Może zrób sobie coś takiego:

type
  TPoint = record
    x : Integer;
    y : Integer;
  end;

I wtedy dajesz:

procedure abc(points : array[0..3] of TPoint);
6

Jak chcesz mieć wolno rysujący się prostokąt, to musisz użyć komponentu TSlowRectangle.

2

korci mnie, żeby do perełek przenieść ten wątek. @ProProgramer: zacznij myśleć samodzielnie, a na forum pytaj o szczegóły techniczne. w przeciwnym razie zablokuję ten wątek i ewentualne kolejne.

0

Popłakałem się ze śmiechu czytając ten wątek :D w ciągu kilku sekund wymyśliłem procedurę rysującą prostokąt na ekranie DrawRectangle (x,y,width,height,color : Word); i polecam książkę Turbo Pascal od 8 do 88 lat :D

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