资源简介
之前实现了不通过控制点生成Bezier曲线..
本次实现了通过控制点生成曲线..(C/C++版本)..
代码片段和文件信息
#include “func.h“
int recursive_mkdir(char* dir) {
//分解路径名E:\\AA\\BB\\CC\\
std::string str = dir;
std::string::size_type index = 0; // int
int i = 0;
while (1)
{
std::string::size_type pos = str.find(“\\“ index);
std::string str1;
str1 = str.substr(0 pos);
if (pos != -1 && i > 0)
{
if (_access(str1.c_str() 0) == -1)
{
_mkdir(str1.c_str());
}
}
if (pos == -1)
{
break;
}
i++;
index = pos + 1;
}
return 0;
}
bool getMptsNormal(double* _mx double* _my std::vector &_m_n) {
// 模型控制点斜率
std::vector m_c_k;
for (int i = 0; i < CtrlPtsNum; i++) {
if (i == 0 || i == (CtrlPtsNum - 1)) {
double test = (_my[i + 1] - _my[i]) / (_mx[i + 1] - _mx[i]);
// std::cout << test << std::endl;;
m_c_k.push_back(test);
}
else if (i < CtrlPtsNum - 1) {
double test = ((_my[i] - _my[i - 1]) / (_mx[i] - _mx[i - 1])) + ((_my[i + 1] - _my[i]) / (_mx[i + 1] - _mx[i]));
// std::cout << test / 2 << std::endl;
m_c_k.push_back(test / 2);
}
}
for (std::vector ::iterator it = m_c_k.begin(); it != m_c_k.end(); it++) {
_m_n.push_back(1 / *it * (-1));
}
return true;
}
void getThePts(double* _mx double* _my std::vector &_m_n double * _p_outX double * _p_outY std::vector &_line_pts) {
// 模型控制点斜率
double line_k = 0.0;
double angle = 0.0;
PT tempPT;
for (int i = 0; i < CtrlPtsNum; i++) {
double min_angle = 10.0;
for (int j = 0; j < LINEPTSNUM; j++) {
if (i == 0) {
tempPT.x = _p_outX[j];
tempPT.y = _p_outY[j];
break;
}
else if (i == (CtrlPtsNum - 1)) {
tempPT.x = _p_outX[LINEPTSNUM - 1];
tempPT.y = _p_outY[LINEPTSNUM - 1];
break;
}
else {
line_k = (_p_outY[j] - _my[i]) / (_p_outX[j] - _mx[i]);
if (line_k == _m_n[i]) {
tempPT.x = _p_outX[j];
tempPT.y = _p_outY[j];
break;
}
else if ((line_k * _m_n[i]) == -1) {
continue;
}
angle = atan((line_k - _m_n[i]) / (1 + line_k * _m_n[i])) * PI / 180; // 转化为弧度
if (angle <= 0) {
// std::cout << “ <0 “ << std::endl;
angle = angle * (-1);
}
if (angle <= min_angle) {
min_angle = angle;
tempPT.x = _p_outX[j];
tempPT.y = _p_outY[j];
}
}
}
_line_pts.push_back(tempPT);
}
for (std::vector ::iterator it = _line_pts.begin(); it != _line_pts.end(); it++) {
std::cout << it->x << ““ << it->y << std::endl;
}
}
bool SavePTs(std::string &_path double* _p_outX double * _p_outY std::vector &_line_pts) {
std::ofstream writeinfile(_path std::ofstream::out);
if (!writeinfile.is_open()) {
std::cout << “ ofstream writeinfile is falseD ~ “ << std::endl;
system(“pause“);
return false;
}
for (int i = 0; i < LINEPTSNUM; i++) {
// std::cout << “i = “ << i << “ : “;
// std::cout << p_outX[i] << ““ << p_outY[i] << std::endl;
writ
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 46592 2017-10-30 11:39 Spline_class\.vs\Spline_class\v14\.suo
文件 105984 2017-08-10 15:44 Spline_class\Debug\Spline_class.exe
文件 607036 2017-08-10 15:44 Spline_class\Debug\Spline_class.ilk
文件 978944 2017-08-10 15:44 Spline_class\Debug\Spline_class.pdb
文件 245418 2017-08-10 15:44 Spline_class\Spline_class\Debug\main.obj
文件 42628 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline.obj
文件 256 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.log
文件 1422 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\CL.command.1.tlog
文件 31034 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\CL.read.1.tlog
文件 1498 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\CL.write.1.tlog
文件 3280 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\li
文件 11096 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\li
文件 736 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\li
文件 213 2017-08-10 15:44 Spline_class\Spline_class\Debug\Spline_class.tlog\Spline_class.lastbuildstate
文件 445440 2017-08-10 15:44 Spline_class\Spline_class\Debug\vc140.idb
文件 364544 2017-08-10 15:44 Spline_class\Spline_class\Debug\vc140.pdb
文件 3581 2017-10-30 11:25 Spline_class\Spline_class\func.cpp
文件 814 2017-10-30 11:19 Spline_class\Spline_class\func.h
文件 1273 2017-10-30 11:39 Spline_class\Spline_class\main.cpp
文件 38457 2017-10-30 11:34 Spline_class\Spline_class\result\PTs.txt
文件 4878 2017-10-30 11:34 Spline_class\Spline_class\Spline.cpp
文件 2687 2017-08-10 15:57 Spline_class\Spline_class\Spline.h
文件 7433 2017-10-30 11:19 Spline_class\Spline_class\Spline_class.vcxproj
文件 1351 2017-10-30 11:19 Spline_class\Spline_class\Spline_class.vcxproj.filters
文件 1519 2017-10-30 11:39 Spline_class\Spline_class\x64\Debug\Spline_class.Build.CppClean.log
文件 3 2017-10-30 11:39 Spline_class\Spline_class\x64\Debug\Spline_class.log
文件 1318 2017-08-10 10:29 Spline_class\Spline_class.sln
文件 8855552 2017-10-30 11:39 Spline_class\Spline_class.VC.db
目录 0 2017-10-30 11:39 Spline_class\Spline_class\x64\Debug\Spline_class.tlog
目录 0 2017-10-30 11:39 Spline_class\.vs\Spline_class\v14
............此处省略15个文件信息
相关资源
- 利用MFC绘制B样条曲线
- Coons曲面与hermite、bezier、B样条曲线标
- 图形学各种曲线--Bezier曲线,B-样条曲
- b样条曲线C++实现
- Bezier曲线曲面算法实现代码
- MFC绘制Bezier,B样条,NURBS曲线曲面以
- B样条曲线生成算法,用VC++加OpenGL写的
- B样条曲线的绘制
- 三次样条源码
- Hermite,Bezier,三次B样条曲线的MFC实现
- 计算机图形学(MFC)-Bezier曲面
- B样条曲线绘制、bezier曲线绘制c语言实
- 抛物样条曲线 鼠标操作
- 编写 1 个程序绘制这些控制点生成的
- Bezier曲线算法
- 基于qt5.8写的一个贝塞尔曲线非转存
- opengl动态显示贝塞尔曲线
- 通过多个三维控制点 实现生成Bezier样
- 三次B样条曲线算法 计算机图形学 案
- 曲线绘制Bezier、三次B样条、Hermite
- MFC下Bezier曲线的绘制
- Bezier曲线MFC实现源代码
- BezierCurve 贝塞尔曲线计算 c++源码
- 七控制点B样条曲线
- de Casteljau算法绘制Bezier曲线
- opengl实现双三次Bezier曲面
- c++ 三次样条曲线拟合
- 四次Bezier曲线动态生成 VC++代码实现
- Bezier曲线,三次B样条曲线
- VC写的B样条曲线拟合程序
评论
共有 条评论