Znajdź najodleglejszy punkt z punktów które są już znalezione

Masz powiedzmy 10 punktów A, B, C, D, E, F… etc każdy z nich ma przypisane współrzędne X Y.
Masz możliwość obliczenia dystansu miedzy punktami funkcją Distance(Point A, Point B).
Dodatkowo 4 punkty dla przykładu A B C D są już wykonane.
Musisz znaleźć następny punkt z nie wykonanych punktów który jest najdalszy od punktów A B C D.

Jak to uczynić. Dane mam zapisane w tablicy Point.X, Point.Y. Język pascal/delphi.

Banalnie proste ale mi się nie chce pisać i zadanie jest niejasne
Odległośc miedzy punkami to d=sgtr((x2-x1)2+(y2-y1)2)
i teraz tak
Ale czy suma odległości np E do ABCD jest największa czy któras odległść największa tego nie rozumie.
Niech będzie suma
d=0
punk=X
d= dA+dB+dC+dD od E
if d>d0 to d0=d punk=E
i dajej w pendli od do konca punktów
na końcu uzyskasz dmax i punk konkretny

Trochę nie rozumiem.
Chodzi o to, że mam punkty różne upraszając są to respawny graczy. Chcę stworzyć algorytm który poda mi z listy punktów respawnowych ten który jest najdalej od wszystkich punktów w których gracz już się pojawił.

Odległości między każdym z punktów są nie są uszeregowane.

„Musisz znaleźć następny punkt z nie wykonanych punktów który jest najdalszy od punktów A B C D.”
Najdalszy od każdego z tych punktów czyli możliwie najdalej od A możliwie najdalej od B możliwie najdalej od C i możliwie najdalej od D. Taki optymalnie najodleglejszy punkt od punktów ktore zostały już wykonane. Nie rozumiem tego fragmentu twojej wypowiedzi „if d>d0 to d0=d punk=E”

Jest to niemożliwe matematycznie.
Jak jest najdalej od A do może nigdzie nie być najdalej od B
Tobie chodzi pewnie o punk środkowy który leży po srodku puktów ABCD lub na zewnątrz i odległości od nich są optymalne. Bo zakładam że punk E może być po srodku ABCD
Ale jak policzych odległości kazdego punku od tych czterech to rozwiązań może być kilka
Kto wymyślil to zadanie?
A to co napisałm do jest odległością d0 jest najpier rezo jeżeli odległość jest większa od d0 to d0 stale ję odległością i jest to jen punk. Bierzesz nastepny jeżeli jest mniejsza co cały czas pozostaje E jak większa to d0 staje się odległością od F a tym najogleglejszy punkiem jest F I tak do końca i wtedy zajdujesz punk najbardzej odległu od A
To samo robisz dla B,C,D
Masz wtedy punk najbardziej odległu od A np F, od B np G itd. Ale co ci nic nie da bo trześć jest niemożliwa do rozwiązania

No oczywiście, że jedno może wykluczyć drugie tak jak mówisz ale widzisz, E może być dalej i wykluczy F, z kolei G będzie bliżej niż E i F ale już jest najdalej ze wszystkich innych, wykluczając te dwójkę wiemy że to będzie najbardziej optymalny wybór. Skoro nasz mózg potrafi na pierwszy wejrzenie zobaczyć które kółko będzie to na pewno da się to przekuć na algorytm. Od razu widać że kółko oznaczone 1 jest najdalej od wszystkich kółek czerwonych. Wydaje mi się że może trzeba tutaj liczyć pole powierzchni za pomocą ale ja nie wiem ja nie chce modzić bo nie czaje wgl jak to zrobić.

I gdzie te specjaliste wszystkie od wszystkiego są? Bo jedyna z moich opcji to utworzenie tablicy liczącej dla każdego z punktów wielokrotności najodleglejszych

Bo nie jest to takie proste. Generalnie najtrudniejsze jest to czego nie podałeś, a to jest decyzja biznesowa której nikt nie podejmie za Ciebie na forum.

Zacznij nie od tego jak znaleźć ten punkt tylko od wypisania kryteriów jakie taki potencjalny punkt musi spełnić.
Robiąc to musisz myśleć nie o najdalszym punkcie bo taki nie istnieje i go nie znajdziesz, lecz o możliwie optymalnym punkcie. I musisz sprecyzować wymagania dla możliwe optymalnego punktu.

Bez tego nie napiszesz żadnego algorytmu który taki punkt szuka.

PS. Uwzględnij też priorytety tych warunków bo może dojść do sytuacji że nie będzie można takiego punktu znaleźć - i co wtedy ma się dziać? - tutaj też potrzebna jest informacja z Twojej strony bo jest to swego rodzaju decyzja biznesowa.

Masz problem ze zdefiniowaniem tego co widzisz :slight_smile: Na obrazku czemu wybralibyśmy punkt 1?

przyjmij wzór, że „najoptymalniejszy” to taki , dla którego suma odległości od [A,B,C,D] będzie największa, odrzucając przy tym punkty, gdzie minimum z odległości [A,B,C,D] będzie mniejsze niz założona stała. (żeby nie spawnować zaraz przy kimś, bo akurat był w rogu mapy a reszta w drugim rogu. )
Powinno zadziałać.

Można też ze „spawn pointów” zrobić graf i liczyć nie po współrzędnych a po ilości skoków w grafie. To jeśli mapa jest skomplikowana. Wtedy możesz w labiryncie pojawić się obok siebie według współrzędnych, ale mieć odległość do przebycia.

A no i możliwe, że wartości dwóch punktów, będą takie same, to random się przyda.

Jak coś to pytaj :slight_smile:

No więc tak masz sobie te punkty na obrazku, czerwonych kółek nie możesz wybrać, możesz wybierać tylko z pośród zielonych. Należy utworzyć tablicę aby zapisywać w kolejności, gdyż jeżeli wybierzesz któreś z zielonych kołek stają się czerwonymi. Ale zaraz zaraz jako kryterium wyboru kółka zielonego musisz obrać to co widać na obrazku jak aby kółko zielone znajdywało się najdalej od wszystkich czerwonych kółek, tak może być sytuacja, że wybrane kółko będzie najdalej od wszystkich kółek czerwonych ale jedno kółko czerwone będzie blisko ale i tak wybierzemy kółko to z powodu iż wszystkie inne zielone znajdują się bliżej w większej ilości do czerwonych kółek. Uproszczając jeżeli dostaniesz mapę punktów twój mózg znajdzie od razu ten optymalny punkt zielony który znajduje się najdalej od czerwonych punktów mimo, że jakieś jeden punkt zielony będzie miał najdalszą odległość od któregoś z punktów. Ale będzie miał w sąsiedztwie inne czerwone punkty które będą bliżej niż ten jeden punkt. Czyli [A - 600 - C, A - 300 - D, A - 200 - E] < [B - 500 - C, B - 450 - D, B - 350 - E]
Jak widać A znajduje się najdalej od jednego punktu ale B znajduje się najdalej od dwóch punktów dlatego jego wybór daje lepszy wybór na zrespawnienie gracza, bo znajduje się najdalej od 2 innych graczy co zwiększa balans ponieważ nie jestem najdalej od 1 gracza tylko dwóch. Już prościej nie umiem, tak mogę liczyć od ilu punktów się znajduje dany punkt najdalej, z tym, że dużo to roboty i jestem niemal pewny, że jest na to algorytm.