2016-12-27 84 views
4

TriangelC#另一個正三角形

我一直在試圖吸取更大的三角形的邊等邊三角形的邊繪製等邊三角形。第一個三角形是通過設置點A,B和C的單獨方法繪製的。到目前爲止,我剛剛開始使用兩側,我可以找到較小三角形的前兩個點,但我無法確定正確的公式爲第三。我嘗試刷新我對三角學的記憶,但我陷入了僵局。

 float a =0; 

     Point p = new Point(pnlDisplay.Width/2 - (pnlDisplay.Width/2) /3, 200); 
     Triangle t = new Triangle(p, pnlDisplay.Width/3, 0); 
     drawEqTriangle(e, t); 


     Point p1 = new Point(); 
     Point p2 = new Point(); 
     Point p3 = new Point(); 


     p1.X = Convert.ToInt32(A.X + t.size/3); 
     p1.Y = Convert.ToInt32(A.Y); 

     p2.X = Convert.ToInt32(A.X + (t.size - t.size/3)); 
     p2.Y = Convert.ToInt32(A.Y); 
     ////////////////////////////// 
     p3.X = Convert.ToInt32((A.X - t.size/3) * Math.Sin(a)); 
     p3.Y = Convert.ToInt32((A.Y - t.size/3) * Math.Cos(a)); 
     drawTriangle(e, p1, p2, p3); 


     p1.X = Convert.ToInt32((B.X - t.size/3 * Math.Cos(t.angle + Math.PI/3))); 
     p1.Y = Convert.ToInt32((B.Y + t.size/3 * Math.Sin(t.angle+ Math.PI/3))); 

     p2.X = Convert.ToInt32((B.X - (t.size - t.size/3) * Math.Cos(t.angle + Math.PI/3))); 
     p2.Y = Convert.ToInt32((B.Y + (t.size - t.size/3) * Math.Sin(t.angle + Math.PI/3))); 
     ////////////////////////////// 
     p3.X = Convert.ToInt32((B.X - t.size/3) * Math.Cos(a)); 
     p3.Y = Convert.ToInt32((B.Y - t.size/3) * Math.Tan(a)); 
     drawTriangle(e, p1, p2, p3); 

這可能是數學部分的問題,但我想我會先在這裏嘗試。我需要的是公式p3.X和p3.Y

任何幫助將不勝感激。

編輯:改變「a」浮動a = Convert.ToSingle(60 * Math.PI/180);

結果在此: Edited

最後編輯: 使用MBO的回答是: enter image description here

+0

你的角度是0,這是正常的嗎? – Piou

+1

嘗試用'float a = 60 * Math.PI/180;'並且爲了子三角點3用'+'替換'-':'p3.X = Convert.ToInt32((AX + t.size/3)* Math .Sin(a));'和'p3.Y = Convert.ToInt32((AY + t.size/3)* Math.Cos(a));'因爲圖像{0,0}是左上手畫布的一角。 – Piou

+0

@Piou謝謝你,我會認爲 – Protium

回答

2

讓我們構建的通用公式任何三角形的方向(注意,這是值得使用大A []數組三角形而不是明確的A,B,C頂點)

p1.X = A.X * 2/3 + B.X/3; 
    p1.Y = A.Y * 2/3 + B.Y/3; 

    p2.X = A.X/3 + B.X * 2/3; 
    p2.Y = A.Y/3 + B.Y * 2/3; 

    D.X = (A.X - p1.X); 
    D.Y = (A.Y - p1.Y); 

    //note - angle sign depends on ABC orientation CW/CCW 
    p3.X = p1.X + D.X * Cos(2*Pi/3) - D.Y * Sin(2*Pi/3) 
    p3.Y = p1.Y + D.X * Sin(2*Pi/3) + D.Y * Cos(2*Pi/3) 
+0

非常感謝!這完全解決了我的問題。 – Protium