找到贝塞尔曲线上的点。 (GDI +)

时间:2011-01-06 05:51:21

标签: c# gdi+ gdi

你能帮我用c#来帮助我做到这一点。

我有一个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);

我的要求是找到贝塞尔曲线/形状(饼图,弧线)上的所有点。

即,我需要在我的方法中重绘形状,该方法只接受点数组。我只有矩形坐标,起始角度和扫掠角度。任何人都可以让我知道.net中是否有任何inbuild方法来计算这个或者是否有任何简单的方法来找到这个。

如果您需要任何其他信息,请与我们联系。请帮助我,因为这对我来说非常关键,因为我不是数学上的天才。

提前致谢。

此致 詹姆斯

4 个答案:

答案 0 :(得分:3)

我已完成数学运算,并在代码项目的下面给出的文章中创建了一个名为BezierCoordinates的函数。

BezierCurve

它是用C#完成的解决方案,在Silverlight中显示。

答案 1 :(得分: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.PathPointsGraphicsPath.PathTypesGraphicsPath.PointCount属性访问图形路径数据。

答案 2 :(得分:1)

将弧/曲线添加到GraphicsPath对象,使用Flatten method将路径中的Bezier曲线近似为线段,并使用PathPoints property获取点阵列。

答案 3 :(得分:0)

你需要一些数学,但幸运的是没有什么疯狂的。该网站解释了如何通过计算圆圈来绘制圆圈:

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

它不在C#中,但应该让你知道它是如何工作的。 Math.Sin()Math.Cos()是.NET的罪和cos方法。