【问题标题】:How to plot an ellipse with given rotation angle in C# WPF using Oxyplot?如何使用 Oxyplot 在 C# WPF 中绘制具有给定旋转角度的椭圆?
【发布时间】:2021-06-18 07:52:36
【问题描述】:

OxyPlot 是.NET 的跨平台绘图库,制作绘图非常方便,

现在这里有一种情况,我必须在 XY 散点图上画一个 95% 置信椭圆。

Oxyplot 提供以下注释:-

Given here Ellipse Annotation(OxyPlot.Annotations) 仅提供以下属性以添加椭圆-

我们这里没有任何旋转属性或方法,IRender 提供了几个绘制方法来覆盖,但没有一个方法有双角度旋转参数左右。 documentation 都没有提供任何直接的解决方案:-

那么怎么画这个:-

*我的一项任务遇到了这个问题,并在通过以下论坛讨论以获取有关如何生成这样一个椭圆的提示后想出了一个解决方案。

  1. https://github.com/oxyplot/oxyplot/issues/268
  2. https://oxyplot.userecho.com/en/communities/1/topics/598-ellipse-annotation-rotation

如果其他人有,请添加更多解决方案:-

【问题讨论】:

    标签: c# wpf annotations oxyplot


    【解决方案1】:

    根据共享的链接(在 Quest 中),这里最好和最简单的解决方案是使用 PolygonAnnotation 绘制一个椭圆,该椭圆采用坐标点列表,

    假设你给出四个坐标点 A,B,C,D--- polygonAnnotation 会根据所取点的种类给我一个封闭的 4 边形~四边形结构。 现在,如果您将点数从 4 增加到 6 --- 它会给您六边形,依此类推。

    现在在像素级别,您可以提供无限数量/离散数量的 360 度以上的点。

    所以这里我们需要一个 2D 椭圆上的算法/点方程 - 给定以下输入(基于这种情况):-

    1. 椭圆中心 (h,k)

    2. 椭圆轴的旋转角度

    3. 主轴 (a)

    4. 短轴(b)

    5. 与 x 轴的θ角

       private void GeneratePolygonAsEllipse(PolygonAnnotation polygonAnnotation)
      
       {
           double step = 2 * Math.PI / 200;
           var h = xCenter;
           var k = yCenter;
           var rotation = AngleOfRotation;
           var a = MajorAxisLength;
           var b = MinorAxisLength;
      
           for (double theta = 0; theta < 2 * Math.PI; theta += step)
           {
               var x = a * Math.Cos(rotation) * Math.Cos(theta) + b * Math.Sin(rotation) * Math.Sin(theta) + h;
               var y = b * Math.Cos(rotation) * Math.Sin(theta) + a * Math.Sin(rotation) * Math.Cos(theta) + k;
      
               polygonAnnotation.Points.Add(new DataPoint(x, y));
           }
       }
      

    我希望上面规定的示例方法方程对像我这样寻找解决方案的其他人有用。我在其他任何地方都找不到直接的解决方案,所以我在这里添加了我的解决方案,可以作为参考。

    结果:-

    如果有人能想出其他解决方案,例如如何使用 IRender 或其他任何东西,那么看看它们会很棒。

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2015-12-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多