#include "matrix.h"
#if 0
// 初始化矩阵(将所有元素初始化为0)
void Matrix_Zero(Matrix mat)
{
int i, j;
for (i = 0; i < mat->row; i++)
{
for (j = 0; j < mat->column; j++)
{
mat->data[i][j] = 0;
}
}
}
void Matrix_Set(Matrix mat, int row, int col, REAL value)
{
if (row < mat->row && col < mat->column)
mat->data[row][col] = value;
}
// 创建矩阵
Matrix Matrix_CreateZero(int row, int col)
{
Matrix mat;
mat = (Matrix)malloc(sizeof(struct MNode)); // 分配结构体指针
if (row <= 0 || col <= 0)
{
// printf("ERROR, in creat_Matrix the row or col <= 0\n");
exit(1);
}
if (row > 0 && col > 0)
{
mat->row = row;
mat->column = col;
mat->data = (REAL **)malloc(row * sizeof(REAL *)); // 分配头指针
if (mat->data == NULL)
{
// printf("ERROR, in creat_Matrix the mat->data == NULL\n");
exit(1);
}
int i;
for (i = 0; i < row; i++)
{
*(mat->data + i) = (REAL *)malloc(col * sizeof(REAL)); // 分配每行的指针
if (mat->data[i] == NULL)
{
// printf("ERROR, in create_Matrix the mat->data[i] == NULL\n");
exit(1);
}
}
Matrix_Zero(mat);
}
return mat;
}
// 释放申请的矩阵空间
void Matrix_Free(Matrix mat)
{
for (int i = 0; i < mat->row; i++)
free(mat->data[i]); // 释放行指针
free(mat->data); // 释放头指针
free(mat); // 释放结构体指针
}
// 创建单位矩阵
Matrix Matrix_CreateEye(int n)
{
Matrix E;
int i, j;
if (n <= 0)
{
// printf("ERROR in Matrix_CreateEye\n");
exit(1);
}
E = Matrix_CreateZero(n, n);
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j)
E->data[i][j] = 1;
else
E->data[i][j] = 0;
}
}
return E;
}
// 打印矩阵
void Matrix_Show(Matrix mat)
{
int i, j;
// printf("%s\n", s);
for (i = 0; i < mat->row; i++)
{
for (j = 0; j < mat->column; j++)
{
// printf("%.6f\t", mat->data[i][j]);
qDebug() << mat->data[i][j];
}
// printf("\n");
qDebug() << "\n";
}
// printf("\n");
qDebug() << "\n";
}
// 给矩阵每个元素赋值
void Matrix_SetData(Matrix mat, REAL data[])
{
int i, j;
for (i = 0; i < mat->row; i++)
{
for (j = 0; j < mat->column; j++)
{
mat->data[i][j] = data[i * mat->column + j];
}
}
}
// 取出矩阵某行某列的元素
REAL Matrix_At(Matrix mat, int row, int col)
{
REAL rst;
rst = mat->data[row - 1][col - 1];
return rst;
}
// 矩阵第n行与第m行互换
void Matrix_Swap(Matrix mat, int n, int m)
{
REAL temp;
for (int i = 0; i < mat->column; i++)
{
temp = mat->data[n - 1][i];
mat->data[n - 1][i] = mat->data[m - 1][i];
mat->data[m - 1][i] = temp;
}
}
// 对一个矩阵进行复制
Matrix Matrix_Copy(Matrix mat)
{
Matrix copy_mat = Matrix_CreateZero(mat->row, mat->column);
for (int i = 0; i < mat->row; i++)
{
for (int j = 0; j < mat->column; j++)
copy_mat->data[i][j] = mat->data[i][j];
}
return copy_mat;
}
// 伴随矩阵
Matrix Matrix_Adjoint(Matrix mat)
{
// Matrix adj;
return mat;
}
// 矩阵加法
Matrix Matrix_Add(Matrix mat_1, Matrix mat_2)
{
Matrix rst_mat;
if (mat_1->column != mat_2->column)
{
// printf("ERROR in AddorSub, column !=\n");
exit(1);
}
if (mat_1->row != mat_2->row)
{
printf("ERROR in AddorSub, row !=\n");
exit(1);
}
int i, j;
rst_mat = Matrix_CreateZero(mat_1->row, mat_1->column);
for (i = 0; i < mat_1->row; i++)
{
for (j = 0; j < mat_1->column; j++)
rst_mat->data[i][j] = mat_1->data[i][j] + mat_2->data[i][j];
}
return rst_mat;
}
// 矩阵的减法
Matrix Matrix_Sub(Matrix mat_1, Matrix mat_2)
{
Matrix rst_mat;
if (mat_1->column != mat_2->column)
{
// printf("ERROR in AddorSub, column !=\n");
exit(1);
}
if (mat_1->row != mat_2->row)
{
printf("ERROR in AddorSub, row !=\n");
exit(1);
}
int i, j;
rst_mat = Matrix_CreateZero(mat_1->row, mat_1->column);
for (i = 0; i < mat_1->row; i++)
{
for (j = 0; j < mat_1->column; j++)
rst_mat->data[i][j] = mat_1->data[i][j] - mat_2->data[i][j];
}
return rst_mat;
}
// 矩阵转置
Matrix Matrix_Transpose(Matrix mat)
{
Matrix mat_;
int i, j;
mat_ = Matrix_CreateZero(mat->row, mat->column);
for (i = 0; i < mat->row; i++)
{
for (j = 0; j < mat->column; j++)
mat_->data[i][j] = mat->data[i][j];
}
return mat_;
}
// 矩阵乘法
Matrix Matrix_Mult(Matrix mat_1, Matrix mat_2)
{
Matrix rst_mat;
int i, j, m;
if (mat_1->column != mat_2->row)
{
// printf("ERROR in Matrix_Mult, column != row\n");
exit(1);
}
else
{
rst_mat = Matrix_CreateZero(mat_1->row, mat_2->column);
for (i = 0; i < mat_1->row; i++)
{
for (j = 0; j < mat_2->column; j++)
{
for (m = 0; m < mat_1->column; m++)
rst_mat->data[i][j] += mat_1->data[i][m] * mat_2->data[m][j];
}
}
}
return rst_mat;
}
// 矩阵乘法常数
Matrix Matrix_MultConst(Matrix mat, float ratio)
{
int i = 0, j = 0;
for (i = 0; i < mat->row; i++)
{
for (j = 0; j < mat->column; j++)
{
mat->data[i][j] *= ratio;
}
}
return mat;
}
// 矩阵求逆,利用矩阵LU分解求逆(直接三角分解)
Matrix Matrix_Inverse_LU(Matrix mat)
{
Matrix inv;
if (mat->column != mat->row)
{
// printf("ERROR in inverse, the row != the column\n");
exit(1);
}
if (Matrix_Det(mat) == 0)
{
// printf("The Matrix is not invertible\n");
exit(1);
}
// L矩阵和U矩阵
Matrix L, U;
int n = mat->column;
inv = Matrix_CreateZero(n, n);
L = Matrix_CreateZero(n, n);
U = Matrix_CreateZero(n, n);
// 计算U的第一行元素
for (int j = 0; j < n; j++)
U->data[0][j] = mat->data[0][j];
// 计算L的第一列元素
for (int i = 0; i < n; i++)
{
L->data[i][0] = mat->data[i][0] / U->data[0][0];
L->data[i][i] = 1.0;
}
REAL sum_u = 0, sum_l = 0;
// 分别计算U和L的第2到n行、列元素
for (int k = 1; k < n; k++)
{
// 求U,U矩阵从第2行迭代到第n行,且U矩阵先于L矩阵一个节拍
for (int j = k; j < n; j++)
{
sum_u = 0;
for (int m = 0; m <= k - 1; m++)
sum_u += L->data[k][m] * U->data[m][j];
U->data[k][j] = mat->data[k][j] - sum_u;
}
// 求L,L矩阵从第2列迭代到第n列
for (int i = k + 1; i < n; i++)
{
sum_l = 0;
for (int m = 0; m <= k - 1; m++)
sum_l += L->data[i][m] * U->data[m][k];
L->data[i][k] = (mat->data[i][k] - sum_l) / U->data[k][k];
}
}
// 分别求下三角矩阵L和上三角矩阵U的逆矩阵
Matrix L_, U_;
L_ = Matrix_CreateZero(n, n);
U_ = Matrix_CreateZero(n, n);
// 求矩阵U的逆
REAL sum_u_;
for (int i = 0; i < n; i++)
{
U_->data[i][i] = 1.0 / U->data[i][i]; // 对角线元素的值直接取倒数
for (int j = i - 1; j >= 0; j--)
{
sum_u_ = 0;
for (int k = j + 1; k <= i; k++)
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(源码+说明文档).rar
共69个文件
o:12个
cpp:7个
h:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 9 下载量 52 浏览量
2023-04-20
10:26:12
上传
评论 3
收藏 4.37MB RAR 举报
温馨提示
1、资源内容:基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(源码+说明文档).rar 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 3、更多仿真源码和数据集下载列表(自行寻找自己需要的):https://blog.csdn.net/m0_62143653?type=download 4、免责声明:本资源作为“参考资料”而不是“定制需求”不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(源码+说明文档).rar (69个子文件)
基于C++绘制NURBS曲线生成贝塞尔曲线和B样条曲线(源码+说明文档)
b_spline_example.png 39KB
b_spline
b_spline
matrix.h 2KB
mainwindow.h 6KB
mainwindow.cpp 90KB
main.cpp 172B
b_spline.pro.user 22KB
mainwindow.ui 5KB
b_spline_zh_CN.ts 103B
matrix.c 34KB
b_spline.pro 1KB
build-b_spline-Desktop_Qt_5_14_2_MinGW_32_bit-Debug
userswangjappdatalocaltemptmpuc3wdi 0B
userswangjappdatalocaltemptmpojwops 0B
userswangjappdatalocaltemptmposfslp 0B
userswangjappdatalocaltemptmpl_gup4 0B
userswangjappdatalocaltemptmpyzky7d 0B
userswangjappdatalocaltemptmpcp9vpw 0B
userswangjappdatalocaltemptmppqmyat 0B
Makefile 30KB
userswangjappdatalocaltemptmpnfselr 0B
userswangjappdatalocaltemptmpgj_rfi 0B
userswangjappdatalocaltemptmpijiloy 0B
debug
moc_mainwindow.cpp 4KB
xxwtracer.o 806KB
moc_qcustomplot.o 3MB
moc_mainwindow.o 544KB
mainwindow.o 874KB
axistag.o 829KB
XCustomPlot.o 869KB
moc_xxwtracer.o 780KB
moc_XCustomPlot.cpp 3KB
moc_axistag.cpp 3KB
moc_qcustomplot.cpp 275KB
main.o 607KB
b_spline.exe 1.89MB
matrix.o 19KB
moc_XCustomPlot.o 726KB
qcustomplot.o 6.22MB
moc_predefs.h 13KB
moc_axistag.o 785KB
moc_xxwtracer.cpp 3KB
userswangjappdatalocaltemptmpoawjvx 0B
object_script.b_spline.Debug 219B
userswangjappdatalocaltemptmpczezcy 0B
Makefile.Release 48KB
userswangjappdatalocaltemptmp4rt2fi 0B
userswangjappdatalocaltemptmpx6xyyk 0B
userswangjappdatalocaltemptmpe9ab7c 0B
ui_mainwindow.h 6KB
userswangjappdatalocaltemptmpwyxai0 0B
userswangjappdatalocaltemptmpx5pfrj 0B
userswangjappdatalocaltemptmpzwb8e5 0B
userswangjappdatalocaltemptmpjm64za 0B
Makefile.Debug 48KB
.qmake.stash 1KB
userswangjappdatalocaltemptmppauxco 0B
userswangjappdatalocaltemptmpgoo3o6 0B
object_script.b_spline.Release 241B
userswangjappdatalocaltemptmpkr_ofs 0B
userswangjappdatalocaltemptmpv5qhv0 0B
userswangjappdatalocaltemptmpstubmg 0B
userswangjappdatalocaltemptmpcg1qwc 0B
二阶贝塞尔曲线.gif 97KB
曲线包含关系.png 30KB
说明文档(曲线生成算法基础).md 17KB
一阶贝塞尔曲线.gif 113KB
deBoor递推求节点.png 70KB
三阶贝塞尔曲线.gif 211KB
B样条曲线类型.png 162KB
bspline-derv-fig.jpg 8KB
共 69 条
- 1
Matlab仿真实验室
- 粉丝: 2w+
- 资源: 2180
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Q1.py
- 企业政府灵智电子政务网站系统-lingzhi.rar
- Thinkphp内核开发Lsky Pro兰空图床网站源码.rar
- 基于FPGA(XC6SLX9)+SDRAM+AD7829多通道数据采集板硬件(原理图+PCB)工程文件.zip
- 阿里巴巴精准测试体系:基于代码链路分析的性能优化方案
- mmexport1714217773503.jpg
- 【图片网盘外链系统5.0】全新前端UI界面设计 支持图片违规检测网站自适应H5源码.rar
- jsp+sql的BBS论坛系统.zip
- 网盘外链PHP开发彩虹网盘外链程序源码.rar
- 2023年最新文件快递柜系统网站源码 保护用户隐私的匿名口令分享和临时文件分享功能.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页