Używam algorytmu skanowania Grahama do znalezienia wypukłego kadłuba zestawu punktów Próbuję posortować punkty według ich kąta biegunowego, ale nie mam pojęcia, jak to zrobić (Posortowałem już zbiór punktów według ich współrzędnych Y).Sortowanie punktów według ich kąta biegunowego w Javie
Co ja już napisałem jest tak:
public double angle(Coord o, Coord a)
{
return Math.atan((double)(a.y - o.y)/(double)(a.x - o.x));
}
gdzie Coord
jest klasa gdzie mam współrzędne X i Y jako double
.
Przyjrzałem się także jednemu z podobnych stanowisk w Stack Overflow, w którym ktoś próbował zaimplementować ten kąt w C++, ale nie rozumiem qsqrt
. Czy mamy coś takiego w Javie?
qreal Interpolation::dp(QPointF pt1, QPointF pt2)
{
return (pt2.x()-pt1.x())/qSqrt((pt2.x()-pt1.x())*(pt2.x()-pt1.x()) + (pt2.y()-pt1.y())*(pt2.y()-pt1.y()));
}
Będę zadowolony, jeśli ktoś może mi pomóc.
i co powinienem użyć w java, aby znaleźć wzór dla cotana? po prostu zamień mój kod na: publiczny podwójny kąt (Coord o, Coord a) { powrót 1.0/Math.tan ((podwójne) (a.y - o.y)/(podwójne) (a.x - o.x)); } –
dla punktu, od którego zaczyna się, gdzie jest napisane inaczej. ma znaczenie, od czego zacząć? –
'(x - x1)/(y - y1)' jest formułą dla cotan (1/tan) - sąsiadującą z przeciwną. Występowałem tylko w negatywie, aby wzrastało pod kątem. Nie słyszałem o skanowaniu Grahama, więc oparłem moją odpowiedź na artykule w Wikipedii, który sugeruje, że zaczyna się od najniższego punktu. Pomysł się nie zmieni, jeśli zaczniesz od, powiedzmy, od lewej strony. W takim przypadku najłatwiej byłoby użyć stycznej: '(y - y1)/(x - x1)' – maybeWeCouldStealAVan