2009-09-21 6 views
3

2 개의 끝점과 'n'개의 조절 점으로 스플라인을 작성해야합니다.
제가 알고있는 한, 베 지어 곡선은 하나의 제어점 만 허용하고 베 지어 스플라인은 두 개의 제어점을 허용합니다. 그러나, 나는 하나 또는 둘로 제한되지 않고 적합하다고 생각되는만큼 많은 제어점을 추가 할 수 있어야합니다.
(출처 : Wikipedia article on NURBS) I는 다음과 같이 함께 BezierSegments의 시리즈를 결합 할 수있었습니다 지금까지

다음 XAML을 사용하여 간단한 2D NURBS를 만들려면 어떻게해야합니까?

4 제어 포인트, 내가 무엇을 달성하고자하는의 예입니다 :
http://img297.imageshack.us/img297/3706/bezierpath.png

<Polyline Stroke="Green" Stretch="Uniform" 
      Points="0,0 1,2 2,1 3,3 4,3 5,2 6,3 7,2 8,1.75 9,2.5" /> 

<Path Stroke="Red" Stretch="Uniform"> 
    <Path.Data> 
    <PathGeometry> 
     <PathGeometry.Figures> 
     <PathFigureCollection> 
      <PathFigure StartPoint="0,0"> 
      <PathFigure.Segments> 
       <PathSegmentCollection> 
       <BezierSegment Point1="1,2" Point2="2,1" Point3="3,3" /> 
       <BezierSegment Point1="4,3" Point2="5,2" Point3="6,3" /> 
       <BezierSegment Point1="7,2" Point2="8,1.75" Point3="9,2.5" /> 
       </PathSegmentCollection> 
      </PathFigure.Segments> 
      </PathFigure> 
     </PathFigureCollection> 
     </PathGeometry.Figures> 
    </PathGeometry> 
    </Path.Data> 
</Path> 

답변

2

하지 상자 밖으로하지만 C#을 사용 NURBS를 그리는 방법에 당신을 가리 킵니다 this previous 질문을 살펴, 당신은 무언가에 코드를 설정할 수 있습니다 PathSegment을 구현하여 WPF에서 사용했습니다.

+0

매우 유용한 것처럼 보입니다. 감사! – Giffyguy

1

제목에서 NURBS에 대해 언급하지만 연결 지점에서 부드러운 Bezier 스플라인 세그먼트를 그리는 방법을 찾고있는 것처럼 보입니다.

이 작업을 수행하려면 세그먼트 사이의 연결 지점 (첫 번째 세그먼트의 point3)을 기준으로 첫 번째 세그먼트에서 point2를 미러링 할 수 있도록 두 번째 세그먼트에서 point1을 설정해야합니다.

첫 번째 세그먼트의 연결 지점은 (3,3)이고 point2는 (2,1)이므로 (4,3) 대신 두 번째 세그먼트 (4,5)에 point1을 만들어야합니다. 귀하의 코드입니다.

유사성 변화에 3 세그먼트 POINT1 (7,4) 그래서 거울 (5,2) 상대 (6,3)에 당신은 당신의 문제를 해결할 수있는 다음 세그먼트로 끝날 :

BezierSegment Point1="1,2" Point2="2,1" Point3="3,3" 

BezierSegment Point1="4,5" Point2="5,2" Point3="6,3" 

BezierSegment Point1="7,4" Point2="8,1.75" Point3="9,2.5" 

제어점 변경을 원하지 않고 (4,3) 및 (7,2)를 제어점으로 만들고 싶다면 세그먼트를 더 추가하십시오. 이전 세그먼트와의 원활한 연결을 원하면 point1이 무엇인지 결정할 필요가 없다는 것을 기억하십시오.

참고 :

  1. 이 솔루션은 연결 지점에서 당신에게 smothness의 1 정도를 제공 할 것입니다. 두 번째 정도의 스 밀도 (C2)를 원한다면 point2를 적절하게 설정하여이를 달성 할 수 있습니다. 이전 세그먼트의 point1을 가져 와서 이전 세그먼트의 point2를 기준으로 미러링 한 다음 현재 세그먼트의 point1을 기준으로 결과를 미러링하면 현재 세그먼트의 원하는 point2가 생성됩니다. 그런 다음 원하는 포인트 3을 선택하기 만하면됩니다. 이에 대한 자세한 내용은 http://ibiblio.org/e-notes/Splines/B-spline.htm을 참조하십시오.

  2. 위키 피 디아에서 제공 한 예제는 NURBS입니다. NURBS는 베 지어 스플라인과 같지만 점에 가중치를 추가합니다. BezierSegment가 지원하지 않는 문서에서 알 수 있습니다.

관련 문제