Ich benutze Graham Scan-Algorithmus, um die konvexe Hülle der Menge von Punkten zu finden Ich versuche, die Punkte nach ihrem Polarwinkel zu sortieren, aber ich habe keine Ahnung, wie es geht (Ich habe die Punkte bereits nach ihren Y-Koordinaten sortiert).Sortieren von Punkten nach ihrem Polarwinkel in Java
Was ich schon geschrieben habe, ist wie folgt:
public double angle(Coord o, Coord a)
{
return Math.atan((double)(a.y - o.y)/(double)(a.x - o.x));
}
wo Coord
die Klasse, wo ich X und Y wie double
koordiniert.
Ich schaute auch auf einen der ähnlichen Beiträge in Stack Overflow, wo jemand versucht hatte, diesen Winkel mit C++ zu implementieren, aber ich verstehe qsqrt
nicht. Haben wir so etwas in 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()));
}
Ich werde mich freuen, wenn mir jemand helfen kann.
und was soll ich in Java verwenden, um die Formel für den Cotan zu finden? Ersetzen Sie einfach meinen Code durch: öffentlicher Doppelwinkel (Koord. o, Koord. a) { Rückgabe 1,0/Math.tan ((double) (a.y - o.y)/(double) (a.x - o.x)); } –
für den Punkt zu starten, jeder wo es anders geschrieben ist. ist es wichtig, wo ich anfangen soll? –
'(x - x1)/(y - y1)' ist die Formel für cotan (1/tan) - angrenzend gegenüber. Ich habe nur Negativ gemacht, damit es mit dem Winkel zunimmt. Ich hatte noch nie von einem Graham-Scan gehört, also basierte meine Antwort auf dem Wikipedia-Artikel, der mit dem untersten Punkt beginnt. Die Idee würde sich nicht ändern, wenn Sie mit dem linken Punkt beginnen würden. In diesem Fall wäre es am einfachsten, die Tangente zu verwenden: '(y - y1)/(x - x1)' – maybeWeCouldStealAVan