ITPub博客

首页 > 应用开发 > IT综合 > 今天编写的程序:实现NURBA曲面与曲线的求交1

今天编写的程序:实现NURBA曲面与曲线的求交1

原创 IT综合 作者:karlyang88 时间:2007-01-25 11:19:05 0 删除 编辑
NURBS曲面与平行于x轴或y轴求交的程序的一个简单算例1.[@more@]

今天修改完成的程序,终于可以成功的求出在NURBS曲面上某一垂直于x轴或者y轴的曲线。现在只能求出曲线上的点;下一步要求出其方程。不过现在可以修改论文了。看来放假前可以完成既定的任务了,过一个安心的春节。老杨加油,家勤则兴,人勤则健。

/**************************************************************************

* 文件名称:Test_Surface_Moreij.cpp

* 文件标志:

* 摘 要:在NURBS曲面上求与x=x0或y=y0的交线

*

* 当前版本:0.1

* 作 者:karlyang88

* 完成日期:2007年1月25日

*

**************************************************************************/

#include

#include

#include

#include // MFC core and standard components

#include // MFC extensions

#include // MFC Automation classes

#include

//#include

/**************************************************************************

*

* 全局变量

*

****************************************************************************/

int dim= 3;

int kl = 4;

int l = 3;

double v ;

double u;

CArray result;

CArray result2;

// double x = -3.0;

// double x = -24;

CArray t;

CArray r;

CArray p;

CArray, CArray &> d;

CArray, CArray &> d_VCompute;

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 &t, CArray &r)

{

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    35
  • 访问量
    336363