我正在研究一种在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;
}
答案 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
,这样你的代码就可以在一定程度上完成。