2012-07-17 63 views
0

我想用Helix 3D工具包制作一个用户定义的弧。用户在圆弧上选择3个点(开始,中间,结束),程序找到圆的中心并从头到尾绘制圆弧。我的问题是我不擅长数学,我在做这项工作时遇到问题。我的主要问题是获得起始角度和结束角度,并准确绘制所有尺寸的弧线。任何帮助表示赞赏。这里是我的代码:绘制3D弧给出的开始,中间和终点

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); 
    } 

回答

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轴开始向上的弧度。因此,您需要计算两条线之间的角度 - 从中​​心到浮点之间的线条,以及从中心点延伸到“无限”右侧的线条。你可能只是谷歌“计算两条线之间的角度”。对于你的出发点和结束点重复这个过程,将给出它们各自的进入/退出角度。

中间点不再被真正使用,但半径是。你只需将它设置为半径,你就可以走了。

我没有真正实现任何东西 - 只是给你一个公平的方向。 (我敢打赌,有一个更清洁,更好的工作与解决方案)

+0

我已经可以得到圆的中心,但计算角度是我的错误。但它现在起作用了。非常感谢! – 2012-07-17 17:35:57