2011-05-17 76 views
2

我繪製了橢圓。我有8個句柄。旋轉後無法重新排列橢圓的座標

手柄是TopLeft,MidTop,TopRight,MidLeft,MidRight,BottomLeft,MidBottom,BottomRight。

每當用戶將鼠標懸停在任何這些手柄上時,光標就會顯示出來。爲了顯示光標,我已經參考了MS-WORD形狀橢圓。

我的問題到達時,我roatate或我做一個橢圓鏡像。我無法重新排列座標,因此遊標無法正確顯示。

請幫忙。

注意:請打開MS-WoRD。 轉到「INSERT」 選擇「SHAPPES」 在那裏選擇「Ellipse」形狀。 繪製它。 如果你點擊它,你會看到圍繞橢圓形狀的8個點。這些被稱爲手柄。如果您將鼠標懸停在任何手柄上,請檢查光標顯示。光標顯示取決於手柄。 我需要實現與VC++中的MS-WORD相同的功能。 。

編輯 - 添加從下面的評論信息:

的問題是重新安排我的座標旋轉之後。如果我將橢圓略微向右彎曲(嘗試在MS-WoRD中)。我認爲哪一點是左上?我試圖用上面的代碼重新排列。但它並不適用於許多情況。在旋轉橢圓後獲得左上角點是我現在面臨的主要問題。

struct SortingFunction 
{ 
    bool operator()(const CRect& a, const CRect& b) 
    { 
     if (a.left == b.left) 
      return a.top <= b.top; else return a.left < b.left; 
    } 
} 
+0

您是否在安排光標方向或執行橢圓座標變換時遇到困難?你到目前爲止有什麼?你如何存儲座標? – forsvarir 2011-05-17 08:03:41

+0

主要的問題是在旋轉橢圓後重新排列手柄的座標。光標顯示取決於手柄。 – 2011-05-17 08:10:47

+0

我相信它通常使用矩陣轉換來執行。這些http://www.mathman.biz/html/rotations_with_matrices.html和http://www.geometrictools.com/Documentation/InformationAboutEllipses.pdf可能會有用。這個SO問題http://stackoverflow.com/questions/1086968/elliptical-rotation-matrix有一個方法在它的問題可能適合你。這取決於你如何做旋轉。我想可以想象DirectX有一些幫助器來做這件事,但目前,你的問題不夠詳細,除了猜測/可能的方向。 – forsvarir 2011-05-17 08:27:29

回答

0

把手也是點,你需要做的就是確定橢圓旋轉量並旋轉把手。