Podaj algorytm wyliczający część wspólną dwóch zadanych prostokątów o bokach równoległych do osi układu współrzędnych.
No i od czego tutaj zacząć, takich możliwości jest kilkanaście.
Algorytm.
Otrzymałeś(aś) rozwiązanie do zamieszczonego zadania? - podziękuj autorowi rozwiązania! Kliknij
Zrobiłem 8 przypadków, może niektóre były te same, lecz przekonało mnie to o prawdziwości algorytmu.
Oznaczyłem, że lewe górne wierzchołki prostokątów to odpowiednio A, C i E.
Prawe dolne wierzchołki to B, D, F. Każdy z nich ma współrzędne np. \(A_.{x}\)
Więc wyliczenie współrzędnych E(x,y) i F(x,y) to zastosowanie operacji min, max.
No i właśnie... jeden z przypadków, który założyłem to taki gdy prostokąty nie mają części wspólnych. Wtedy algorytm nie wiem czy działa poprawnie. Więc może przed jego zastosowaniem należy sprawdzić, czy te prostokąty mają część wspólną?
Co do algorytmu to:
E.x = max(A.x, c,x)
E.y = min(A.y, C.y)
F.x = min(B.x, D.x)
F.y = max(B.y, D.y)
Oznaczyłem, że lewe górne wierzchołki prostokątów to odpowiednio A, C i E.
Prawe dolne wierzchołki to B, D, F. Każdy z nich ma współrzędne np. \(A_.{x}\)
Więc wyliczenie współrzędnych E(x,y) i F(x,y) to zastosowanie operacji min, max.
No i właśnie... jeden z przypadków, który założyłem to taki gdy prostokąty nie mają części wspólnych. Wtedy algorytm nie wiem czy działa poprawnie. Więc może przed jego zastosowaniem należy sprawdzić, czy te prostokąty mają część wspólną?
Co do algorytmu to:
E.x = max(A.x, c,x)
E.y = min(A.y, C.y)
F.x = min(B.x, D.x)
F.y = max(B.y, D.y)
- panb
- Expert
- Posty: 5122
- Rejestracja: 26 kwie 2010, 22:54
- Lokalizacja: Nowiny Wielkie
- Podziękowania: 19 razy
- Otrzymane podziękowania: 2053 razy
- Płeć:
Mnie uczono, że nazwy zmiennych powinny mieć cos wspólnego z tym, co te zmienne oznaczają.
Niech \(L_1,\,\, L_2\) - współrzędne lewych krawędzi prostokątów, \(P_1,\,\,\, P_2\) - współrzędne prawych krawędzi odpowiednio pierwszego i drugiego prostokąta.
Podobnie \(G_1, \,\,\, G_2\) oraz \(D_1,\,\,\, D_2\) - to współrzędne górnych i dolnych krawędzi prostokątów.
d - długość, s - szerokość, P - pole
Daj znać jakie poprawki były potrzebne, bo może ktoś będzie miał takie zadanie w przyszłości i mu się przyda.
Niech \(L_1,\,\, L_2\) - współrzędne lewych krawędzi prostokątów, \(P_1,\,\,\, P_2\) - współrzędne prawych krawędzi odpowiednio pierwszego i drugiego prostokąta.
Podobnie \(G_1, \,\,\, G_2\) oraz \(D_1,\,\,\, D_2\) - to współrzędne górnych i dolnych krawędzi prostokątów.
d - długość, s - szerokość, P - pole
- \(L_1\le L_2 \So d=P_1-L_2\) w przeciwnym razie \(d=P_2-L_1\)
- \(d\le0 \So P=0\) w przeciwnym razie
- \(G_1>G_2 \So s=G_2-D_1\) w przeciwnym razie \(s=G_1-D_2\)
- \(s\le0 \So P=0\) w przeciwnym razie \(P=d\cdot s\)
Daj znać jakie poprawki były potrzebne, bo może ktoś będzie miał takie zadanie w przyszłości i mu się przyda.
Re: Algorytm.
Całkowicie zaburza to moją koncepcję, która jest dobra bo sprawdziłem wszystkie możliwości. No i na zajęciach mówili nam, aby użyć funkcji min, max.
-
- Fachowiec
- Posty: 2946
- Rejestracja: 20 gru 2013, 21:41
- Lokalizacja: Radom
- Otrzymane podziękowania: 1556 razy
- Płeć:
Re: Algorytm.
Czemu chcesz na siłę wyważać otwarte drzwi ?
Analizowałeś algorytm Sutherlanda-Hodgmana ?
Analizowałeś algorytm Sutherlanda-Hodgmana ?
-
- Witam na forum
- Posty: 1
- Rejestracja: 14 paź 2017, 16:47
- Płeć: