2016-01-22 102 views
1

我試圖在C#的WPF中製作一個非常非常簡單的繪製項目。除了繪製三角形外,我幾乎可以完成所有工作。我無法弄清楚創建三角形所需的數學。在鼠標拖動的WPF中繪製三角形

我有這樣的代碼繪製矩形和圓形:

case "Rectangle": 
case "Ellipse": 
    var x = Math.Min(pos.X, mm.startPoint.X); 
    var y = Math.Min(pos.Y, mm.startPoint.Y); 

    var width = Math.Max(pos.X, mm.startPoint.X) - x; 
    var height = Math.Max(pos.Y, mm.startPoint.Y) - y; 

    mm.shapeObj.Width = width; 
    mm.shapeObj.Height = height; 

    Canvas.SetLeft(mm.shapeObj, x); 
    Canvas.SetTop(mm.shapeObj, y); 
    break; 

我將它添加到畫布的孩子在其他地方。此代碼允許我單擊畫布並拖動鼠標來調整矩形或橢圓的大小。

我希望能做一些類似的三角形。爲了簡單起見,我只希望用戶能夠點擊屏幕並拖出等邊三角形。我想這樣做,用戶只需點擊三次即可創建三角形,但由於項目編碼的方式,這比聽起來要困難得多。但是,如果沒有任何方法可以計算我正在創建的三角形,則可以通過三次點擊使其工作。

+0

那麼,你需要什麼?三個頂點的座標?起點是什麼?三角形的中心還是其中一個頂點? – ChronosMOT

回答

1

如果你爲了你的觀點是這樣的:

int smX = startPoint.X < finalPoint.X ? startPoint.X : finalPoint.X; 
int bgX = startPoint.X < finalPoint.X ? finalPoint.X : startPoint.X; 

int smY = startPoint.Y < finalPoint.Y ? startPoint.Y : finalPoint.Y; 
int bgY = startPoint.Y < finalPoint.Y ? finalPoint.Y : startPoint.Y; 

你能想象一個矩形點:

(smX, smY) 
(smX, bgY) 
(bgX, smY) 
(bgX, bgY) 

所以,你可以使用矩形中間設置三角點,比畫一個三角形的要點:

(smX, bgY) 
(bgX, bgY) 
(smX + ((bgX - smX)/2), smY) 
+0

我得到這部分。我知道如何繪製三角形。問題是我沒有像在這個例子中那樣有靜態的x和y位置。我只知道用戶點擊的位置以及他們拖動鼠標的位置,我需要用它來形成等邊三角形。 –

+0

對不起,現在我明白了,我會編輯我的答案 –

+0

完成:)對不起,在第一個答案中錯誤地解釋。 –