2011-01-06 104 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