.net 如何使用XAML创建简单的二维NURBS?

.net 如何使用XAML创建简单的二维NURBS?,.net,wpf,xaml,.net-3.5,bezier,.net,Wpf,Xaml,.net 3.5,Bezier,我需要创建具有两个端点和“n”个控制点的样条线。 据我所知,贝塞尔曲线只允许一个控制点,贝塞尔样条曲线允许两个控制点。但是,我需要能够添加尽可能多的控制点,而不限于一个或两个 下面是我想要实现的一个示例,有4个控制点: (来源:) 到目前为止,我只能像这样将一系列Bezier片段组合在一起: 不是开箱即用的,但看看这个问题,它将告诉您如何使用c#绘制NURBS,然后您可以将代码转换成一些东西,然后在WPF下实现使用它 尽管在标题中提到了NURBS,但您似乎在寻找一种方法来绘制一系列在连接点

我需要创建具有两个端点和“n”个控制点的样条线。
据我所知,贝塞尔曲线只允许一个控制点,贝塞尔样条曲线允许两个控制点。但是,我需要能够添加尽可能多的控制点,而不限于一个或两个

下面是我想要实现的一个示例,有4个控制点:
(来源:)

到目前为止,我只能像这样将一系列Bezier片段组合在一起:



不是开箱即用的,但看看这个问题,它将告诉您如何使用c#绘制NURBS,然后您可以将代码转换成一些东西,然后在WPF下实现使用它

尽管在标题中提到了NURBS,但您似乎在寻找一种方法来绘制一系列在连接点处平滑的贝塞尔样条曲线线段

要实现这一点,您需要在第二段上设置点1,这样它将相对于段之间的连接点镜像第一段上的点2(即第一段上的点3)

在您的例子中,连接点是(3,3),第一段上的点2是(2,1),因此您需要在第二段(4,5)上创建点1,而不是代码中的(4,3)

将第三段上的相似性更改点1更改为(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)成为控制点,请添加更多线段。只要记住,如果您想要与上一段平滑连接,您不需要决定点1是什么

注:

  • 此解决方案将在连接点处为您提供1级平滑度。如果您还需要第二级平滑度(C2),可以通过适当设置第2点来实现。如果取上一段的点1并将其相对于上一段的点2镜像,然后相对于当前段的点1镜像结果,则将获得当前段所需的点2。然后你只需选择你想要的任何一点,你就完成了。请参阅以了解更多关于此的信息

  • 您从wikipedia提供的exmaple是NURBS。NURBS类似于贝塞尔样条曲线,但它会为点添加权重。从文档中可以看出,BezierSegment不支持这一点


  • 这看起来非常有用。谢谢
     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"