Otoczki wypukłe z całkowitych punktów
Zbuduj otoczkę wypukłą przeciwnie do ruchu wskazówek zegara z maksymalnie 1000 punktów całkowitych, zaczynając od minimum leksykograficznego.
def convex_hull(points):
if type(points) is not list or len(points) > 1000:
raise ValueError("hull.input")
if any(type(p) not in (tuple, list) or len(p) != 2 or
any(type(v) is not int for v in p) for p in points):
raise ValueError("hull.point")
ordered = sorted(set(map(tuple, points)))
if len(ordered) <= 1:
return ordered
def turn(a,b,c):
return (b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0])
def chain(sequence):
out = []
for p in sequence:
while len(out) >= 2 and turn(out[-2],out[-1],p) <= 0:
out.pop()
out.append(p)
return out
return chain(ordered)[:-1]+chain(reversed(ordered))[:-1]- Projekt
- Sprawdź pusty zbiór, duplikaty i punkty współliniowe, zachowując tylko skrajne końce i odrzucając ułamkowe współrzędne.
- Sprawdź przed zastosowaniem
- Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
- Modele
- Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
def convex_hull(points):
if type(points) is not list or len(points) > 1000:
raise ValueError("hull.input")
if any(type(p) not in (tuple, list) or len(p) != 2 or
any(type(v) is not int for v in p) for p in points):
raise ValueError("hull.point")
ordered = sorted(set(map(tuple, points)))
if len(ordered) <= 1:
return ordered
def turn(a,b,c):
return (b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0])
def chain(sequence):
out = []
for p in sequence:
while len(out) >= 2 and turn(out[-2],out[-1],p) <= 0:
out.pop()
out.append(p)
return out
return chain(ordered)[:-1]+chain(reversed(ordered))[:-1]Połącz zmiany geometrii z korzystającą z nich aplikacją
Kod geometrii łatwiej ocenić, gdy wymagany wynik opisano w kategoriach aplikacji. Hullspring to środowisko programistyczne AI dla Windows do pracy nad tym wymaganiem w otwartym projekcie. Poproś podłączony model o sprawdzenie odpowiedniego obliczenia i jego odbiorców przed zasugerowaniem zmian, aby propozycja odpowiadała rzeczywistemu zachowaniu, a nie tylko przestawiała wzór.
Na przykład narzędzie zaznaczania może używać zewnętrznej granicy zbioru punktów. Poproś o przegląd wpływu duplikatów i punktów współliniowych na tę granicę oraz wyjaśnij, czy pośrednie punkty krawędzi mają znaleźć się w wyniku. Dołącz kod renderujący i reprezentatywne dane testowe. Daje to asystentowi konkretne zadanie bez zakładania, że Hullspring zawiera jakiekolwiek narzędzie zaznaczania.
Sprawdź proponowaną poprawkę pod kątem kolejności wyniku, walidacji wejścia i przypadku pustego, a także typowego kształtu. Uruchom projekt z punktami na prostej, powtarzającymi się współrzędnymi i małym wielokątem. Porównaj zwróconą sekwencję z oczekiwaniami odbiorcy; poprawny zbiór geometryczny może dać błędny obraz, gdy różnią się konwencje kolejności lub domknięcia.
Hullspring obsługuje połączenia z modelami przez punkty końcowe zgodne z OpenAI lub punkty końcowe Anthropic. Model AI typu abliterated można wybrać tam, gdzie jest dostępny, ale to jego usługa określa ograniczenia, pojemność kontekstu i narzędzia. Wykorzystaj rozmowę do wyjaśnienia wyborów implementacyjnych i oprzyj weryfikację na danych testowych projektu.
Przygotowanie zadania utrzymania kodu geometrii
- Czy współliniowe punkty krawędzi powinny pozostać na granicy?
Podaj wymaganie odbiorcy. Niektóre zastosowania potrzebują tylko skrajnych wierzchołków, inne zachowują punkty pośrednie. Poproś model o sprawdzenie obecnej konwencji i jawne opisanie każdej zmiany reguły w propozycji oraz testach.
- Dlaczego dołączać kod renderujący do przeglądu obliczenia?
Może oczekiwać określonej kolejności przechodzenia lub powtórzonego wierzchołka zamykającego. Obliczenie może zwracać zamierzone punkty, a mimo to naruszać ten interfejs. Sprawdzenie odbiorcy pomaga zapobiec widocznej regresji wskutek lokalnej poprawki.
- Jakie dane testowe szybko ujawniają założenia?
Użyj pustego zbioru, jednego punktu, duplikatów, prostej i małego wielokąta z punktem wewnętrznym. Zapisz oczekiwaną konwencję wyniku dla każdego przypadku. Uruchom je w projekcie, zamiast polegać wyłącznie na narysowanym kształcie.
- Czy poprawka może przy okazji rozszerzyć akceptowane typy współrzędnych?
Potraktuj to jako osobną zmianę kontraktu. Różne reprezentacje liczbowe mogą wpływać na porównania i walidację. Zapytaj, dlaczego rozszerzenie jest potrzebne, i sprawdź kod wywołujący przed przyjęciem go jako części ściśle określonej poprawki geometrii.
Hullspring · Zaktualizowano 2026-10-25