protected override void OnPaint(PaintEventArgs args)
{
Graphics grfx = args.Grphics;
int cx = 300;
int cy = 160;
Point[] apt = new Point[5];
for (int i = 0; i< apt.Length; i++)
{
double dAngle = (i * 0.8 - 0.5) * Math.PI;
apt[i] = new Point((int)(cx * (0.25 + 0.24 * Math.Cos(dAgngle))),(int)(cy * (0.5 + 0.48 * Math.Sin(dAngle))));
}
grfx.FillPolygon(new SolidBrush(Color.Red),
apt,
FillMode.Winding);
}
apt[i] = new Point((int)(cx * (0.25 + 0.24 * Math.Cos(dAgngle))),(int)(cy * (0.5 + 0.48 * Math.Sin(dAngle))))
这一步看不懂
不是坐标点看不懂,是这个算法不懂,0.25,0.24这些算法是怎么得到?
这个C#里画五角星的函数,高手解释一下,谢谢
答案:2 悬赏:50
解决时间 2021-03-13 02:08
- 提问者网友:先森请一心
- 2021-03-12 12:25
最佳答案
- 二级知识专家网友:疯山鬼
- 2021-03-12 13:16
apt[i] = new Point((int)(cx * (0.25 + 0.24 * Math.Cos(dAgngle))),(int)(cy * (0.5 + 0.48 * Math.Sin(dAngle))))
分解开来,是:
new Point(x,y);
x = (int)(cx * (0.25 + 0.24 * Math.Cos(dAgngle)))
0.24乘以dAgngle的COS值,加上0.25,再把结果乘以cx,最后把运算结果转换成int类型
y = (int)(cy * (0.5 + 0.48 * Math.Sin(dAngle)))
0.48乘以dAgngle的SIN值,加上0.5,再把结果乘以cy,最后把运算结果转换成int类型
分解开来,是:
new Point(x,y);
x = (int)(cx * (0.25 + 0.24 * Math.Cos(dAgngle)))
0.24乘以dAgngle的COS值,加上0.25,再把结果乘以cx,最后把运算结果转换成int类型
y = (int)(cy * (0.5 + 0.48 * Math.Sin(dAngle)))
0.48乘以dAgngle的SIN值,加上0.5,再把结果乘以cy,最后把运算结果转换成int类型
全部回答
- 1楼网友:滚刀废物浮浪人
- 2021-03-12 13:22
试试:
void mydraw(graphics g,point center,int radius){
point[] pts = new point[5];
//获取五角星5个顶点
pts[0] = new point(center.x,center.y - radius);
pts[1] = rotate72(pts[0],center);
pts[2] = rotate72(pts[1],center);
pts[3] = rotate72(pts[2],center);
pts[4] = rotate72(pts[3],center);
//简单地拉5条线
pen pen = new pen(new solidbrush(color.blue));
g.drawline(pen,pts[0],pts[2]);
g.drawline(pen,pts[0],pts[3]);
g.drawline(pen,pts[1],pts[3]);
g.drawline(pen,pts[1],pts[4]);
g.drawline(pen,pts[2],pts[4]);
}
//旋转72
private point rotate72(point pt,point center){
int x = (int)(center.x + (pt.x - center.x) * math.cos(72.0 * math.pi/180) - (pt.y - center.y) * math.sin(72.0 * math.pi/180)),
y = (int)(center.y + (pt.x - center.x) * math.sin(72.0 * math.pi/180) + (pt.y - center.y) * math.cos(72.0 * math.pi/180));
return new point(x,y);
}
这样画出来的五角星是中间有五条线的,如果你想画的是中间没有五条线,看看上面的代码自己就可以搞定了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯