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.
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
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.
Jeszcze Cię trochę dopytam. Muszą być wypukłe?
żeby było ciekawiej załóżmy, że tak.
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.
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.
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
Tak, wiem, zadziała to tylko dla wypukłych... dobra wiadomość jest taka, że jak się okazało tylko o takie mi chodzi.
[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.
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.
konsola :(