C#WPF以编程方式绘制等边多边形

时间:2014-05-11 12:38:30

标签: c# wpf polygon

我正在研究一种在C#,WPF中以编程方式绘制等边多边形形状的方法。但是我被卡住了,我无法解决计算角度问题。问题出在哪儿?我该怎么纠正这个?我给了public int,R(radius)一个值为100。

private Path EquilateralPolygon(int sides)
    {
        //Centering
        Point center = new Point(canvasSize.Width / 2, canvasSize.Height / 2);

        PathFigure myPathFigure = new PathFigure();

        int alfa = 360 / sides;
        int[] angles = new int[6];
        for (int i = 0; i < sides; i++)
            angles[i] = 360 - alfa * i;

        MessageBox.Show(angles.Sum().ToString());

        Point A = new Point(center.X, center.Y - R);

        myPathFigure.StartPoint = A;
        PolyLineSegment myLineSegment = new PolyLineSegment();
        for (int i = 1; i < sides; i++)
        {
            myLineSegment.Points.Add(new Point(center.X + Math.Cos(angles[i]) * R, center.Y + Math.Sin(angles[i]) * R));
        }

        myLineSegment.Points.Add(A);

        PathSegmentCollection myPathSegmentCollection = new PathSegmentCollection();
        myPathSegmentCollection.Add(myLineSegment);

        myPathFigure.Segments = myPathSegmentCollection;

        PathFigureCollection myPathFigureCollection = new PathFigureCollection();
        myPathFigureCollection.Add(myPathFigure);

        PathGeometry myPathGeometry = new PathGeometry();
        myPathGeometry.Figures = myPathFigureCollection;

        Path myPath = new Path();
        myPath.Stroke = Brushes.Red;
        myPath.StrokeThickness = 1;
        myPath.Data = myPathGeometry;

        return myPath;

    }

1 个答案:

答案 0 :(得分:2)

您发布了大量代码,并没有具体说明它是如何工作的,因此您的代码可能存在多个问题。然而,一个大问题是Math.Cos(和相关的trig方法)采用radians形式的角度,而不是你拥有的角度。

  

参数

d
     

类型:System.Double一个角度,以弧度为单位

您需要将它们转换为弧度。要转换,乘以π(可通过Math.PI获得)然后除以180度。

myLineSegment.Points.Add(
    new Point(center.X + Math.Cos(angles[i] * Math.PI / 180.0) * R, 
    center.Y + Math.Sin(angles[i] * Math.PI / 180) * R));

编辑:除了弧度/度数问题之外,我还可以看到您在使用angles数组和计算alfa时可能遇到整数截断。我建议你尝试将整数的使用更改为double,这样你的代码就可以在一定程度上完成。