그레이엄 스캔 알고리즘을 사용하여 점 집합의 볼록 선체를 찾습니다. 극점 각도로 점을 정렬하려고하는데 어떻게해야하는지 잘 모릅니다. (나는 이미 Y 좌표로 점 집합을 정렬했다.) 이미 쓴 적이 무엇Java의 극점 각도로 점 정렬
은 다음과 같이이다 :
나는 X와 Y가double
으로 좌표가 어디
Coord
클래스입니다
public double angle(Coord o, Coord a)
{
return Math.atan((double)(a.y - o.y)/(double)(a.x - o.x));
}
.
나는 Stack Overflow의 비슷한 게시물 중 누군가가 C++로이 각도를 구현하려고했지만 비슷한 것을 이해하지 못했다. qsqrt
. 우리는 자바에서 이와 비슷한 것을 가지고 있습니까?
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()));
}
누구든지 나를 도울 수 있으면 기쁠 것입니다.
그리고 자바에서 수식을 찾으려면 어떻게해야합니까? 그냥 내 코드를 다음으로 대체하십시오 : public double angle (coord o, Coord a) { return 1.0/Math.tan (a.y - o.y)/(double) (a.x - o.x)); } 포인트가 시작될 때마다 –
, 다른 곳으로 쓰여지는 곳마다. 어디에서 시작해야 할까? –
'(x - x1)/(y - y1)'은 코탄 (1/tan)에 대한 공식입니다. 나는 각도가 증가할수록 음의 값을 갖습니다. 그레이엄 스캔에 대해 들어 본 적이 없으므로 위키 피 디아 (Wikipedia) 기사에 대한 답변을 기반으로하겠습니다. 예를 들어 맨 왼쪽 부분부터 시작한다면 아이디어는 변하지 않을 것입니다. 이 경우에 음수 부호가 필요하면'(y - y1)/(x - x1)' – maybeWeCouldStealAVan