图表移动x和y轴

MattLife

成员
已加入
2019年10月22日
留言内容
7
编程经验
1-3
大家好,我需要您的帮助。
我想在C#中绘制图形。
我使用Windowsform图表执行此操作。
但是我需要移动x和y轴,并且应该相应地绘制图形并且不限于固定值,并且需要缩放。我尝试使用LiveCharts,但是它们的代码对我来说太复杂了。而且经典的画布对算法的要求很高。
我需要有人来指导我。
73413202_2863856810293826_6817898486592176128_n.jpg
72920867_2863856746960499_865546892098928640_n.jpg
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,540
地点
弗吉尼亚州切萨皮克
编程经验
10+
您是否只需要使用Chart控件的轴的最小值和最大值来有效地移动原点,以及提供放大和缩小的效果?

为什么不在使用WinForms Chart控件的地方共享当前代码?
 

MattLife

成员
已加入
2019年10月22日
留言内容
7
编程经验
1-3
您是否只需要使用Chart控件的轴的最小值和最大值来有效地移动原点,以及提供放大和缩小的效果?

为什么不在使用WinForms Chart控件的地方共享当前代码?
我分享了自己拥有的东西,只是随着周期增加图表的价值,因为我不知道如何继续。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
不要张贴代码图片。我们无法对其进行编辑,也不能期望我们将其从您上传的图片中写出来。如果您希望获得当前代码的帮助,请将代码发布在论坛上,并确保将代码包装在代码标签中。 [CODE=csharp]Your code here[/CODE]
 

MattLife

成员
已加入
2019年10月22日
留言内容
7
编程经验
1-3
不要张贴代码图片。我们无法对其进行编辑,也不能期望我们将其从您上传的图片中写出来。如果您希望获得当前代码的帮助,请将代码发布在论坛上,并确保将代码包装在代码标签中。 [CODE=csharp]Your code here[/CODE]
Vrchol是山顶

C#:
public void Vykresli()
        {

            graf.Series["Kvadraticka funkce"].Points.Clear();

            if (a > 0)
            {
                double VrcholX = 0 - (b / 2);//
                double VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;



                for (double x = VrcholX - 3; x <= VrcholX + 3; ++x)
                {
                    double y = a * (x * x) + b * x + c;
                    graf.Series["Kvadraticka funkce"].Points.AddXY(x, y);
                }
            }
            else
            {
                double VrcholX = (b / 2); //
                double VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;


                for (double x = VrcholX - 3 ; x <= VrcholX + 3; ++x)
                {
                    double y = a * (x * x) + b * x + c;
                    graf.Series["Kvadraticka funkce"].Points.AddXY(x, y);
                }
            }
        }
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
如果要移动这些点,则需要使用从另一个线程执行的Timer或while循环。为了简单起见,我会接受前面的建议。

其余的代码在哪里?遗漏了大量代码...

我建议遵循本教程
并阅读以下文档 图表类(System.Windows.Forms.DataVisualization.Charting).
 

MattLife

成员
已加入
2019年10月22日
留言内容
7
编程经验
1-3
如果要移动这些点,则需要使用从另一个线程执行的Timer或while循环。为了简单起见,我会接受前面的建议。

其余的代码在哪里?遗漏了大量代码...

我建议遵循本教程
并阅读以下文档 图表类(System.Windows.Forms.DataVisualization.Charting).
我需要从X轴获取值,并写入自动更新以在更改X轴上的值时立即呈现。
形式:
C#:
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;
using System.Windows.Forms.DataVisualization.Charting;
using LiveCharts;
using LiveCharts.Defaults;
using LiveCharts.WinForms;
using LiveCharts.Wpf;

namespace Rocnikovy_projekt
{

    public partial class Form1 : Form
    {
        

        public Form1()
        {
            InitializeComponent();
        }

        void ChartLoad()
        {
            var chart = chart1.ChartAreas[0];

            chart.AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Number;

            chart.AxisX.LabelStyle.Format = "";
            chart.AxisY.LabelStyle.Format = "";
            chart.AxisX.LabelStyle.IsEndLabelVisible = true;

            chart.AxisX.Minimum = 0;
            chart.AxisY.Minimum = 0;

            chart.AxisX.Interval = 0.5;
            chart.AxisY.Interval = 10;
        }
    


        private void KvaButton1_Click(object sender, EventArgs e)
        {
            
            double x1, x2 = 0;
            KvadratickáFunkce KvaFun = new KvadratickáFunkce(double.Parse(KvaTextBox1.Text), double.Parse(KvaTextBox2.Text), double.Parse(KvaTextBox3.Text), chart1);
            KvaFun.Vykresli();
            x1 = KvaFun.Koreny(out x2);
            if (x1 != x2)
            {
                label1.Text = "Kořen x1 = " + x1;
                label2.Text = "Kořen x2 = " + x2;
            }
            else label1.Text = "Kořen x1 a x2 = " + x1;
            label3.Text = "Vrchol v bodě: " +  KvaFun.VrcholXY();
            label4.Text = "Definiční obor: " + KvaFun.Definicni_obor();
            label5.Text = KvaFun.MaxMin();
            
            
            
        }

        private void KvaTextBox1_TextChanged(object sender, EventArgs e)
        {
            label1.Text = "";
            label2.Text = "";
            label3.Text = "";
            label4.Text = "";
            label5.Text = "";
        }
    }

}
班级
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace Rocnikovy_projekt
{
    class KvadratickáFunkce
    {
        private double a;
        private double b;
        private double c;
        private Chart graf;
        private bool maximum = false;

        private double D, x1, x2;


        public KvadratickáFunkce(double a, double b, double c, Chart graf)
        {
            this.a = a;
            this.b = b;
            this.c = c;
            this.graf = graf;
        }
        //****************************************************************
   

     
        public void Vykresli()
        {

            graf.Series["Kvadraticka funkce"].Points.Clear();

            if (a > 0)
            {
                double VrcholX = 0 - (b / 2);//
                double VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;



                for (double x = VrcholX - 3; x <= VrcholX + 3; ++x)
                {
                    double y = a * (x * x) + b * x + c;
                    graf.Series["Kvadraticka funkce"].Points.AddXY(x, y);
                }
            }
            else
            {
                double VrcholX = (b / 2); //
                double VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;


                for (double x = VrcholX - 3 ; x <= VrcholX + 3; ++x)
                {
                    double y = a * (x * x) + b * x + c;
                    graf.Series["Kvadraticka funkce"].Points.AddXY(x, y);
                }
            }
        }
        //************************************************************************
        public double Koreny(out double x2)
        {
            x2 = 0;

            D = b * b - 4 * a * c;
            if (D == 0)
            {
                x1 = -b / (2 * a);
                x2 = x1;

            }
            else if (D > 0)
            {
                x1 = (-b + Math.Sqrt(D)) / (2 * a);
                x2 = (-b - Math.Sqrt(D)) / (2 * a);
            }

            return x1;
        }
        //**************************************************************************
        public string VrcholXY()
        {
            bool maximum = false;
            double VrcholX = 0;
            double VrcholY = 0;
            if (a > 0)
            {
                VrcholX = 0 - (b / 2);//
                VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;
                return "[" + VrcholX + ";" + VrcholY + "]";
                maximum = true;
             
            }

            else
            {
                VrcholX = (b / 2); //
                VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;
                return "[" + VrcholX + ";" + VrcholY + "]";
            }
        }
        //*****************************************************************************
        public string Definicni_obor()
        {
            if(a>0)
            {
                return "<" + (c - ((b * b / (4 * a)))) + ";∞)";
            }
            else
            {
                return "(-∞;" + (c - ((b * b / (4 * a)))) + ">";
            }
        }
        //****************************************************************************
        public string MaxMin()
        {
            if (maximum) return "V bodě x = " + (-(b / 2 / a) + " má funkce minimum \nFunkce nemá maximum");
            else return "V bodě x = " + (-(b / 2 / a) + " má funkce maximum \nFunkce nemá minimum");
        }
    }
}
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
我需要从X轴获取值,并写入自动更新以在更改X轴上的值时立即呈现。
因此,继续执行此操作。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
所以这没有帮助吗? 图表移动x和y轴

如果您看不懂文档,那么您应该参加更多的阅读课程学习。

如果您不能遵循教程(还不错),那么您可能应该考虑编程以外的其他职业道路。

您提供的代码不会在图表上绘制任何xy点。但是我联系你的确实。也许您应该在说我找不到我能理解的任何东西之前尝试一下。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
喔...

因此,当您想开车时,无需任何课程就可以跳上车,并且您是整个社帮的专家,无需任何培训,对吗?
错误的是,您上课,在讲师的指导下进行考试。

您之所以在这里是因为您没有上课,也没有得到指导,所以才来到我们这里。而且您从未做过任何测试,因为您没有听我说的话,因此您无法理解甚至可以开始测试;您需要阅读我提供的内容。如果您关注的话,您会发现他们的文档提供了您可以实时更新图表的方法。如果使无效,则可以调用update()。而且,如果您看了教程,就会知道如何将x / y点添加到图表中。结合文档,您将发现如何 chart1.Refresh() 强制刷新控件,以更新新的x / y点。但是我只能从您那懒惰而无能的答复中得出结论,您正在寻找施舍。

如何进行相关研究,并进行自我教育,而不是寻找可以协调解决所有问题的人。
 

MattLife

成员
已加入
2019年10月22日
留言内容
7
编程经验
1-3
Ooooook.....

因此,当您想开车时,无需任何课程就可以跳上车,并且您是整个社帮的专家,无需任何培训,对吗?
错误的是,您上课,在讲师的指导下进行考试。

您之所以在这里是因为您没有上课,也没有得到指导,所以才来到我们这里。而且您从未做过任何测试,因为您没有听我说的话,因此您无法理解甚至可以开始测试;您需要阅读我提供的内容。如果您关注的话,您会发现他们的文档提供了您可以实时更新图表的方法。如果使无效,则可以调用update()。而且,如果您看了教程,就会知道如何将x / y点添加到图表中。结合文档,您将发现如何 chart1.Refresh() 强制刷新控件,以更新新的x / y点。但是我只能从您那懒惰而无能的答复中得出结论,您正在寻找施舍。

如何进行相关研究,并进行自我教育,而不是寻找可以协调解决所有问题的人。
C#:
public void Vykresli()
        {

            graf.Series["Kvadraticka funkce"].Points.Clear();

            if (a > 0)
            {
                double VrcholX = 0 - (b / 2);//
                double VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;



                for (double x = RozA; x <= RozB; ++x)
                {
                    double y = a * (x * x) + b * x + c;
                    graf.Series["Kvadraticka funkce"].Points.AddXY(x, y);
                }
            }
            else
            {
                double VrcholX = (b / 2); //
                double VrcholY = a * VrcholX * VrcholX + b * VrcholX + c;


                for (double x = RozA; x <= RozB; ++x)
                {
                    double y = a * (x * x) + b * x + c;
                    graf.Series["Kvadraticka funkce"].Points.AddXY(x, y);
                }
            }
        }
C#:
我不是无礼的。

但是我不需要知道如何在图表上添加点。我需要做的就是从X轴获取点并将其放入变量中,然后根据可用的点绘制图形。如果图形移动或缩放(更改x轴时),它将被重绘。

这样:(我必须使用固定点。)
如果单击按钮,则按钮1中的布尔值为bool;

C#:
private void KvaTextBox4_TextChanged(object sender, EventArgs e)
        {
           
            bool spravne = double.TryParse(KvaTextBox4.Text, out double cislo);

            if (spravne&&buttonclick)
            {
                KvaFun.RozA = cislo;
                KvaFun.Vykresli();
            }
        }

        private void KvaTextBox5_TextChanged(object sender, EventArgs e)
        {
            bool spravne = double.TryParse(KvaTextBox5.Text, out double cislo);

            if(spravne&&buttonclick)
            {
                KvaFun.RozB = cislo;
                KvaFun.Vykresli();
            }
        }
 
最佳 底部