资源简介
此代码基于MFC编程,在VS2013上可以实现读取OBJ文件和显示,并绘制了3D模型的法向量,注释也清晰易懂,便于初学者学习!
代码片段和文件信息
// Bsp.cpp: implementation of the CBsp class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “BSpline.h“
#include “Bsp.h“
#include
////////////////////////////////////////////Matrix
#include “Matrix.h“
#include “DecomposeDoc.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBsp::CBsp()
{
m_n = 0;
m_Poly = new CPoint[N];
m_PolyRev =new CPoint[N];
m_u = new double[N];
}
CBsp::~CBsp()
{
delete[] m_Poly;
delete[] m_u;
delete[] m_PolyRev;
}
void CBsp::SetControl(CPoint *Poly int n)
{
for (int i=0;i<=n-1;i++)
{
m_Poly[i] = Poly[i];
}
m_n = n;
}
void CBsp::Draw(CDC *PDC)
{
CDC* pDC=PDC;
CPen mypen;
mypen.CreatePen(PS_SOLID0RGB(25500));
pDC->Selectobject(mypen);
double xytdt;
for (int j=4;j<=m_n;j++)
{
dt=(m_u[j+1]-m_u[j])/50;
t=m_u[j];
while (t<=m_u[j+1]||(t-m_u[j+1]) {
x=0;
y=0;
if ((t-m_u[j+1])m_u[j+1])
t=m_u[j+1];
for (int i=j-3;i<=j;i++)
{
x+=baseFunc(i4t)*m_Poly[i-1].x;
y+=baseFunc(i4t)*m_Poly[i-1].y;
}
if(abs(t-m_u[4])<0.0001) {pDC->MoveTo(xy);}
pDC->LineTo(xy);
t+=dt;
}
}
mypen.Deleteobject();
}
void CBsp::DrawControl(CDC *PDC)
{
CDC* pDC=PDC;
CPen mypen;
mypen.CreatePen(PS_DOT0RGB(02550));
pDC->Selectobject(mypen);
pDC->Polyline(m_Polym_n);
}
void CBsp::SetKnot()
{
double x[N];
double y[N];
for (int i=0;i<=m_n-2;i++)
{
x[i]=(m_Poly[i+1].x-m_Poly[i].x)*(m_Poly[i+1].x-m_Poly[i].x);
y[i]=(m_Poly[i+1].y-m_Poly[i].y)*(m_Poly[i+1].y-m_Poly[i].y);
}
m_u[4]=sqrt(x[1]+y[1]);
for (int i=5;i {
m_u[i]=m_u[i-1]+sqrt(x[i-3]+y[i-3]);
}
m_u[1]=m_u[4];
m_u[2]=m_u[4];
m_u[3]=m_u[4];
m_u[m_n+2]=m_u[m_n+1];
m_u[m_n+3]=m_u[m_n+1];
m_u[m_n+4]=m_u[m_n+1];
}
double CBsp::baseFunc(int i int k double u)
{
if (k==1)
{
if ((u>=m_u[i])&&(u return 1;
else
return 0;
}
if (k==4)
if (i==m_n&&u==m_u[m_n+1])
return 1;
return divide((u-m_u[i])(m_u[i+k-1]-m_u[i]))*baseFunc(ik-1u)+
divide((m_u[i+k]-u)(m_u[i+k]-m_u[i+1]))*baseFunc(i+1k-1u);
}
double CBsp::divide(double x double y)
{
if (y==0)
return 0;
else
return x/y;
}
void CBsp::GetKnot(CPoint* polyint ndouble* _u)//用数据点得到节点向量
{
double x[N];
double y[N];
for (int i=0;i<=n-2;i++)
{
x[i]=(poly[i+1].x-poly[i].x)*(poly[i+1].x-poly[i].x);
y[i]=(poly[i+1].y-poly[i].y)*(poly[i+1].y-poly[i].y);
}
_u[4]=0;
for (int i=5;i<=n+3;i++)
{
_u[i]=_u[i-1]+sqrt(x[i-5]+y[i-5]);
}
_u[1]=_u[4];
_u[2]=_u[4];
_u[3]=_u[4];
_u[n+4]=_u[n+3];
_u[n+5]=_u[n+3];
_u[n+6]=_u[n+3];
}
voi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 196608 2011-03-12 21:19 visualize\ANN\ANN.dll
文件 35890 2011-08-01 22:09 visualize\ANN\ANN.h
文件 18740 2011-03-12 21:19 visualize\ANN\ANN.lib
文件 8426 2011-03-12 21:19 visualize\ANN\ANNperf.h
文件 6497 2011-03-12 21:19 visualize\ANN\ANNx.h
文件 196608 2011-03-12 21:19 visualize\ANN.dll
文件 35890 2011-08-01 22:09 visualize\ANN.h
文件 18740 2011-03-12 21:19 visualize\ANN.lib
文件 8426 2011-03-12 21:19 visualize\ANNperf.h
文件 6497 2011-03-12 21:19 visualize\ANNx.h
文件 795486 2017-05-10 21:35 visualize\bird.obj
文件 4116 2017-01-19 11:03 visualize\Bsp.cpp
文件 886 2017-01-16 10:13 visualize\Bsp.h
文件 60 2013-07-22 01:18 visualize\ClassDiagram.cd
文件 147241 2017-06-25 17:29 visualize\Debug\fc.obj
文件 194289 2017-07-05 11:39 visualize\Debug\MainFrm.obj
文件 174317 2017-07-05 11:39 visualize\Debug\MenuFormView.obj
文件 942019 2017-06-23 22:04 visualize\Debug\stdafx.obj
文件 2976768 2017-07-05 11:43 visualize\Debug\vc120.idb
文件 7335936 2017-07-05 11:42 visualize\Debug\vc120.pdb
文件 5015 2017-06-25 15:28 visualize\Debug\Vector.obj
文件 194150 2017-07-05 11:39 visualize\Debug\VectorModel.obj
文件 1648 2017-06-23 22:01 visualize\Debug\visualize.Build.CppClean.log
文件 430 2017-09-21 09:47 visualize\Debug\visualize.log
文件 194579 2017-07-05 11:39 visualize\Debug\visualize.obj
文件 47448064 2017-06-23 22:04 visualize\Debug\visualize.pch
文件 78432 2017-06-25 15:28 visualize\Debug\visualize.res
文件 12172 2017-07-05 11:43 visualize\Debug\visualize.tlog\cl.command.1.tlog
文件 218060 2017-07-06 16:49 visualize\Debug\visualize.tlog\CL.read.1.tlog
文件 10012 2017-09-21 09:47 visualize\Debug\visualize.tlog\CL.write.1.tlog
............此处省略68个文件信息
相关资源
- 用MFC做推箱子源代码
- 基于MFC编程的冒泡排序动态演示
- 基于MFC的画直线,矩形,椭圆改变线
- 使用MFC实现的三角形分形谢尔宾斯基
- MFC实现鼠标点击画折线
- 基于MFC的学生信息管理系统
- mfc绘制贝塞尔曲线曲面
- wincap c++ mfc 网络截包 多线程
- 基于MFC 仿QQ聊天系统
- Visual C++程序设计与应用教程第二版案
-
bvh pla
yer - MFC将exe完美嵌套到static内
- C++操作SQL Server数据库新增 删除 修改
- C++编写电压电流表仪表盘
- 基于MFC的飞秋实现
- 相机标定——双目标定的MFC简单实现
- 相机标定——基于张正友标定标定法
- vs2010 mfc对话框五子棋小游戏
- VS2010 C++ MFC简易计算器
- 网上收集的2011.12之前的绝大部分 五子
- MFC vc6.0 RSA DES MD5 加密解密算法
- qtOpenGLDemo2.rar
- opengl圆柱贴图程序,可以直接运行
- 基于Opencv的相机操作代码
- 大恒相机程序
- 计算机图形学图形剪裁与变换算法的
- MFC项目开发85个
- Visual+C++MFC编程教程
- 学生成绩管理系统V2.5MFC版 vs2008
- 计算器 3.0 源码 vs2008 MFC vc++
评论
共有 条评论