用C# 在面板上画以下图形.要求全代码计算
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/28 18:28:21
用C# 在面板上画以下图形.要求全代码计算
要求用C#代码画出以下图形,外圆和内圆都是正圆,内圆大小相等,已知外圆直径和内圆的个数,要计算出内圆的直径和每个内圆的坐标.
要求用C#代码画出以下图形,外圆和内圆都是正圆,内圆大小相等,已知外圆直径和内圆的个数,要计算出内圆的直径和每个内圆的坐标.
上面兄台是把坐标算出来画,我的是画了再算,差不多,他的题目要求坐标的时候比我的好,但是如果不求坐标,用坐标系旋转更好,因为那样没有矩形位置计算,粘贴运行不了,在构造里面加this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);因为这句是vs事件添加的时候 后台自己 加上的 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 外圆半径
/// </summary>
private float radius = 0;
/// <summary>
/// 内圆数量
/// </summary>
private uint circlesCount = 0;
/// <summary>
/// 重写了paint响应
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (radius > 0 && circlesCount > 0)
{
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Black);
g.DrawEllipse(pen, 0, 0, radius * 2, radius * 2);
//获得小圆半径 r=R*sin(a/2)/[1+sin(a/2)] a为角度360.0f / circlesCount
//这个我不会算,百度出来的,一个扇形内最大圆半径
//而且函数要的是弧度,不是角度,还需要转换 弧度 = 角度 * PI / 180
float angle = 360.0f / circlesCount;
double radian = angle / 2 * Math.PI / 180f;
float innerRadius = (float)(radius * (Math.Sin(radian) / (1 + Math.Sin(radian))));
//内圆直径
float innerDiameter = innerRadius * 2;
PointF[] centers = new PointF[circlesCount];
//把坐标系原点放在外圆圆心
g.TranslateTransform(radius, radius);
//这里完全是为了你要的求坐标,否则没这么复杂的转换坐标点
for (int i = 0; i < circlesCount; i++)
{
//在当前坐标系最底部画一个圆
g.DrawEllipse(pen, 0 - innerRadius, radius - innerDiameter, innerDiameter, innerDiameter);
//这个圆当前坐标系的圆心
PointF[] center = { new PointF(0, radius - innerRadius) };
//转换坐标点
g.Transform.TransformPoints(center);
centers[i] = center[0];
//把坐标系偏转对应角度
g.RotateTransform(angle);
}
//刚好转弯以后坐标系又成正常正北,正东 坐标系,
//横纵坐标轴
pen.Color = Color.Blue;
g.DrawLine(pen, new PointF(0, -radius), new PointF(0, radius + 50));
g.DrawLine(pen, new PointF(-radius, 0), new PointF(radius + 50, 0));
//这样再转换一次坐标系就能得到正常0,0为圆心的坐标
g.ResetTransform();
g.TranslateTransform(-radius, -radius);
g.Transform.TransformPoints(centers);
g.ResetTransform();
String s = "";
for (int i = 0; i < circlesCount; i++)
{
s += String.Format("第{0}个坐标是:{1},{2}\r\n", i + 1, centers[i].X, centers[i].Y);
}
g.DrawString(s, new Font("宋体", 10), Brushes.Red, new Point((int)radius + 10, (int)radius * 2 + 10));
}
}
private void btnDraw_Click(object sender, EventArgs e)
{
radius = float.Parse(radiusTextbox.Text);
circlesCount = uint.Parse(circlesCountTextBox.Text);
this.Invalidate();
}
}
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 外圆半径
/// </summary>
private float radius = 0;
/// <summary>
/// 内圆数量
/// </summary>
private uint circlesCount = 0;
/// <summary>
/// 重写了paint响应
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (radius > 0 && circlesCount > 0)
{
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Black);
g.DrawEllipse(pen, 0, 0, radius * 2, radius * 2);
//获得小圆半径 r=R*sin(a/2)/[1+sin(a/2)] a为角度360.0f / circlesCount
//这个我不会算,百度出来的,一个扇形内最大圆半径
//而且函数要的是弧度,不是角度,还需要转换 弧度 = 角度 * PI / 180
float angle = 360.0f / circlesCount;
double radian = angle / 2 * Math.PI / 180f;
float innerRadius = (float)(radius * (Math.Sin(radian) / (1 + Math.Sin(radian))));
//内圆直径
float innerDiameter = innerRadius * 2;
PointF[] centers = new PointF[circlesCount];
//把坐标系原点放在外圆圆心
g.TranslateTransform(radius, radius);
//这里完全是为了你要的求坐标,否则没这么复杂的转换坐标点
for (int i = 0; i < circlesCount; i++)
{
//在当前坐标系最底部画一个圆
g.DrawEllipse(pen, 0 - innerRadius, radius - innerDiameter, innerDiameter, innerDiameter);
//这个圆当前坐标系的圆心
PointF[] center = { new PointF(0, radius - innerRadius) };
//转换坐标点
g.Transform.TransformPoints(center);
centers[i] = center[0];
//把坐标系偏转对应角度
g.RotateTransform(angle);
}
//刚好转弯以后坐标系又成正常正北,正东 坐标系,
//横纵坐标轴
pen.Color = Color.Blue;
g.DrawLine(pen, new PointF(0, -radius), new PointF(0, radius + 50));
g.DrawLine(pen, new PointF(-radius, 0), new PointF(radius + 50, 0));
//这样再转换一次坐标系就能得到正常0,0为圆心的坐标
g.ResetTransform();
g.TranslateTransform(-radius, -radius);
g.Transform.TransformPoints(centers);
g.ResetTransform();
String s = "";
for (int i = 0; i < circlesCount; i++)
{
s += String.Format("第{0}个坐标是:{1},{2}\r\n", i + 1, centers[i].X, centers[i].Y);
}
g.DrawString(s, new Font("宋体", 10), Brushes.Red, new Point((int)radius + 10, (int)radius * 2 + 10));
}
}
private void btnDraw_Click(object sender, EventArgs e)
{
radius = float.Parse(radiusTextbox.Text);
circlesCount = uint.Parse(circlesCountTextBox.Text);
this.Invalidate();
}
}
用C#语言编写,要求申明三角形类,继承图形抽象类,计算三角形的周长和面积!
几道c#的题目,要求全用c#语句编写,
如何用C#画出五角星的图形,求代码
用VS 2005编写,怎么用C#循环语句在屏幕上用”*”打印输出等腰三角形的图形?
麻烦打印在面板上!
如何用C#画正弦函数图形
C# 输入10个整数,要求输出其平均值、最大值、最小值,求代码、
C#的代码 下面这几句
C#三角形面积计算器看有高手以前用C#语言做过简单三角形面积计算器吗?当两条边不构成三角形事会抛出提示.可以把代码放上给
在C#中num1 = Convert.ToInt32(textBox1.Text.Trim());这句代码是什么意思啊?
橱柜的不锈钢面板是用什么胶粘在木板上的
led导热胶带哪有卖,准备用在led面板灯和日光灯上,粘性好,耐高温.