c# winform绘制一元一次,一元二次,一元三次函数
这个用winform大概可以画出,但是清晰度不够,后面会用chart控件 和 wpf的效果去进行比较。如下,不考虑输入参数和清空按钮的话,你需要一个panel控件和一个 button按钮就可以了。
清晰度,可以对graphics进行一些设置。
g.SmoothingMode = SmoothingMode.HighQuality; //图片柔顺模式选择g.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量g.CompositingQuality = CompositingQuality.HighQuality;//再加一点
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace _1_4GraphicsWinform
{public partial class Form9 : Form{public Form9(){InitializeComponent();}Graphics g;int x0 = 200;int y0 = 200;Font font;FontFamily fm;int X0 = 0;int m = 1;float fraction1 = 0.5f;float fraction2 = (float)1 / 6;private void button1_Click(object sender, EventArgs e){if (textBox1.Text==null || textBox1.Text == ""|| textBox2.Text == null || textBox2.Text == ""){MessageBox.Show("请先输入参数!");return;}X0 = int.Parse(textBox1.Text.ToString());m = int.Parse(textBox2.Text.ToString());DrawAxis();DrawLinearFunction();DrawquadraticFunction();DrawcubicFunction();}//a(x)= X0+m*x;private void DrawLinearFunction(){float axisx;float axisy;float panelx=0;float panely=0;List points = new List();for (int i = -x0; i <= x0; i++){axisx = i;axisy = (float)(X0 + m * i) / 5;panelx = i + x0;panely = 200 - axisy;points.Add(new PointF(panelx, panely));}Pen p1 = new Pen(Color.Red, 2.5f);g.DrawLines(p1,points.ToArray());g.DrawString("a(x)", font, Brushes.Green, new PointF(300, 100));}//v(x) = fraction1*m*x*x+X0*xprivate void DrawquadraticFunction(){float axisx;float axisy;float panelx=0;float panely=0;List points = new List();for (int i = -x0; i <= x0; i++){axisx = i;axisy = (float)(fraction1 * m * i * i + X0 * i) / 5;panelx = i + x0;panely = 200 - axisy;points.Add(new PointF(panelx, panely));}Pen p1 = new Pen(Color.DeepSkyBlue, 2.5f);g.DrawLines(p1, points.ToArray());g.DrawString("v(x)", font, Brushes.Green, new PointF(210, 20));}//s(x) = fraction2*m*x*x*x +fraction1*X0 *x*x ;private void DrawcubicFunction(){float axisx;float axisy;float panelx = 0;float panely = 0;List points = new List();for (int i = -x0+1; i <= x0; i++){axisx = i;axisy = (float)(fraction2 * m * i * i * i + fraction1 * X0 * i * i) / 500;//这里缩放500倍,以显示图形panelx = i + x0;panely = 200 - axisy;points.Add(new PointF(panelx, panely));}Pen p1 = new Pen(Color.Orange,2.5f);g.DrawCurve(p1, points.ToArray()); //g.DrawLines(p1, points.ToArray());g.DrawString("s(x)", font, Brushes.Green, new PointF(250, 20));}private void DrawAxis(){//g.DrawLine(Pens.Black, 0, y0, 2 * x0, y0); //画横坐标//g.DrawLine(Pens.Black, x0, 0, x0, 2 * y0); //画纵坐标//画横轴for (int i = 0; i <= 20; i++){int tempx = i * 20 - 200;g.DrawLine(Pens.Black, new PointF(i * 20, 0), new PointF(i * 20, 2 * y0));//g.DrawString(tempx.ToString(), font, Brushes.Black, new PointF(i * 10, y0));}g.DrawLine(new Pen(Color.Black,3.0f), new PointF(y0, 0), new PointF(y0, 2 * y0));g.DrawLine(new Pen(Color.Black, 3.0f), new PointF(0, x0), new PointF(2*x0, x0));//画纵轴for (int i = 0; i <= 20; i++){int tempy = (200 - i * 20)* 5 ;g.DrawLine(Pens.Black, new PointF(0, i * 20), new PointF(2 * x0, i * 20));//g.DrawString(tempy.ToString(), font, Brushes.Black, new PointF(x0, i * 10));}//画横轴刻度for (int i = 0; i <= 8; i++){int tempx = i * 50 - 200;//g.DrawLine(Pens.Black, new PointF(i * 10, 0), new PointF(i * 10, 2 * y0));g.DrawString(tempx.ToString(), font, Brushes.Black, new PointF(i * 50, y0));}//画纵轴刻度for (int i = 0; i <= 8; i++){int tempy = (200 - i * 50) * 5;//g.DrawLine(Pens.Black, new PointF(0, i * 10), new PointF(2 * x0, i * 10));g.DrawString(tempy.ToString(), font, Brushes.Black, new PointF(x0, i * 50));}}private void Form9_Load(object sender, EventArgs e){g = panel1.CreateGraphics();g.SmoothingMode = SmoothingMode.HighQuality; //图片柔顺模式选择g.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量g.CompositingQuality = CompositingQuality.HighQuality;//再加一点fm = new FontFamily(FontFamily.Families[8].Name);font = new Font(fm, 14, FontStyle.Regular);}private void button2_Click(object sender, EventArgs e){panel1.Invalidate();}}
}

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
