首页 > 应用开发 > IT综合 > 今天编写的程序:实现NURBA曲面与曲线的求交1
今天修改完成的程序,终于可以成功的求出在NURBS曲面上某一垂直于x轴或者y轴的曲线。现在只能求出曲线上的点;下一步要求出其方程。不过现在可以修改论文了。看来放假前可以完成既定的任务了,过一个安心的春节。老杨加油,家勤则兴,人勤则健。
/**************************************************************************
* 文件名称:Test_Surface_Moreij.cpp
* 文件标志:
* 摘 要:在NURBS曲面上求与x=x0或y=y0的交线
*
* 当前版本:0.1
* 作 者:karlyang88
* 完成日期:2007年1月25日
*
**************************************************************************/
#include
#include
#include
#include
#include
#include
#include
//#include
/**************************************************************************
*
* 全局变量
*
****************************************************************************/
int dim= 3;
int kl = 4;
int l = 3;
double v ;
double u;
CArray
CArray
// double x = -3.0;
// double x = -24;
CArray
CArray
CArray
CArray
CArray
float ctlpoints2[4][4][3]=
{
{{-3,-3, -3}, {-3, -1, -3}, {-3, 1, -3}, {-3, 3, -3}},
{{-1, -3, -3}, {-1, -1, 3.0}, {-1, 1, 3.0}, {-1, 3, -3}},
{{1, -3, -3}, {1, -1, 3.0}, {1, 1, 3.0}, {1, 3, -3}},
{{3, -3, -3}, {3, -1, -3}, {3, 1, -3}, {3, 3, -3}}
};
float ctlpoints[5][5][3]=
{
{{-3,-3, -3}, {-3, -2, -3}, {-3, 0, -3}, {-3, 2, -3}, {-3, 3, -3}},
{{-2, -3, -3}, {-2, -2, -1.5}, {-2, 0, 0}, {-2, 2, -1.5}, {-2, 3, -3}},
{{0, -3, -3}, {0, -2, 0}, {0, 0, 3}, {0, 2, 0}, {0, 3, -3}},
{{2, -3, -3}, {2,-2,-1.5}, {2,0,0}, {2,2,-1.5}, {2, 3, -3}},
{{3, -3, -3}, {3, -2, -3}, {3, 0, -3}, {3, 2, -3}, {3, 3, -3}}
};
/****************************************************************************
* 功能:给定节点矢量中一个节点的下标值, 求得该节点的节点值
* 输入参数:l表示相异节点个数;j表示所求的接点下标值;t[l]
* 表示相异节点数组;r[l]表示重复度数组。
* 输出参数:所求节点的节点值。
* 调用此函数的主函数中两个数组t,r都要设置大小 t.SetSize(l), r.SetSize(l)
*
*********************************************************************************/
double Knot_Value(int l, int j, CArray
{
double u;
int index = 0;
for(int i = 0; i < l; i++)
{
index = index +r[i];
if((index-1) >= j)
{
u = t[i];
// cout<<"U"<
break;
}
}
return u;
}
/*****************************************************************************
* 功能:找到u所在的区间下标
* 输入参数:节点矢量上一点u
*
* 输出参数:i-1-k,其中i为u所在所在区间的左端点的下标,可以做为德布儿算法
* 的输入参数
*
*
*
*
*********************************************************************************/
int find_i(double const& u)
{
int f_i=0;
int index = 0;
for(int i = 0; i < (l-1); i++)
{
if((u>=t[i])&&(u<=t[i+1]))
index = i;
else continue;
}
for(int j = 0; j <= index; j++)
f_i +=r[j];
return f_i-1-3; //从0开始
}
/*****************************************************************************
* 功能:找到V所在的区间
* 输入参数:节点矢量上的一点v
*
* 输出参数:i-1-k;i为u所在区间左端点的下标
*
*********************************************************************************/
int find_j(double const& v)
{
int f_i=0;
int index = 0;
for(int i = 0; i < (l-1); i++)
{
if((v>=t[i])&&(v<=t[i+1]))
index = i;
else continue;
}
for(int j = 0; j <= index; j++)
f_i +=r[j];
return f_i-1-3; //从0开始
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/409557/viewspace-893497/ ,如需转载,请注明出处,否则将追究法律责任。