C\#실시 간 접선 도,파형 도 그리 기

이 Demo 는 VS 자체 의 Chart 도표 컨트롤 을 사용 하여 실시 간 으로 동적 으로 표시 되 는 접 는 선 그림 과 파형 도 를 제작한다.본 고 는 학습 공유 용 으로 만 제공 되 며 부족 한 점 이 있 으 면 지적 해 주 십시오.
관련 지식 포인트:
Chart 컨트롤 러 는 기능 이 강해 서 기둥 모양 의 그림,접 는 선 그림,파형 도,떡 모양 의 그림 을 그 릴 수 있 고 그림 에 대한 개발 과 맞 춤 형 제작 을 크게 간소화 할 수 있 습 니 다.
Chart 컨트롤 의 관련 개념:
  • ChartArea 는 도표 구역 을 나타 내 고 하나의 Chart 는 여러 개의 ChartArea 를 그 려 서 겹 칠 수 있다
  • 4.567917.Series 는 데이터 서열 을 나타 내 고 모든 ChartArea 는 여러 개의 데이터 라인 을 가 질 수 있다.즉,시 리 즈 는 ChartArea 에 속한다.
  • Axis X,Axis Y 는 주 좌표 축 을 나타 내 고 모든 ChartArea 에 대응 하 는 좌표 축 이 있 으 며 주 좌표 축,보조 좌표 축 을 포함한다.
  • Queue 집합 은 먼저 나 온 집합 을 나타 낸다.
    주로 두 가지 방법 이 있다.
  • Dequeue()는 System.collections.Generic.Queue시작 에 있 는 대상 을 제거 하고 되 돌려 줍 니 다
  • Enqueue()는 System.collections.Generic.Queue의 끝 에 대상 을 추가 하 겠 다 고 밝 혔 다.
  • Timer,타이머,정시 행 에 해당 하 는 기능,데 이 터 를 업데이트 하고 도 표를 새로 고 칩 니 다.
    -----------------------------------------------------------------------------------------------------------
    효과 도
    다음 과 같 습 니 다[초기 화 단 추 를 먼저 클릭 하고 시작 단 추 를 클릭 합 니 다]:
    접선 도[접선 도,[0,100]사이 의 즉시 수 를 취하 여 채 우 는 것 입 니 다]:

    파형 도[파형 도,정 현 치 를 취하 고 50 배 확대 한 다음 에 50 위로 이동 합 니 다]

    핵심 코드
    코드 는 다음 과 같 습 니 다:
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
    
    namespace WindowsFormsApplication1
    {
     public partial class RealChart : Form
     {
      private Queue<double> dataQueue = new Queue<double>(100);
    
      private int curValue = 0;
    
      private int num = 5;//         
    
      public RealChart()
      {
       InitializeComponent();
      }
    
      /// <summary>
      ///      
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnInit_Click(object sender, EventArgs e)
      {
       InitChart();
      }
    
      /// <summary>
      ///     
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnStart_Click(object sender, EventArgs e)
      {
       this.timer1.Start();
      }
    
      /// <summary>
      ///     
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnStop_Click(object sender, EventArgs e)
      {
       this.timer1.Stop();
      }
    
      /// <summary>
      ///      
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void timer1_Tick(object sender, EventArgs e)
      {
       UpdateQueueValue();
       this.chart1.Series[0].Points.Clear();
       for(int i=0;i<dataQueue.Count;i++){
        this.chart1.Series[0].Points.AddXY((i+1), dataQueue.ElementAt(i));
       }
      }
    
      /// <summary>
      ///      
      /// </summary>
      private void InitChart() {
       //      
       this.chart1.ChartAreas.Clear();
       ChartArea chartArea1 = new ChartArea("C1");
       this.chart1.ChartAreas.Add(chartArea1);
       //           
       this.chart1.Series.Clear();
       Series series1 = new Series("S1");
       series1.ChartArea = "C1";
       this.chart1.Series.Add(series1);
       //        
       this.chart1.ChartAreas[0].AxisY.Minimum = 0;
       this.chart1.ChartAreas[0].AxisY.Maximum =100;
       this.chart1.ChartAreas[0].AxisX.Interval = 5;
       this.chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
       this.chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
       //    
       this.chart1.Titles.Clear();
       this.chart1.Titles.Add("S01");
       this.chart1.Titles[0].Text = "XXX  ";
       this.chart1.Titles[0].ForeColor = Color.RoyalBlue;
       this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
       //        
       this.chart1.Series[0].Color = Color.Red;
       if (rb1.Checked)
       {
        this.chart1.Titles[0].Text =string.Format( "XXX {0}   ",rb1.Text);
        this.chart1.Series[0].ChartType = SeriesChartType.Line;
       }
       if (rb2.Checked) {
        this.chart1.Titles[0].Text = string.Format("XXX {0}   ", rb2.Text);
        this.chart1.Series[0].ChartType = SeriesChartType.Spline;
       }
       this.chart1.Series[0].Points.Clear();
      }
    
      //       
      private void UpdateQueueValue() {
    
       if (dataQueue.Count > 100) {
        //   
        for (int i = 0; i < num; i++)
        {
         dataQueue.Dequeue();
        }
       }
       if (rb1.Checked)
       {
        Random r = new Random();
        for (int i = 0; i < num; i++)
        {
         dataQueue.Enqueue(r.Next(0, 100));
        }
       }
       if (rb2.Checked) {
        for (int i = 0; i < num; i++)
        {
         // curValue  [0,360]    
         curValue = curValue % 360;
         //       ,  50 ,   50
         dataQueue.Enqueue((50*Math.Sin(curValue*Math.PI / 180))+50);
         curValue=curValue+10;
        }
       }
      }
     }
    }
    비고
    타이머 타이머 타이머[마이크로소프트 자체 컨트롤]:
    설명:같은 시간 간격 으로 사용자 정의 일 을 유발 한 다 는 뜻 이다.사용자 가 필요 로 하 는 기능 을 실현 하 다.이 예 는 대기 열 에 있 는 데 이 터 를 정기 적 으로 업데이트 하고 도 표를 새로 고 치 는 데 사 용 됩 니 다.
    상용 설명:
  • Interval 시간 간격,밀리초 단위,본 예 는 300 밀리초 입 니 다
  • Tick 이 정시 에 촉발 하 는 이벤트,본 사례 는 timer 1 에 대응 합 니 다.Tick 이벤트 방법..
  • Start(),Stop()은 타이머 의 작 동 과 정 지 를 나타 낸다.Enabled 는 타이머 가 활성화 되 었 는 지 여 부 를 표시 합 니 다.기본 값 은 false 이 며 수 동 으로 true 로 설정 해 야 합 니 다

  • 원본 코드 가 필요 하기 때문에 원본 다운로드 링크 를 여기에 두 십시오.스스로 다운로드 하 십시오.감사합니다.
    원본 코드 다운로드
    이상 은 C\#실시 간 접 는 선 그림,파형 그림 의 상세 한 내용 입 니 다.C\#접 는 선 그림,파형 그림 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기