2014-05-19 107 views
0

我構建了一個系統,它使用對象的最左側和最垂直中心點作爲原點來旋轉和縮放對象。轉換後,您可以將對象html/css3信息發送到服務器,並且c#將嘗試重新繪製您創建的場景。 C#正在以相同的角度旋轉對象/圖像,但將它們從垂直和水平中心點旋轉,這會導致對象/圖像更改尺寸。我已經計算出了這些變化,但是在物體/圖像左上角的x,y座標上有一個偏移量圖像旋轉平移偏移

這是我一直試圖解決的偏移量的方法:

 int[] rotResult = new int[2]; 

     int[] tLCoord = new int[2]; 
     int[] tRCoord = new int[2]; 
     int[] bLCoord = new int[2]; 
     int[] bRCoord = new int[2]; 

     int[] tLCoordTmp = new int[2]; 
     int[] tRCoordTmp = new int[2]; 
     int[] bLCoordTmp = new int[2]; 
     int[] bRCoordTmp = new int[2]; 

     float sin = (float)Math.Sin(angle * Math.PI/180.0); 
     float cos = (float)Math.Cos(angle * Math.PI/180.0); 

     tLCoord[0] = (originalX - Math.Abs(xMin)); 
     tLCoord[1] = (originalY - Math.Abs(yMin)); 

     tRCoord[0] = origwidth; 
     tRCoord[1] = 0; 

     bLCoord[0] = 0; 
     bLCoord[1] = (origheight * -1); 

     bRCoord[0] = origwidth; 
     bRCoord[1] = (origheight * -1); 

     tLCoordTmp[0] = Convert.ToInt32((tLCoord[0] * cos) - (tLCoord[1] * sin)); 
     tLCoordTmp[1] = Convert.ToInt32((tLCoord[1] * cos) + (tLCoord[0] * sin)); 

     tRCoordTmp[0] = Convert.ToInt32(((tLCoordTmp[0] + tRCoord[0]) * cos) - (tRCoord[1] * sin)); 
     tRCoordTmp[1] = Convert.ToInt32(((tLCoordTmp[1] + tRCoord[1]) * cos) + (tRCoord[0] * sin)); 

     bLCoordTmp[0] = Convert.ToInt32(((tLCoordTmp[0] + bLCoord[0]) * cos) - (bLCoord[1] * sin)); 
     bLCoordTmp[1] = Convert.ToInt32(((tLCoordTmp[1] + bLCoord[1]) * cos) + (bLCoord[0] * sin)); 

     bRCoordTmp[0] = Convert.ToInt32(((tLCoordTmp[0] + bRCoord[0]) * cos) - (bRCoord[1] * sin)); 
     bRCoordTmp[1] = Convert.ToInt32(((tLCoordTmp[1] + bRCoord[1]) * cos) + (bRCoord[0] * sin)); 

     if (angle >= 270) 
     { 
      rotResult[0] = tLCoordTmp[0]; 
      rotResult[1] = tRCoordTmp[1]; 
     } 
     else if (angle <= 90) 
     { 
      rotResult[0] = bLCoordTmp[0]; 
      rotResult[1] = tLCoordTmp[1]; 
     } 
     else if (angle > 90 && angle <= 180) 
     { 
      rotResult[0] = bRCoordTmp[0]; 
      rotResult[1] = bLCoordTmp[1]; 
     } 
     else if (angle > 180 && angle < 270) 
     { 
      rotResult[0] = tRCoordTmp[0]; 
      rotResult[1] = bRCoordTmp[1]; 
     } 
     return rotResult; 

立即我知道有一些問題涉及這個公式計算出的座標平面和c#和html/css都呈現視覺元素的方式,我一直在運行小實驗來抵消反對這些和沒有什麼似乎越來越接近解決方案,任何想法?

回答

0

答案是首先通過TranslateTransform和RotateTransform旋轉c#中的圖像,以防止裁剪,然後獨立計算對象的適當X,Y座標,然後從對象的左上角計算圖像X,Y偏移量使用該對象的最左邊的中心點之後,它只是做一些條件語句來處理基於象限的計算差異的問題