Я использую алгоритм сканирования Грэма для поиска выпуклой оболочки множества точек Я пытаюсь сортировать точки по их полярному углу, но я понятия не имею, как это сделать (Я уже отсортировал набор точек по их координатам Y).Сортировка точек по их полярному углу в Java
То, что я уже писал, как это:
public double angle(Coord o, Coord a)
{
return Math.atan((double)(a.y - o.y)/(double)(a.x - o.x));
}
где Coord
класс, где у меня есть X и Y координаты в double
.
Я также посмотрел на одну из подобных записей в Stack Overflow, где кто-то пытался реализовать этот угол с C++, но я не понимаю qsqrt
. У нас есть что-то подобное на Java?
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()));
}
Буду рад, если кто-нибудь сможет мне помочь.
и что я должен использовать в java, чтобы найти формулу для котана? просто замените мой код на: открытый двойной угол (координата o, координата a) { return 1.0/Math.tan ((double) (a.y - o.y)/(double) (a.x - o.x)); } –
для начала, каждый, где написано другое. имеет значение, с чего начать? –
'(x - x1)/(y - y1)' - это формула для cotan (1/tan) - смежная над противоположной. Я сделал только отрицательный, чтобы он увеличивался с углом. Я не слышал о сканировании Грэма, поэтому я основывал свой ответ на статье в Википедии, в которой предлагается начать с самой нижней точки. Идея не изменилась бы, если бы вы начали, скажем, с самой левой точки. В этом случае было бы проще использовать касательную: '(y - y1)/(x - x1)' – maybeWeCouldStealAVan