怎样用c#画正多边形,求代码。。。。

 我来答
suzic
2012-06-20 · TA获得超过510个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:326万
展开全部
比如你要把多边形画在一个Form窗体上,重写该窗体OnPaint函数,调用我给出的DrawRegularPoly函数即可。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 示例为画一个圆心点在200,200处,半径为100的正7边形
DrawRegularPoly(e.Graphics, new Point(200, 200), 100, 7);
}

/// <summary>
/// 使用外切圆的方法绘制一个正多边形
/// </summary>
/// <param name="stage">要绘制图形的设备</param>
/// <param name="center">正多边形外切圆的圆心</param>
/// <param name="radius">正多边形外切圆的半径</param>
/// <param name="sideCount">正多边形的边数</param>
private void DrawRegularPoly(Graphics stage, Point center, int radius, int sideCount)
{
// 多边形至少要有3条边,边数不达标就返回。
if (sideCount < 3) return;

// 每条边对应的圆心角角度,精确为浮点数。使用弧度制,360度角为2派
double arc = 2 * Math.PI / sideCount;

// 为多边形创建所有的顶点列表
var pointList = new List<Point>();
for (int i = 0; i < sideCount; i++)
{
var curArc = arc * i; // 当前点对应的圆心角角度
var pt = new Point();
// 就是简单的三角函数正余弦根据圆心角和半径算点坐标。这里都取整就行
pt.X = center.X + (int)(radius * Math.Cos(curArc));
pt.Y = center.Y + (int)(radius * Math.Sin(curArc));

pointList.Add(pt);
}

// 在给出的场景中用黑笔把这个多边形画出来
stage.DrawPolygon(Pens.Black, pointList.ToArray());
}
追问
不好意思我的Vs2008的From的属性好像没Onpaint方法。。。其实我是想通过一个TextBox来确定多边形的边数的
就是先在TextBox里输入要画的边数再画多边形。麻烦再修改一下一定给分。。。谢了
追答
override是重载,你要自己去加,直接把我给你的OnPaint函数放在你的窗体代码中试试看久知道了:)所有的Form,Control都具有这个函数OnPaint的重载,别说2008,2005都有的。

你可以添加一个TextBox,然后再加个按钮,当按钮点击的时候响应函数,这个函数只需简单调用窗体的
Invalidate();
方法更新绘图。唯一的变化就是DrawRegularPoly的参数中最后一个边数的参数直接使用TextBox上即用户输入的数值来绘图即可。简单举例可以这样调用:
DrawRegularPoly(e.Graphics, new Point(200, 200), 100, int.Parse(this.textBox1.Text));
来获取控件中的数字。(这里面没考虑异常处理,为了不让程序报错,textbox里面你最好填写一个初始值比如7啊4啊什么的,并且不要后面修改数值的时候改成不是正整数的值)
aaasuper
2012-06-20 · TA获得超过801个赞
知道小有建树答主
回答量:431
采纳率:100%
帮助的人:627万
展开全部
在窗体上方个picturebox
public Form1()
{
InitializeComponent();
paintdd(12);
}
void paintdd(int num)
{
const int size = 200;
const int R = size / 2;
Bitmap bmp = new Bitmap(size, size);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Red);//绘制背景,可注释掉
g.TranslateTransform(R, R);
g.DrawEllipse(Pens.Yellow, -R, -R, size,size);//绘制外接圆,可注释掉
double fAngel = Math.PI*2 / num;
double fStartAngel = Math.PI / 2f + fAngel / 2f;
PointF ptfStart = new PointF(R * (float)Math.Cos(fStartAngel), -R * (float)Math.Sin(fStartAngel));
for (int i = 0; i < num; i++)
{
fStartAngel += fAngel;
PointF ptfEnd = new PointF(R * (float)Math.Cos(fStartAngel), -R * (float)Math.Sin(fStartAngel));
g.DrawLine(Pens.Black, ptfStart, ptfEnd);
ptfStart = ptfEnd;
}
g.Dispose();
pictureBox1.Image = bmp;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alwing
2012-06-20 · TA获得超过132个赞
知道小有建树答主
回答量:294
采纳率:0%
帮助的人:137万
展开全部
思路就是运用解析几何的知识,先得到每个点的坐标,然后画直线
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leon382
2012-06-20 · TA获得超过1064个赞
知道小有建树答主
回答量:1744
采纳率:0%
帮助的人:993万
展开全部
具体你可以参照一个 开源的系统 Diagram.NET
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扬帆远航1988
2012-06-20 · TA获得超过151个赞
知道答主
回答量:230
采纳率:0%
帮助的人:102万
展开全部
正N边行吗,有点高级,学习一下
我估计应该是根据是几边型先计算出角度,然后一条线段一条线段的画
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式