2012-07-17 4 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

해결하면 요 u는 스스로 프로그래밍하고 수학에 대한 지식을 가지고 있지만 매트릭스를 사용하여 쉽게 할 수 있습니다. 비트 정보에 대해서는 here을 읽으십시오. 당신은 세 가지 방정식을 해결 한 후에

, 당신은

X와 Y는 원의 중심점이 될 것입니다 X, Y, R.

이 있고, R한다 - 그것은 반경입니다.

지금까지 내가 기억하는 한, 위쪽으로 향한 양의 X 축에서 시작하는 호의 각도를 계산합니다. 따라서 중심에서 부동 소수점까지 뻗는 선과 중심점에서 "무한"오른쪽까지 뻗어있는 선 두 선 사이의 각도를 계산해야합니다. Google에서 "두 선 사이의 각도 계산"을 할 수 있습니다. 시작 지점과 끝 지점 모두에 대해이 과정을 반복하면 각각의 출입 각도가 부여됩니다.

중점은 실제로는 더 이상 사용되지 않지만 반경은 사용됩니다. 반경이되도록 설정하면 갈 수 있습니다.

나는 실제로 아무것도 구현하지 않았습니다. 단지 공정한 방향을 제시합니다. (그리고 나는 훨씬 깨끗하고 좋게 작동하는 솔루션이 있다고 내기)

+0

나는 이미 원의 중심을 얻을 수 있었지만 각도를 계산하는 것은 내가 잘못되었다는 것이었다. 하지만 지금은 효과가 있습니다. 고마워요! –