• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JAVA - Edytor graficzny tworzący figury

0 głosów
494 wizyt
pytanie zadane 15 listopada 2015 w Java przez Rayden Użytkownik (610 p.)

Witam,

muszę stworzyć edytor graficzny, który pozwala dodawać różne figury -> punkty, prostokąty, kwadraty, koła, elipsy itd oraz różne zdarzenia od myszki i klawiatury. Mam mieć funkcję isInside (czy punkt jest w srodku danej figury) i dzieki temu, jak kliknę wewnątrz figury - zaznacza się i mogę ją przesuwać powiększać itd.

Mam już zrobione funkcje isInside dla punktu, koła i trójkąta (podane przez prowadzącego). Starałem się zrobić funkcję dla prostokąta (analogicznie jak dla trójkąta), ale niestety bezskutecznie.

Oto kod funkcji isInside dla trójkąta:

public boolean isInside(float px, float py)
    { float d1, d2, d3;
      d1 = px*(point1.y-point2.y) + py*(point2.x-point1.x) +
           (point1.x*point2.y-point1.y*point2.x);
      d2 = px*(point2.y-point3.y) + py*(point3.x-point2.x) +
           (point2.x*point3.y-point2.y*point3.x);
      d3 = px*(point3.y-point1.y) + py*(point1.x-point3.x) +
           (point3.x*point1.y-point3.y*point1.x);
      return ((d1<=0)&&(d2<=0)&&(d3<=0)) || ((d1>=0)&&(d2>=0)&&(d3>=0));
    }

Jeśli dobrze się orientuje jest to zrobione za pomocą 3 równań trójkąta i tak też chciałem zrobić dla prostokąta:

public boolean isInside(float px, float py)
    { float d1, d2, d3, d4;
      d1 = px*(point1.y-point2.y) + py*(point2.x-point1.x) +
           (point1.x*point2.y-point1.y*point2.x);
      d2 = px*(point2.y-point3.y) + py*(point3.x-point2.x) +
           (point2.x*point3.y-point2.y*point3.x);
      d3 = px*(point3.y-point4.y) + py*(point4.x-point3.x) +
           (point3.x*point4.y-point3.y*point4.x);
      d4 = px*(point4.y-point1.y) + py*(point1.x-point4.x) +
              (point4.x*point1.y-point4.y*point1.x);
      return ((d1<=0)&&(d2<=0)&&(d3<=0)&&(d4<=0)) || ((d1>=0)&&(d2>=0)&&(d3>=0)&&(d4>=0));
    }

Jak ktoś mógłby powiedzieć, gdzie mam błąd w kodzie byłbym bardzo wdzięczny.

Z góry dziękuję :)

1 odpowiedź

0 głosów
odpowiedź 15 listopada 2015 przez furas Maniak (53,680 p.)

A właściwie to jaki algorytm tu wykorzystujesz na sprawdzanie czy punkt jest wewnątrz figury ?

To że coś działa dla trójkąta nie znaczy, że wystarczy dodać jeszcze jeden warunek aby zadziałało dla większej figury. Zależy to od algorytmu.

---

A tak swoją drogą to prostokąt można łatwo podzielić na dwa trójkąty i dla każdego z nic sprawdzić.

Podobne pytania

0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 23 września 2020 w C i C++ przez Grzegorz Szyszka Nowicjusz (120 p.)
0 głosów
1 odpowiedź 479 wizyt
pytanie zadane 30 października 2019 w HTML i CSS przez Mavimix Dyskutant (8,360 p.)
+1 głos
3 odpowiedzi 192 wizyt
pytanie zadane 13 maja 2016 w Grafika i multimedia przez Hadamalush Obywatel (1,880 p.)

88,677 zapytań

137,289 odpowiedzi

306,652 komentarzy

58,873 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...