C# 使用Boehm';s算法
我有一个B样条曲线,我正在尝试实现Boehm的算法,在不改变其形状的情况下将节点插入样条曲线。对于每两个现有节点,我必须添加三个新节点并删除现有节点 然而,我很难理解关于这个算法的论文,需要一些帮助来理解我做错了什么 这就是我想要实现的目标: 此链接中的B样条曲线正在评估中,当前两个结之间不断生成新结(橙色结),这两个结在评估时变为灰色 我读了很多文章,但其中的信息都归结为: 还有: 基本上,为了找到新结在两个现有结之间的位置,我必须首先计算基于t的比率(即评估百分比): 我首先不清楚的是u参数。据我所知,这是当前现有结的索引。然而,我不明白为什么将t-ui除以ui+p-ui添加ui然后减去ui的想法是什么?我确信我肯定错过了一些东西 然后使用这个比率(ai)找到新结的位置: 我的问题不在于数学——它是非常简单的数学,而在于执行本身。我在这方面读到的所有论文都非常不清楚(至少对我来说)方程中的值是如何获得的,以及它们是如何变化以找到每一个新创建的结的 我写了一个方法(C#),我试图从第一个链接的交互式图形中准确地找到这三个新的橙色结,这就是我得到的:C# 使用Boehm';s算法,c#,algorithm,spline,C#,Algorithm,Spline,我有一个B样条曲线,我正在尝试实现Boehm的算法,在不改变其形状的情况下将节点插入样条曲线。对于每两个现有节点,我必须添加三个新节点并删除现有节点 然而,我很难理解关于这个算法的论文,需要一些帮助来理解我做错了什么 这就是我想要实现的目标: 此链接中的B样条曲线正在评估中,当前两个结之间不断生成新结(橙色结),这两个结在评估时变为灰色 我读了很多文章,但其中的信息都归结为: 还有: 基本上,为了找到新结在两个现有结之间的位置,我必须首先计算基于t的比率(即评估百分比): 我首先不清楚的是u参
public Vector3[] InsertKnots(float percent)
{
//Percent [0-1]
float t = 1 + percent * (points.Length - 1); //multiply percent to map the point count
int ti = Mathf.FloorToInt(t); //this is the beginning index of the knot leg
int degree = points.Length - 2; //Degree of the spline
//Create the three new knots
Vector3[] knots = new Vector3[3];
for (int i = 0; i < 3; i++)
{
int ui = ti + i;
float ratio = (t - ui) / ((ui+degree)-ui); //finding ai
knots[i] = (1f - ratio) * points[ui - 1] + ratio * points[ui]; //Finding the new knot's position
}
return knots;
}
public Vector3[]插入节点(浮动百分比)
{
//百分比[0-1]
float t t=1+percent*(points.Length-1);//乘以percent以映射点计数
int ti=Mathf.FloorToInt(t);//这是结腿的开始索引
int degree=points.Length-2;//样条曲线的阶数
//创建三个新结
向量3[]节=新向量3[3];
对于(int i=0;i<3;i++)
{
intui=ti+i;
浮动比率=(t-ui)/((ui+度)-ui);//查找ai
结[i]=(1f-比率)*点[ui-1]+比率*点[ui];//查找新结的位置
}
返回结;
}
其中,points是Vector3[]数组(一个包含浮点x、y和z属性的类)
不幸的是,此方法的结果如下所示:
另一件我不明白的主要事情是,为了找到树上的橙色点,我必须做些什么。我是否必须运行for循环(就像我现在做的那样)
我找不到这个算法的任何代码示例,所以我现在几乎不知所措。我一点都不懂,但是
u(I+p)-ui
与ui+p-ui
@Corak-更准确地说,应该是u(I+p)-u(I)有根本的不同。这个问题可能更适合于解释algorithm@PaulF-对。其中一个例子(mtu.edu链接):如果i=5
和p=3
你应该有u(5+3)-u(5)
,也就是u(8)-u(5)
@PaulF啊是的,你是对的!(i+p)形成了指数——这解释了很多。这意味着我们正在查看节点跨度值。但问题是什么是结跨度值。你是对的,我应该把这个问题贴在数学上。我一点都不懂,但是u(I+p)-ui
与ui+p-ui
@Corak-更准确地说,应该是u(I+p)-u(I)有根本的不同。这个问题可能更适合于解释algorithm@PaulF-对。其中一个例子(mtu.edu链接):如果i=5
和p=3
你应该有u(5+3)-u(5)
,也就是u(8)-u(5)
@PaulF啊是的,你是对的!(i+p)形成了指数——这解释了很多。这意味着我们正在查看节点跨度值。但问题是什么是结跨度值。你是对的,我应该把这个问题贴在数学上。