我正在尝试使用Helix 3D工具包创建用户定义的弧。用户在弧上选择3个点(开始,中间,结束),程序找到圆的中心并从头到尾绘制弧。我的问题是我不擅长数学,而且我在做这项工作时遇到了问题。我的主要问题是获得起始角和终止角,并准确地绘制所有尺寸的弧。任何帮助表示赞赏。这是我的代码:
private void Draw_Arc(object sender, MouseButtonEventArgs e)
{
linept = new List<Point3D>();
linept.Add(startPoint);
linept.Add(endPoint);
linept.Add((Point3D)GetPoints(e));
LinesVisual3D line = new LinesVisual3D();
line.Thickness = 2;
line.Color = Colors.Blue;
line.Points = linept;
port.Children.Add(line);
double startAngle, sweepAngle;
Point3D center = GetCenterOfArc(linept.ElementAt(0), linept.ElementAt(1), linept.ElementAt(2));
GetAngles(linept.ElementAt(0), linept.ElementAt(1), linept.ElementAt(2), out startAngle, out sweepAngle);
circle = new PieSliceVisual3D();
double RadiusX = Math.Abs(startPoint.X - center.X);
double RadiusY = Math.Abs(startPoint.Y - center.Y);
circle.Center = center;
if (RadiusX >= RadiusY)
circle.OuterRadius = RadiusX;
else
circle.OuterRadius = RadiusY;
circle.InnerRadius = circle.OuterRadius + 3;
circle.StartAngle = (180 / Math.PI * Math.Atan2(startPoint.Y - circle.Center.Y, startPoint.X - circle.Center.X));
circle.EndAngle = (180 / Math.PI * Math.Atan2(linept.ElementAt(2).Y - circle.Center.Y, linept.ElementAt(2).X - circle.Center.X));
port.Children.Add(circle);
}
答案 0 :(得分:2)
我认为您必须知道圆的中心才能知道圆弧的起始和终止角度。
假设你只有三个点,并且想要找到一个遍历所有三个点的圆,你基本上有三个带有三个变量的方程:
(x-x0)^ 2 +(y-y0)^ 2 = R ^ 2
(x-x1)^ 2 +(y-y1)^ 2 = R ^ 2
(x-x2)^ 2 +(y-y2)^ 2 = R ^ 2
如果您尝试自己编程并且掌握数学方面的平均知识,那么解决这个问题可能会有点棘手,但您可以使用矩阵相当容易地完成。请阅读here以获取位信息。
在你解决了这三个方程后,你应该有X,Y,R。
X和Y将是圆的中心点,R - 它是半径。
现在,据我记忆,它们从正X轴开始向上计算弧度。因此,您需要计算两条线之间的角度 - 从中心到浮点之间延伸的线,以及从中心点延伸到“无限”右侧的线。你可能只是谷歌“计算两行之间的角度”。对你的起点和终点重复这个过程,将给出各自的进入/退出角度。
中间点不再使用了,但是半径是。你只需将它设置为半径就可以了。
我没有真正实施任何东西 - 只是给你一个公平的方向。 (我敢打赌,有一个更清洁,更好用的解决方案)