【问题标题】:How to plot an ellipse with given rotation angle in C# WPF using Oxyplot?如何使用 Oxyplot 在 C# WPF 中绘制具有给定旋转角度的椭圆?
【发布时间】:2021-06-18 07:52:36
【问题描述】:
【问题讨论】:
标签:
c#
wpf
annotations
oxyplot
【解决方案1】:
根据共享的链接(在 Quest 中),这里最好和最简单的解决方案是使用 PolygonAnnotation 绘制一个椭圆,该椭圆采用坐标点列表,
假设你给出四个坐标点 A,B,C,D--- polygonAnnotation 会根据所取点的种类给我一个封闭的 4 边形~四边形结构。
现在,如果您将点数从 4 增加到 6 --- 它会给您六边形,依此类推。
现在在像素级别,您可以提供无限数量/离散数量的 360 度以上的点。
所以这里我们需要一个 2D 椭圆上的算法/点方程 - 给定以下输入(基于这种情况):-
-
椭圆中心 (h,k)
-
椭圆轴的旋转角度
-
主轴 (a)
-
短轴(b)
-
与 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 或其他任何东西,那么看看它们会很棒。