91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#怎么繪制實時曲線

發布時間:2022-02-17 13:36:40 來源:億速云 閱讀:167 作者:iii 欄目:開發技術

這篇文章主要講解了“C#怎么繪制實時曲線”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#怎么繪制實時曲線”吧!

1.要做一個調試工具,采集傳感器數據并顯示。繪制曲線注意坐標反轉,線條的張力即可。項目中的曲線是從右往左顯示的,線條的坐標都放在list里了,效果如下圖:

C#怎么繪制實時曲線

2.上代碼

public class DrawingCurve
    {
        private Graphics graphics; //Graphics 類提供將對象繪制到顯示設備的方法
        private Bitmap bitmap; //位圖對象
        private int timeLine = 60;//60s
        private int canvasWidth = 600;//畫布長度
        private int sliceCount = 0;//刻度分段個數 = timeLine
        private int xSlice = 10;//X軸刻度分端寬度
        private int xSliceHeight = 10;//X軸刻度高度
        private float tension = 0.5f; //張力系數
        private bool showX = true;
        private bool showY = true;
        private bool showZ = true;
 
        //Queue<PointF> que = new Queue<PointF>();//曲線fifo
        /// <summary>
        /// 構造函數
        /// </summary>
        public DrawingCurve() {
            this.xSlice = this.canvasWidth / timeLine;
        }
 
        /// <summary>
        /// 繪制畫布
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="points"></param>
        /// <returns></returns>
        public Bitmap DrawCanvas(int width, int height,List<float> points)
        {
            if (bitmap != null)
            {
                bitmap.Dispose();
                bitmap = null;
            }
 
            bitmap = new Bitmap(width, height);
            graphics = Graphics.FromImage(bitmap);
            graphics.FillRectangle(Brushes.Black, new Rectangle(0, 0, width, height));
            graphics.Transform = new Matrix(1, 0, 0, -1, 0, 0);//Y軸向上為正,X向右為
            graphics.TranslateTransform(0, height / 2, MatrixOrder.Append);
            
            Pen pen = new Pen(Color.Red, 1);
            pen.DashStyle = DashStyle.Custom;
            pen.DashPattern = new float[] { 2, 2 };
            graphics.DrawLine(pen, new Point(0, height / 4), new Point(width, height / 4));
            graphics.DrawLine(pen, new Point(0, height / -4), new Point(width, height / -4));
            graphics.DrawLine(new Pen(Color.GreenYellow,1), new Point(0, 0), new Point(width, 0));
            graphics.DrawString("0", new Font("Vendara",10), Brushes.White, new Point(0, -15));
            graphics.DrawString("+", new Font("Vendara", 10), Brushes.White, new Point(0, height / 4));
            graphics.DrawString("-", new Font("Vendara", 10), Brushes.White, new Point(0, height / -4-15));
            graphics.Transform = new Matrix(1, 0, 0, 1, 0, 0);//Y軸向上為正,X向右為
            graphics.TranslateTransform(0, height / 2, MatrixOrder.Append);
            graphics.DrawString("-59s", new Font("Vendara", 8), Brushes.White, new Point(0, height/2-15));
            graphics.DrawString("0s", new Font("Vendara", 8), Brushes.White, new Point(width-20, height / 2 - 15));
            for (int i = 0; i < timeLine; i++)
            {
                int scale = i * xSlice;
                graphics.DrawLine(new Pen(new SolidBrush(Color.Blue)), 0 + scale, 0 + xSliceHeight * 0.1f, 0 + scale, 0 - xSliceHeight * 0.1f);
            }
 
            graphics.Transform = new Matrix(-1, 0, 0, -1, 0, 0);//Y軸向上為正,X向右為
            graphics.TranslateTransform(width, height / 2, MatrixOrder.Append);
 
            if (showX) DrawX(graphics, points);
            if (showY) DrawY(graphics, points);
            if (showZ) DrawZ(graphics, points);
            graphics.Dispose();
            return bitmap;
        }
 
        #region 繪制曲線
        private void DrawX(Graphics graphics, List<float> points)
        {
            Pen CurvePen = new Pen(Color.Cyan, 2);
            PointF[] CurvePointF = new PointF[points.Count];
            float keys = 0;
            float values = 0;
            for (int i = 0; i < points.Count; i++)
            {
                keys = xSlice * i;
                values = 10 * (points[i] / 10);
                CurvePointF[i] = new PointF(keys, values);
            }
            graphics.DrawCurve(CurvePen, CurvePointF, this.tension);
        }
 
        private void DrawY(Graphics graphics, List<float> points)
        {
            Pen CurvePen = new Pen(Color.Purple, 2);
            PointF[] CurvePointF = new PointF[points.Count];
            float keys = 0;
            float values = 0;
            for (int i = 0; i < points.Count; i++)
            {
                keys = xSlice * i;
                values = 10 * (points[i] / 10);
                CurvePointF[i] = new PointF(keys, values);
            }
            graphics.DrawCurve(CurvePen, CurvePointF, this.tension);
        }
 
        private void DrawZ(Graphics graphics, List<float> points)
        {
            Pen CurvePen = new Pen(Color.OrangeRed, 2);
            PointF[] CurvePointF = new PointF[points.Count];
            float keys = 0;
            float values = 0;
            for (int i = 0; i < points.Count; i++)
            {
                keys = xSlice * i;
                values = 10 * (points[i] / 10);
                CurvePointF[i] = new PointF(keys, values);
            }
            graphics.DrawCurve(CurvePen, CurvePointF, this.tension);
        }
 
        /// <summary>
        /// 曲線開關
        /// </summary>
        /// <param name="_xyz"></param>
        /// <param name="show"></param>
        public void HideCurve(string _xyz,bool show) {
            switch (_xyz) { 
                case "x":
                    showX = show;
                    break;
                case "y":
                    showY = show;
                    break;
                case "z":
                    showZ = show;
                    break;
                default:
                    break;
            }
        }
 
        #endregion
    }

3.UI上使用ThreadStart進行調用,根據需要設置休眠時間即可,同時設置pictureBox顯示即可。

感謝各位的閱讀,以上就是“C#怎么繪制實時曲線”的內容了,經過本文的學習后,相信大家對C#怎么繪制實時曲線這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛扎县| 攀枝花市| 泸定县| 牙克石市| 乌兰察布市| 岑溪市| 布拖县| 丹棱县| 揭阳市| 正安县| 交口县| 桑日县| 黑龙江省| 民勤县| 大余县| 宣化县| 晋宁县| 衡水市| 枝江市| 九龙坡区| 巴楚县| 全椒县| 南雄市| 嵩明县| 南充市| 乐业县| 正阳县| 通山县| 浦东新区| 福州市| 双鸭山市| 涟水县| 徐州市| 哈密市| 嘉鱼县| 海兴县| 富顺县| 鄂托克旗| 通海县| 洞口县| 肃北|