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ę :)