2017-12-11 3 views
0

안녕하세요. 존재하는 파란색 곡선 경로를 기반으로 빨간색 곡선 경로를 그립니다. Refer this diagram 그리고 코드에서 베 지어를 사용하여 빨간색 경로를 만들려고합니다. 아래는 제 코드입니다.경로를 기반으로 베 지어 커브 경로를 그리는 방법은 몇 점을 그렸습니까?

내 포인트를 정의하고 전달합니다.

newFinal.Insert(0, nodeBegin); //add in starting node at beginning drawing purpose 
     Point[] AToB = new[] { new Point(48, 242), new Point(-35, 250), new Point(48, 350) }; 
     Point[] AToE = new[] { new Point(48, 242), new Point(150, 240), new Point(135, 245) }; 
     Point[] BToG = new[] { new Point(48, 350), new Point(150, 240), new Point(135, 340) }; 
     Point[] BToA = new[] { new Point(48, 350), new Point(-35, 250), new Point(48, 242) }; 
     Point[] EToA = new[] { new Point(135, 245), new Point(150, 240), new Point(48, 242) }; 
     Point[] GToB = new[] { new Point(135, 340), new Point(105, 370), new Point(48, 350) }; 

    for (i = 0; i < newFinal.Count - 1; i++) 
     { 
      switch (newFinal[i]) 
      { 
       case 'a': 
        if (newFinal[i + 1] == 'b') 
         drawBezier(AToB[0], AToB[1],AToB[2]); 
        else if (newFinal[i + 1] == 'e') 
         drawBezier(AToE[0], AToE[1], AToE[2]); 
        break; 


       case 'b': 
        if (newFinal[i + 1] == 'a') 
         drawBezier(BToA[0], BToA[1], BToA[2]); 
        else if (newFinal[i + 1] == 'g') 
         drawBezier(BToG[0], BToG[1], BToG[2]); 
        break; 

       case 'e': 
        if (newFinal[i + 1] == 'a') 
         drawBezier(EToA[0], EToA[1], EToA[2]); 
        break; 

       case 'g': 
        if (newFinal[i + 1] == 'b') 
         drawBezier(GToB[0], GToB[1], GToB[2]); 
         break; 
       } 
      } 

이 내가 내 지점을 통과 곳이다 :

private void drawBezier(Point point1, Point point2, Point point3) //This is the class to draw the blue curve path 
    { 

     BezierSegment bezier = new BezierSegment() 
     { 
      Point1 = point1, 
      Point2 = point2, 
      Point3 = point3, 
      IsStroked = true 
     }; 

     PathFigure figure = new PathFigure(); 
     figure.Segments.Add(bezier); 

     Path path = new Path(); 
     path.Stroke = Brushes.Red; 
     path.Data = new PathGeometry(new PathFigure[] { figure }); 

     MyCanvas.Children.Add(path); 


     Storyboard sb = new Storyboard(); 
     PointAnimation pointAnim = new PointAnimation(); 
     pointAnim.From = bezier.Point1; 
     pointAnim.To = bezier.Point3; 
     Storyboard.SetTarget(pointAnim,path); 
     Storyboard.SetTargetProperty(pointAnim,new PropertyPath("Data.Figures[2].Segments[2].Point3")); 
    } 

그러나 이상한 곡선에 그려진 빨간색 경로. 예를 들어, a를 b로 그릴 때, this happened 또 다른 예는 b를 b에 그려야합니다. this happened 첫 번째 점에서 곡선을 그릴 수없는 것과 같습니다. 누구든지 나를 도울 수 있습니까?

답변

0

사실 BezierSegment 객체는 3 차원 베 지어 곡선이므로 4 점이 완전히 정의되어야합니다. BezierSegment의 Point1, Point2 및 Point3 속성은 첫 번째 제어점, 두 번째 제어점 및 종점을위한 것입니다. 3 차 베 지어 곡선의 시작점은 경로 객체의 "현재 지점"입니다. 따라서 큐브 베 지어 곡선을 시작할 위치로 PathFigure의 StartPoint 속성을 설정해야합니다.

관련 문제