2012-10-17 3 views
7

Surfaceview 및 캔버스 그리기를 사용하여 Android에서 사용자 지정 구성 요소를 만들려고합니다. 구성 요소는 터치하여 크기가 조정되고 회전 할 수 있습니다. 꼭지점을 터치하고 드래그하여 위쪽, 오른쪽, 아래쪽 및 왼쪽 가장자리가 확장 가능한 이미지보기를 만드는 것이 좋습니다. 구성 요소의 경계를 유지하기 위해 RectF을 사용하고 있습니다. 회전하려면 canvas.rotate(angle, bounds.centerX(),bounds.centerY()) 메서드를 사용하고 있습니다. 문제는 상단 가장자리의 크기를 조정할 때 Let, Right 및 Bottom 모서리를 고정해야하며 회전 각도가 0 도가 아닌 경우 고정 할 수 없습니다. 실제 사각형의 경계를 기준으로 회전 된 사각형의 x, y 좌표를 찾으려면 수학 솔루션이 필요합니다.회전 각도를 기준으로 한 직사각형 좌표

일부 이미지를 사용하여 설명 할 수 있습니다. 다음 그림은 범위가 알려져 있고 각 색상으로 표시된 두 개의 직사각형을 표시합니다. 초록색 사각형을 구성 요소의 초기 경계로 고려하십시오. -45도 회전, 중심은 (10,10)입니다. 이제 다시 크기가는 상단 사각형 및 표시를 다음도 2

Figure 1

상기도 2로부터,이 Y 위치 6 회전에서 4로 감소되어있는 것을 알 수있다 사각형도 분홍색으로 표시됩니다. 구성 요소가 회전 각도 -45도에서 크기를 조정하는 동안 끌어서 이동하는 동안 기억하십시오. 위쪽 가장자리 직사각형의 왼쪽, 오른쪽 및 아래쪽 위치는 변경하면 안됩니다.. 따라서 그림 2의 핑크 사각형이어야합니다. 왼쪽, 오른쪽 및 아래 좌표과 같습니다. 그림 1의 녹색 사각형. 얻어진 예상 사각형의 비교는 노란색 사각형이 예상/필수 밖으로 넣어 그림 3에서

Figure 2

그림 3에 표시됩니다. 얻어진 의 직사각형 분홍색 색녹색 회전 사각형과 비교하여 위쪽으로 시프트되고 회전 각도는 달라집니다. 회전 각도는입니다.

  • I는 회전 각도 = -45도 실제의
  • 경계 (다른 리사이즈) 구형을 갖는다.
  • 실제 크기 (크기가 조정되지 않음) 사각형의 경계는 회전 = -45도입니다.
  • 크기가 직사각형 인 경계.
  • 회전의 -45도에서 재사용 사각형의 범위.

노란색 직사각형의 경계/중심을 어떻게 계산합니까? 그래서 구성 요소의 크기 조정을 올바르게 구현할 수 있습니까? 적용 할 수있는 수학이 있는지 알려주세요.

필요한 점/좌표는 당신의 그림 3-

Figure 3

+0

그냥 회전 지점에서 끝날 것, 기본 공식은 다음과 같습니다 X_ = X * COS (각도) - y를 * 죄 (각도); y_ = y * sin (각도) + y * cos (각도); http://en.wikipedia.org/wiki/Rotation_(mathematics) – user1410657

답변

0

이 답변의 모든 색상을 참조 그림 3에 붉은 색 원으로 표시됩니다.

정확하게 질문을 이해하면 분홍색 직사각형과 녹색 직사각형에 대한 모든 세부 정보를 계산하는 방법을 알고 있습니다. 따라서 분홍색 직사각형의 한 모서리와 녹색 직사각형의 해당 모서리 사이의 차이를 간단하게 가져옵니다. 분홍색 직사각형의 중심에 두 개의 요소 벡터 (예 : xy의 차이점)를 추가하면 원하는 노란색 삼각형의 중심이 표시됩니다.

분홍색 직사각형의 크기도 계산해야하는 경우 회전하지 않은 좌표계에서 치수를 계산할 수 있습니다. 직사각형을 연장하고자하는 지점의 좌표와 함께 녹색 직사각형을 가져 와서 다시 + 45 ° 회전시킵니다. 그런 다음 직사각형의 높이를 원하는 값으로 늘릴 수 있습니다. 그러면 파란색 직사각형이 생기고 회전 직사각형은 핑크 직사각형이됩니다.

1

열쇠는 : "회전 각도가 0 도가 아닌 경우 수정할 수 없습니다."

직사각형이 10도 회전했다고 가정 해 봅시다.

1) 지금 당신이에 문제를 감소 ... 마우스가 -10도

에 의해 -10도

2

) 회전 사각형의 중심으로 화면에 어떤 점을 중심으로 좌표 회전 0도에있는 직사각형. 직사각형이 움직였습니다. 그렇습니다. 마우스는 움직 였지만, 그들은 서로 상대적인 위치에 있습니다.

3) 이제 직사각형 조작을 수행하십시오. 사각형 중심이 이동합니다.

4) 당신이 그것에 대해 생각하지 않는 10도

이 방법에 의해 새로운 사각형의 중심을 회전하고 당신은 항상 해제 회전 좌표에서 일하고있다. 각 a 회전 [x, y]에서

포인트 [x*cos(a) - y*sin(a), x*sin(a) + y*cos(a)]

관련 문제