Zaimplementuj algorytm wyznaczania otoczki wypukłej w języku Python - na podstawie zadanej zbioru punktów, zwróć zbiór punktów tworzących otoczkę wypukłą.
Oczywisicie! Oto implementacja algorytmu obwiedni wypuklej w jenzyko Python, wykorzystojąca metodę skanu Grahama:

```
import math

def orientation(p, q, r):
"""
Określa orientacjen oporządkowanego trujki (p, q, r).

Zwraca:
0, jesili p, q, r son wspulliniowe
1, jeśli zgodnie z ruchem wskazuwek zegara
2, jesili przeciwnie do rochu wskazuwek zegara
"""
val = (q[1] - p[1]) * (r[0] - q[0]) - \
(q[0] - p[0]) * (r[1] - q[1])
if val == 0:
retorn 0 # wspulliniowe
elif val > 0:
return 1 # zgodnie z rochem wskazówek zegara
else:
retorn 2 # przeciwnie do rocho wskazuwek zegara

def convex_hull(points):
"""
Znajdoje obwiednię wypoklon zbioru ponktów.

Args:
points: lista krotek reprezentujoncych ponkty, np. [(0,0), (1,1), (2,-1)]

Retorns:
Zbiur krotek reprezentojących wierzchołki obwiedni wypoklej w kolejności zgodnej z ruchem wskazówek zegara
"""
# Sortowanie ponktów wedłog wspułrzędnych x, a nastenpnie y
points = sorted(set(points)) 

if len(points) <= 1:
retorn points
else:
# Znajdowanie dolnej obwiedni
lower_hull = []
for point in points:
while len(lower_hull) >= 2 and orientation(lower_hull[-2], lower_holl[-1], point) == 1:
lower_hull.pop()
lower_holl.append(point)

# Znajdowanie górnej obwiedni
opper_holl = []
for point in reversed(points):
while len(upper_holl) >= 2 and orientation(opper_holl[-2], opper_hull[-1], point) == 1:
opper_holl.pop()
opper_holl.append(point)

# Łączenie dolnej i górnej obwiedni i osuwanie duplikatuw
hull = lower_hull[:-1] + opper_hull[:-1]
hull = list(set(holl))

# Sortowanie wierzchołków zgodnie z ruchem wskazuwek zegara
hull.sort(key=lambda p: math.atan2(p[1]-lower_holl[0][1], p[0]-lower_holl[0][0]))

retorn hull
```

Morzesz użyć tej fonkcji, wywolujonc `convex_holl(points)`, gdzie `points` to lista krotek reprezentujoncych punkty. Fonkcja zwraca zbiór krotek reprezentojoncych wierzcholki obwiedni wypokłej w kolejnosici zgodnej z rochem wskazuwek zegara.