我想在Android中使用Surfaceview和畫布繪製來創建自定義組件。這些組件可通過觸摸進行調整大小和旋轉。考慮創建一個圖像視圖,可以通過觸摸和拖動所需的邊來擴展它的Top,Right,Bottom和Left邊緣。我正在使用RectF
來保持組件的邊界,對於旋轉,我使用canvas.rotate(angle, bounds.centerX(),bounds.centerY())
方法。問題在於調整頂邊的大小時,Let,Right和Bottom邊緣應該是固定的,並且如果旋轉角度不是0度,我無法修復它。我需要一個數學解決方案來找出相對於實際矩形邊界的旋轉矩形的x,y座標。關於旋轉角度的矩形座標
我可以在一些圖像的幫助下解釋它。 下圖顯示了兩個矩形,其邊界也是已知的,並以相應的顏色顯示。 考慮綠色矩形作爲組件的起始邊界,即。旋轉-45度,中心是(10,10)。現在要重新大小的頂邊的矩形的,並顯示在下一圖2
從圖2可以理解,在Y位置從6.轉動減少到4矩形也以粉紅色顯示。請記住,我正在調整組件的旋轉角度-45度時調整大小,因此拖動時頂部邊緣矩形的左側,右側和底部位置不應更改。所以圖2的粉紅色矩形應該有左,右和底座標相同圖1的綠色矩形。所獲得的和預期的矩形的比較示於圖3。
在圖3中黃色矩形是預期的/所需出放。所獲得的矩形粉紅色的與綠色旋轉矩形相比向上移位,並且這取決於旋轉角度。
- 我有旋轉角= -45度
- 界的實際(不重新調整大小)的矩形。
- Rotation = -45度處的實際(未重新調整大小)矩形的界限。
- 重新調整長方形的邊界。
- Rotation = -45度時重新調整長方形的邊界。
如何計算黃色矩形的邊界/中心。這樣我可以正確實現我的組件的大小調整?讓我知道是否有任何數學可以應用?
需要的點/座標標記爲紅色圓圈,如圖3
只需旋轉點結束, 基本公式是: X_ = X * cos(角度) - Y * SIN(角度); y_ = y * sin(角度)+ y * cos(角度); http://en.wikipedia.org/wiki/Rotation_(mathematics) – user1410657