2011-01-06 102 views
0

你能幫我做到這一點使用C#。找到貝塞爾曲線上的點。 (GDI +)

我有一個GDI +如下呼籲:

graphics.FillPie(Brushes.White, _ 
       new Rectangle(0, 0, 400, 150), 0 - 90, 77.783651160272726f); 

graphics.DrawArc(new System.Drawing.Pen(Brushes.Black, 2), _ 
       new RectangleF(0, 0, 400, 150), 0 - 90, 77.783651160272726f); 

我的要求是找到沿貝塞爾曲線/形狀(餡餅,ARC)的所有點。

即,我需要重繪我的方法中的形狀,它只接受點陣列。我只有矩形座標,與我開始角度和掃描角度。任何人都可以讓我知道,如果有.net中的任何inbuild方法來計算這或有任何簡單的方法來找到這一個。

請讓我知道如果你需要任何其它信息。請幫助我,因爲這對我來說非常重要,因爲我在數學中不是一個精明的人。

在此先感謝。

問候, 詹姆斯

回答

1

你真的要代表這是一個點的數組?

如果您可以靈活處理方法的簽名,而不是Point[]接受GraphicsPath,那麼您可以通過將這兩個部分合並來在C#中表示此曲線。

編輯:添加例子

例如,您可以創建一個GraphicsPath這樣的:

GraphicsPath path = new GraphicsPath(); 
path.AddPie(new Rectangle(0, 0, 400, 150), -90, 77.78f); 
path.AddArc(new Rectangle(0, 0, 400, 150), -90, 77.78f); 

以後,您可以使用它使用Graphics.DrawPath方法來繪製圖形,或訪問圖形路徑數據通過GraphicsPath.PathPoints,GraphicsPath.PathTypesGraphicsPath.PointCount屬性。

+0

請你詳細解釋一下,如何將其表示爲圖形路徑? – user438959 2011-01-06 06:27:56

0

你需要一些數學,幸好沒有什麼瘋狂。這個網站介紹如何通過它計算點畫圓:

http://www.nsbasic.com/palm/info/technotes/TN25a.htm

這不是在C#中,但應該給你它是如何工作的想法。 Math.Sin()Math.Cos()是.NET的sin和cos方法。

3

我也做了數學和創建了一個名爲代碼項目下面給出的文章中BezierCoordinates功能。

BezierCurve

它在C#中做了一個解決方案,在Silverlight中顯示。

1

將您的弧/曲線添加到GraphicsPath對象,使用Flatten method將路徑中的貝塞爾曲線近似爲線段,並使用PathPoints property來獲取點數組。

+0

[Flatten的C++ API文檔](http://msdn.microsoft.com/zh-cn/library/ms535530。aspx)有一個與問題完全匹配的示例:將Bézier曲線轉換爲點。 – 2014-06-09 15:18:06