【问题标题】:C# WPF Draw equilateral polygons programaticallyC# WPF 以编程方式绘制等边多边形
【发布时间】:2014-05-11 12:38:30
【问题描述】:

我正在研究一种在 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;

    }

【问题讨论】:

  • //我最多有6个点,所以这就是数组设置为那个的原因。//

标签: c# wpf polygon


【解决方案1】:

您发布了很多代码,但没有具体说明它是如何工作的,因此您的代码可能存在不止一个问题。但是,一个大问题是Math.Cos(和相关的触发方法)采用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,以便您的代码可以在度数的小数下正常工作。

【讨论】:

  • 哦,帮了很多忙,我不知道。谢谢!
  • @Tigris:不客气。我刚刚用您使用整数除法的另一个可能问题编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
相关资源
最近更新 更多