Pochylenie w Delphi

0

siema, mam problem odnosnie pochylenia kwadratu. W załączniku program, wie ktoś co tam dodać żeby można było jeszcze pochylić figure?

prosze o pomoc :(

1
ewelinka89 napisał(a)

wie ktoś co tam dodać żeby można było jeszcze pochylić figure?

Nie wiem dokładnie o co Ci chodzi, czy o pochylenie w taki sposób, że prostokąt staje się rombem, czy o obrócenie prostokąta względem jednego z wierzchołków w daną stronę i o dany kąt; Napisz dokładniej co chcesz osiągnąć;

Jeśli chodzi o sam program to polecam przyjrzeć się procedurze spod button'a Skaluj, ponieważ po wpisaniu współczynnika większego niż 7 figura nie mieści się w formularzu, ale nie dlatego, że ma tak duży rozmiar tylko zwiększasz za każdym razem współrzędne lewego górnego wierzchołka; Oblicz sobie wielkość jaką musi mieć figura ale rysuj ją zawsze w miejscu [X1, Y1] (czyli tam, gdzie wskazują na to pola edycyjne Edit1 i Edit3, czyli X1 i Y1);


@ Poza tym te zmienne (prócz Form1: TForm1):

var
  Form1: TForm1;
  x1,y1,x2,y2,gr:Integer;
  s:Real;
  kolor:TColor;

przenieś pod sekcję private w klasie formularza; Zmiennych globalnych nie powinno się używać - jeśli potrzeba udostępnić je dla innych modułów, jest do tego sekcja public;

1

nie rysuj kwadratu przez Rectangle tylko przez Polygon albo LineTo / MoveTo rysując po linii i przekazując współrzędne wierzchołków
wtedy przechylanie robisz bardzo prosto - po prostu przesuwasz górne wierzchołki o Hx pikseli a prawe wierzchołki o Hy

1

a umiesz to jakos w tym programie w załączniku to dodać zeby działało?

Tłum.: Czy dasz mi gotowca?

Może jeszcze skompilować bo delphi nie masz? I jeszcze pewnie oczekujesz na to gwarancji i supportu 24/7?

Zamiast szukać gotowców naucz się PROGRAMOWAĆ, tak jak tego od ciebie wymagają (widać mają ku temu jakiś powód). Są kursy nawet dla totalnych tępot, ale ja (i mam nadzieję reszta również) NIE WSPIERAM GOTOWCÓW bo to tylko dobra droga do wspierania leniów, nierobów i osób które grają na ludzkiej życzliwości. Idź do googla, naucz się programować i zrób jak ci inni powiedzieli.

1
unikalna_nazwa napisał(a)

nie rysuj kwadratu przez Rectangle tylko przez Polygon albo LineTo / MoveTo

Tak to powinno wyglądać; Metoda Rectangle potrafi jedynie rysować wszelkie prostokąty, ale bez jakichkolwiek innych udziwnień;

Do wykonania tego co chcesz wykonać nie potrzeba Ci żadnych skomplikowanych obliczeń;

Możesz wykorzystać gotowe metody klasy TCanvas do rysowania wieloboków (czyli Polygon lub Polyline), lub ręcznie w pętli malować poszczególne boki figury wykorzystując MoveTo i LineTo - metody służące odpowiednio do przenoszenia kursora graficznego oraz malowania linii do podanego punktu od miejsca, w którym znajduje się kursor;

Pierwsze metody (Polygon i Polyline) jako argument przyjmują macierz punktów-wierzchołków figury i malują ją na ich podstawie; Musisz jedynie zadeklarować sobie macierz dynamiczną, do której wpiszesz w procedurze rysującej punkty o wartościach pobranych z pól edycyjnych i odpowiednio obliczonych, a następnie podanie ich jako argument metody; Trzeba jednak trochę poczytać o macierzach dynamicznych i nauczyć się na prostym przykładnie wykorzystywać je; Nie ma w tym nic trudnego - odsyłam do artykułu o macierzach;

Drugi sposób jest też ciekawy, odpowiednio przenosisz kursor graficzny w dane miejsce (trzeba pozycję wierzchołków obliczyć na podstawie danych zawartych w polach edycyjnych) metodą MoveTo, następnie obliczasz położenie kolejnego wierzchołka i metodą LineTo malujesz linię do nowego wierzchołka; I znowu obliczasz współrzędne następnego wierzchołka i używasz w pętli metody LineTo dla kolejnego wierzchołka, i kolejnego, i kolejnego aż zamkniesz figurę; Podpowiem, że metody MoveTo używasz raz, później odpowiednią ilość razy malujesz linię do kolejnych wierzchołków, aż figura zostanie zamknięta;

Nic w tym trudnego, wystarczy tylko poczytać;

1

no dobra zlituję się

Canvas.MoveTo(X_POCZATKA + Hx, Y_POCZATKA);
Canvas.LineTo(X_POCZATKA + SZEROKOSC + Hx, Y_POCZATKA + Hy);
Canvas.LineTo(X_POCZATKA + SZEROKOSC, Y_POCZATKA + WYSOKOSC + Hy);
Canvas.LineTo(X_POCZATKA, Y_POCZATKA + WYSOKOSC);
Canvas.LineTo(X_POCZATKA + Hx, Y_POCZATKA);

jeśli nie potrafisz tego zastosować to niestety już sprawa beznadziejna :((

1
ewelinka89 napisał(a)

Myslalam ze tu ktos umie pomoc a nie odsyła do google.pl , naucz sie programowania i sobie zrob. Dzieki za taka pomoc, to takie latwe ale nikt nie umie zrobic zeby funkcjonowało , tylko posmiac sie z kogos bo sam "super programista" jest.

Ja rozumiem, że początkującemu trudniej zrozumieć pewne rzeczy, ale staramy Ci się pomóc; Od początku istnienia wątku dostajesz podpowiedzi na temat przerobienia programu pod kątem pochylania figury; Dostajesz wskazówki a nie gotowce dlatego, że rozwiązać problem musisz sama; Choć @unikalna_nazwa dał Ci gotowy kod, który możesz skopiować do swojego programu jedynie zmieniając nazwy identyfikatorom zmiennych/stałych; Ciesz się, że kolega @123 nie wypowiedział się, bo on lubi jeździć po tych, którzy sami nie chcą nic zrobić i tylko czekają na gotowe (i ma rację);

ewelinka89 napisał(a)

Niech ktos rozwiąze problem, a nie rzuca ze macierz uzyc, to to i ja ja wiem...

Problem jest rozwiązany, podaliśmy Ci informacje, które musisz wiedzieć bo to zrealizować oraz @unikalna_nazwa dał Ci gotowca; Podałem Ci pomysł na wykorzystanie macierzy, ale obsługi ich Cię nie nauczę, bo sama musisz wiedzieć jak się tym posługiwać; Jest od tego mnóstwo kursów (na tej stronie jest nieźle opisana obsługa macierzy dynamicznych - dałem Ci link), które polecam przejrzeć; Jeśli nie będziesz znała takich pojęć i podstawowych operacji to gotowiec jest zbędny, bo nie przerobisz go jeśli go nie rozumiesz;

Tak więc siądź przy tym spokojnie i zastanów się jak to ma wyglądać, co musisz zrobić (jakich obliczeń) by to zadziałało i zrób to; Masz do dyspozycji kod, który działa, więc kwestią jest tylko zrozumienie go;

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