• 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

Object Storage Arubacloud
0 głosów
577 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,800 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ź 618 wizyt
pytanie zadane 23 września 2020 w C i C++ przez Grzegorz Szyszka Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,034 wizyt
pytanie zadane 30 października 2019 w HTML i CSS przez Mavimix Dyskutant (8,420 p.)
+1 głos
3 odpowiedzi 253 wizyt
pytanie zadane 13 maja 2016 w Grafika i multimedia przez Hadamalush Obywatel (1,880 p.)

92,679 zapytań

141,582 odpowiedzi

320,065 komentarzy

62,041 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...