회전 된 사각형의 중간 점을 찾기

user1241241 :

나는 회전 된 사각형의 중간 점을 발견하고 싶습니다. 회전 된 사각형은 다음 좌표를 가지고있다

[317, 80], [183, 291], [479, 150], [378, 387]

나는 결정하기 위해 다음과 같은 코드를 가지고있다

cx = (coord[0][0] + coord[2][0])//2
cy = (coord[0][1] + coord[1][1])//2

불행하게도, 센터는 실제 중심과 일치하지 않습니다. 어떻게 위의 좌표의 정확한 중심을 찾을 수 있습니까?

나는 eldesgraciado :

내가 사람을 다음과 같은거야 있는지 확실하지 않습니다,하지만 당신은 사각형 모양의 중심을 계산하려면,이 같이 간다. 당신이 원점으로 정렬 된 다음 사각형을 가정 해 봅시다. 중심은 녹색으로 표시됩니다.

여기에 이미지 설명을 입력

무게 중심은 다음과 같이 계산된다 :

Cx = 0.5 * w
Cy = 0.5 * h

그런 다음 선형 변환을 적용 할 수 있습니다. 이 예에서, 회전 행렬는로서 지정된다 :

R = [ cos ϴ, -sin ϴ
      sin ϴ,  cos ϴ ]

사각형은 현재 좌표계 원본에서 회전합니다. 즉, 각도 Θ입니다 :

여기에 이미지 설명을 입력

중심 방정식이 될 :

Cx’ = cx cos ϴ - cy sin ϴ
Cy’ = cx sin ϴ + cy cos ϴ

좌표 원래 시스템에 다시 번역, 우리는 가지고있다 :

Cx’’ = x + cx cos ϴ - cy sin ϴ
Cy’’ = y + cx sin ϴ + cy cos ϴ

이 함수는 (의사 코드에서) 이런 식으로 뭔가를해야한다 :

Tuple computeRotatedCentroid( x, y, width, height, theta ) {
    cx = 0.5 * width;
    cy = 0.5 * height;

    thetaRadians = degreesToRadians(theta);

    cosTheta = cos( thetaRadians );
    sinTheta = sin( thetaRadians );

    finalCx = x + cx * cosTheta - cy * sinTheta;
    finalCy = y + cx * sinTheta + cy * cosTheta;

    return makeTuple( finalCx, finalCy );
}

추천

출처http://43.154.161.224:23101/article/api/json?id=34511&siteId=1