zadanie dla fil geometria obliczeniowa
Mariusz:
https://prnt.sc/st3m6x
Jak napisałbyś program do znajdowania otoczki wypukłej
korzystając z wyżej wymienionego algorytmu
Sugerowana struktura danych to dwukierunkowa lista cykliczna
3 cze 17:24
fil: Czesc Mariusz, moge cos napisac zaraz, bo pamietam ze kiedys ten temat przerabialem, ale nie
udalo mi sie skleic dzialajacego programu. Wspolrzedne punktu przyjmujemy jako inty?
3 cze 17:33
fil: "sorted by polar angle in counterclockwise order around p0" − czyli wedlug czego mam
posortowac?
3 cze 18:14
3 cze 20:35
Mariusz:
Na wektorze to pewnie i ja wygrzebałbym jakiś kod
według miary kąta nachylenia do osi OX przeciwnie do ruchu wskazówek zegara
Jeśli miałeś układ biegunowy to jest to miara kąta nachylenia promienia wodzącego
do osi biegunowej
Gdy poznasz liczby zespolone to dowiesz się że ten kąt to argument liczby zespolonej
https://pastebin.com/07r6DwmV
No ja napisałem coś takiego z bardzo małą pomocą Pytającego
a ty chyba wziąłeś kod od geeksów
Masz jakiś pomysł na takie zmodyfikowanie kodu
aby usunięte punkty współliniowe były umieszczane na końcu wektora
3 cze 22:13
3 cze 22:17
fil: Nawet widze ze kod mozna troche zmodyfikowac, pozbyc sie zmiennej globalnej, do funkcji
compare() dodac trzeci argument − wtedy fragment kodu by tak wygladal
std::sort(points.begin() + 1, points.end(),
[&start](auto firstpoint, auto secondpoint) {
return compare(start, firstpoint, secondpoint);
});
3 cze 22:19
fil: Wlasnie ten algorytm co podeslales, znalazlem taki sam ale w polskiej wersjii. Do ktorego
vectora dodawac te usuniete elementy?
3 cze 22:20
3 cze 22:22
fil: Tez widze ze napiaslem recznie sortowanie
3 cze 22:26
3 cze 22:36
Mariusz:
Chodzi o to że teraz funkcja
int removeDup(std::vector<Point> &A);
nadpisuje punkty współliniowe i
zwraca liczbę punktów
Chodzi o to aby
nadpisane punkty umieścić w wektorze na pozycjach
prev+1,...,size−1
3 cze 22:39
fil:
rozumiem ze direction(...) != 0 sprawdza czy 3 punkty sa wspoliniowe?
3 cze 22:44
3 cze 22:49
fil: jedyne co teraz na szybko przychodzi do glowy to miec jakas zmienna pomocnicza
int k = 0
for (...; i < points.size() − k;...)
if (...) {
...
points.pushback(..);
k++;
}
N aszybko, nie mam gwarancji ze bedzie poprawnie dzialac. Juz pozno jest, moze cos rano wymysle
3 cze 23:09
fil: Poczekaj, te "niechciane" elementy sa nadal w tej tablicy, to jutro poprawie
3 cze 23:38
Mariusz:
Poza tym sugerowana była inna struktura danych
np Diks i Rytter proponują dwukierunkową listę cykliczną
Na wektorze napisałbym na podstawie pseudokodu Cormena
przy niewielkiej pomocy Pytającego
4 cze 09:58
fil: Przy okazji −− znasz jakies strony gdzie moge sobie pocwiczyc algorytmike/rozwiazywanie
problemow −− oczywiscie angielskie. Project Eulera juz znam
4 cze 10:01
4 cze 11:13
Mariusz:
https://pastebin.com/fhgu9yS8
W liniach nr 40 oraz nr 46 ten pierwszy warunek dla pętli while
mi przeszkadza aby przepisać kod z użyciem listy dwukierunkowej
4 cze 11:33
zadanko: fil,polecam hackerrank,angielski spoj,oraz codewars
4 cze 12:58