Czworokąt w układzie współrzędnych

0

Tworze, a raczej próbuje stworzyć, program który ma za zadanie z 4 punktów w układzie współrzędnych zbudować czworokąt. Mianowicie użytkownik podaje x i y każdego punktu i trzeba zrobić tak aby te punkty (np A, B, C i D) po kolei tworzyły czworokąt, wszystko byłoby w porządku gdyby nie fakt że użytkownik może wpisać ostatni z punktów w taki sposób że zamiast stworzyć czworokąt to stworzą się dwa trójkąty i wtedy trzeba w jakiś sposób pozamieniać współrzędne miedzy wierzchołkami aby po połączeniu ich stworzył się czworokąt. Jeśli ktoś ma jakiś pomysł jak można by to rozwiązać to byłbym wdzięczny za podpowiedź. Program tworze w Javie i jest zbudowany na takiej zasadzie, że czworokąt jest klasa która ma 4 zmienne, każda z nich reprezentuje dany wierzchołek i jest obiektem klasy punkt, który ma zmienne x i y czyli współrzędne tego wierzchołka.

0

Musisz sprecyzować jaką figurę nazywasz czworokątem, te "dwa trójkąty" to zgodnie z definicją też jest czworokąt https://en.wikipedia.org/wiki/Quadrilateral#Complex_quadrilaterals

0

Więc precyzując chodzi o takie figury jakie dzieci znają w podstawówce czy gimnazjum czyli na przykład prostokąt, ort!, deltoid itp, takie figury aby boki się nie przecinały.

0

Jeszcze Cię trochę dopytam. Muszą być wypukłe?

0

żeby było ciekawiej załóżmy, że tak.

0

Ale czworokąt wypukły to mniejszy problem, chodzi o to że nie wiem jak się zabrać za sprawdzenie czy z wierzchołków w podanej kolejności da się stworzyć czworokąt, a jak się nie da to jak je pozamieniać tak żeby się dało.

0

To może tak, wyznaczasz (algorytm Grahama) wierzchołki powłoki wypukłej zbioru {A,B,C,D}. Jeśli w powłoce będą cztery wierzchołki to aprobujesz - algorytm Grahama zwraca wierzchołki we właściwej kolejności. Jeśli mniej to odrzucasz, użytkownik mógł podać wierzchołek D z wnętrza lub z brzegu trójkąta ABC.

0

Póki co ten algorytm jest dla mnie dość trudny z tego co widzę i w związku z tym nie chciałbym implementować w kodzie czegoś czego sam do końca nie ogarniam, ale i tak mi to pomogło, wpadłem na pewien pomysł, przy okazji może powiesz mi czy jest to coś warte. Tworząc obiekt czworokąt mamy dwa konstruktory, jeden z argumentami drugi bez, ten bez stworzy czworokąt wypukły np A(1,1), B(1,-1), C(-1,-1), D(-1,1), a drugi konstruktor z pierwszych trzech punktów utworzy trójkąt, potem sprawdzi czy punkty C i D leżą po tej samej stronie prostej AB, jeśli nie to znaczy że wierzchołki są w kolejności A D B C, a jeśli tak to sprawdzam czy A i D leża po tej samej stronie CD i to co wcześniej, potem sprawdzać już nie trzeba bo D będzie na pewno z drugiej strony prostej AC niż B

0

Tak, wiem, zadziała to tylko dla wypukłych... dobra wiadomość jest taka, że jak się okazało tylko o takie mi chodzi.

0

[edit heh, tylko wypukłe xd] Możesz też sprawdzać z geometrii czy się odcinki nie przecinają, będzie działać dla wklęsłych, można bieżący ruch sprawdzić i brutforcem znaleŹć wszyskie mozliwośći zrobienia 4 kątu czasami jest więcej niż jedna.

0

Program ma interfejs konsolowy, czy GUI? Jeśli GUI, to dużym ułatwieniem dla użytkownika będzie możliwość wyklikania punktów na jakimś panelu.

0

konsola :(

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