c# график функции

235
14 июля 2018, 18:10

Нужно построить Y=4*X+8*COS(4*X) Однако получается не очень правдоподобно. Как подобрать параметры?

      private void криваяToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //Y=4*X+8*COS(4*X)
        Graphics g = Graphics.FromHwnd(PB1.Handle);
        g.Clear(Form1.DefaultBackColor);
        g.TranslateTransform(PB1.Width / 2, PB1.Height / 2);
        g.DrawLine(Pens.Black, -PB1.Width / 2, 0, PB1.Width / 2, 0);
        g.DrawLine(Pens.Black, 0, -PB1.Height / 2, 0, PB1.Height / 2);
        g.RotateTransform(90);
        float PI = (float)(Math.PI / (PB1.Width - 1));
        for (int x = -PB1.Width / 2; x <= PB1.Width / 2; x++)
        {
            g.DrawLine(gPen, x, (float)(4*x+80 * Math.Cos(40 * x * PI)), x + 1, (float)(4*(x+1)+80 * Math.Cos(40 * (x + 1) * PI)));
        }
    }

Answer 1

попробуйте код:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            float W = panel1.Width, H = panel1.Height;
            float halfW = W / 2, halfH = H / 2;
            // оси координат
            e.Graphics.DrawLine(Pens.Black, halfW, 0, halfW, H);
            e.Graphics.DrawLine(Pens.Black, 0, halfH, W, halfH);
            // координаты предыдущей точки
            int ixPrev = -1, iyPrev = (int)halfH;
            // тангенс на интервале x=[-Pi..Pi]
            // проходим по всем точкам на форме, вычисляем x и y=tg(x)
            for (int ix = 0; ix < W; ix++)
            {
                // переводим x в диапазон -1..1
                float x = (ix - halfW) / halfW;
                // переводим x в -pi..pi
                x *= (float)Math.PI;
                // получаем tg(x)
                float y = (float)Math.Tan(x);
                // переводим y из -1..1 в пикселы на форме
                int iy = (int)(halfH - y * halfH);
                // вуаля
                e.Graphics.DrawLine(Pens.Red, ixPrev, iyPrev, ix, iy);
                ixPrev = ix;
                iyPrev = iy;
            }
        }
    }
}

пример:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1 {
    public partial class Form1 : Form {
        private const float diapazon_min = -100;
        private const float diapazon_max = 100;
        private const float inc_step = 1;
        PointF[] arr;
        public Form1() {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e) {
            arr = new PointF[(int)(((diapazon_max - diapazon_min) / inc_step) + 1)];
            int c = 0;
            for (float x = diapazon_min; x < diapazon_max; x++) {
                arr[c] = new PointF(x, Func(x));
                c++;
            }
        }
        private float Func(float x) {
            return x*x*x;
        }
        private void pic_Paint(object sender, PaintEventArgs e) {
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
            using (Pen pen = new Pen(Color.Blue)) {
                Matrix mat = new Matrix(1, 0, 0, -1, 0, 0); // отражение
                mat.Translate(pic.Width / 2, pic.Height / 2, MatrixOrder.Append);
                //mat.Scale(2, 2);
                e.Graphics.MultiplyTransform(mat);
                e.Graphics.DrawLine(pen, diapazon_min, 0, diapazon_max, 0);
                e.Graphics.DrawLine(pen, 0, diapazon_min, 0, diapazon_max);
                if (arr != null) {
                    e.Graphics.DrawLines(pen, arr);
                }
            }
        }
    }
}
READ ALSO
C# WPF AvalonDock

C# WPF AvalonDock

Устанавливаю AvalonDock через NuGet и все нормально работает, но я бы хотел использовать source code в проектеКопирую классы и все остальное и VS 2017 видит...

219