在极坐标图上绘制弧线。

SankaUD

会员
已加入
2018年5月17日
留言内容
7
编程经验
1-3
大家好,

与极坐标图控件有关的另一个问题。我想绘制两条线,穿过极坐标图中的某些值并计算线之间的角度,然后绘制圆弧以指示角度,并绘制文本以指示角度值。我怎样才能做到这一点。任何帮助。
1590488622911.png

干杯。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
自发布以来,您尝试过什么,想到过什么?
 

SankaUD

会员
已加入
2018年5月17日
留言内容
7
编程经验
1-3
自发布以来,您尝试过什么,想到过什么?
除了极坐标图中的此绘图部分,我已经完成了大多数编码。我什至可以使用经过计算点的两个系列画两条线。但不确定这是否是最好的方法。我不是专业程序员。如果您愿意,我可以发布我的代码。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
那可能会有所帮助。首先,您是使用MSChart控件还是其他供应商提供的其他控件?关于可以在生成的图表上放置哪些装饰/标签,他们的文档怎么说?
 

SankaUD

会员
已加入
2018年5月17日
留言内容
7
编程经验
1-3
跟随功能将系列添加到图表。在一个班级里

C#:
public Series AddSeriesToChart(string _SName, Color _SColour, string _cp1, string _cp2)
        {
             清单 <double> _cp1List = new  清单 <double>();
             清单 <double> _GAL1 = GA.ToList();
            _cp1List = IDataTable.Rows.OfType<DataRow>().Select(dr => dr.Field<double>(_cp1)).ToList();


            for (int i = 0; i < _GAL1.Count; i++)
            {
                _GAL1[i] = _GAL1[i] * -1;
            }

             清单 <double> _cp2List = new  清单 <double>();
            _cp2List = IDataTable.Rows.OfType<DataRow>().Select(dr => dr.Field<double>(_cp2)).ToList();
            _cp2List.Reverse();

             清单 <double> _GAL2 = GAngles.ToList();
            _GAL2.Reverse();

            _cp1List.AddRange(_cp2List);
            _GAL1.AddRange(_GAL2);

            Series _series = new Series
            {
                BorderWidth = 2,
                Color = _SColour
            };

            for (int i = 0; i < _GAL1.Count; i++)
            {
                _series.Points.AddXY(_GAL1[i], _cp1List[i]);
            }

            return _series;

下面绘制图表和主要应用程序内部。

C#:
private void PlotPolarChart()
        {
            try
            {
                string[] AngleNames = { "0", "15", "30", "45", "60", "75", "90", "105", "120", "135", "150", "165", "180",
                "165", "150", "135", "120", "105", "90", "75", "60", "45", "30", "15" };

                int startOffset = 15;
                int endOffset = 15;

                Chart chrt = lvPolarPlot;
                chrt.Series.Clear();
                chrt.AntiAliasing = AntiAliasingStyles.All;
                chrt.TextAntiAliasingQuality = TextAntiAliasingQuality.High;

                ChartArea ca = chrt.ChartAreas[0];

                ca.Name = "Polar Plot";

                foreach (string AngleName in AngleNames)
                {
                    CustomLabel AngleLabel = new CustomLabel(startOffset, endOffset, AngleName, 0, LabelMarkStyle.None);
                    lvPolarPlot.ChartAreas[0].AxisX.CustomLabels.Add(AngleLabel);
                    startOffset += 15;
                    endOffset += 15;
                }

                ca.AxisY.LabelStyle.Angle = 0;
                ca.AxisX.Crossing = -180;

                Series _s1 = PViewer.AddSeriesToChart("a0a1", Color.Blue, "a0", "a1");               
                _s1.ChartArea = ca.Name;                           
                _s1.ChartType = SeriesChartType.Polar;
                lvPolarPlot.Series.Add(_s1);

                Series _s2 = PViewer.AddSeriesToChart("b9b2", Color.Red, "b9", "b2");
                _s2.ChartArea = ca.Name;
                _s2.ChartType = SeriesChartType.Polar;
                lvPolarPlot.Series.Add(_s2);

            }
            catch (Exception ex)
            {
                MessageBox.Show("An error occurred: " + ex.ToString(), "Error");
            }
 
最佳 底部