文档包括bezier曲线曲面生成算法 的原理公式说明 以及编程实现。
文档的项目“Bezier”是使用 Microsoft VC++ 6.0 实现的,当然只要是配置好
OpenGl环境的C++平台都可以使用,把关键cpp代码复制即可。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10596 2016-01-29 11:51 Berzier3DBerzier3D.cpp
文件 4230 2016-01-10 23:03 Berzier3DBerzier3D.dsp
文件 526 2016-01-10 23:03 Berzier3DBerzier3D.dsw
文件 809 2016-01-10 23:03 Berzier3DBerzier3D.h
文件 66560 2016-01-29 11:52 Berzier3DBerzier3D.ncb
文件 651264 2016-01-29 11:52 Berzier3DBerzier3D.opt
文件 1155 2016-01-29 11:52 Berzier3DBerzier3D.plg
文件 2544 2016-01-10 23:03 Berzier3DBerzier3D.rc
文件 114815 2016-01-15 21:32 Berzier3DDebugBerzier3D.exe
文件 96884 2016-01-15 21:32 Berzier3DDebugBerzier3D.ilk
文件 29046 2016-01-15 21:32 Berzier3DDebugBerzier3D.obj
文件 2120812 2016-01-10 23:10 Berzier3DDebugBerzier3D.pch
文件 230400 2016-01-15 21:32 Berzier3DDebugBerzier3D.pdb
文件 5232 2016-01-10 23:09 Berzier3DDebugBerzier3D.res
文件 6226 2016-01-10 23:10 Berzier3DDebugMainWnd.obj
文件 57377 2016-01-10 23:10 Berzier3DDebugStdAfx.obj
文件 91136 2016-01-15 21:32 Berzier3DDebugvc60.idb
文件 184320 2016-01-15 21:32 Berzier3DDebugvc60.pdb
文件 1468 2016-01-10 23:03 Berzier3DMainWnd.cpp
文件 645 2016-01-10 23:03 Berzier3DMainWnd.h
文件 28672 2016-01-29 11:52 Berzier3DReleaseBerzier3D.exe
文件 15859 2016-01-29 11:52 Berzier3DReleaseBerzier3D.obj
文件 2002952 2016-01-15 21:35 Berzier3DReleaseBerzier3D.pch
文件 5232 2016-01-13 20:17 Berzier3DReleaseBerzier3D.res
文件 2618 2016-01-15 21:35 Berzier3DReleaseMainWnd.obj
文件 376 2016-01-15 21:35 Berzier3DReleaseStdAfx.obj
文件 41984 2016-01-29 11:52 Berzier3DReleasevc60.idb
文件 3638 2016-01-10 23:03 Berzier3D
esBerzier3D.ico
文件 1406 2016-01-10 23:03 Berzier3D
esBerzier3D_s.ico
文件 946 2016-01-10 23:03 Berzier3D
esource.h
............此处省略11个文件信息
// Berzier3D.cpp
// 本程序实现了 bezier曲线 以及 曲面的生成算法(拖动鼠标可以改变视角)
/////////////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “Berzier3D.h“
struct Point{
double x;
double y;
double z;
};
//用于绘制在 XY平面的 Bezier 曲线 的10个控制点
Point pp[10] = {
{ 28 5 0}
{ 30 20 0}
{ 35 25 0}
{ 40 5 0}
{ 41 5 0}
{ 43 18 0}
{ 44 25 0}
{ 45 15 0}
{ 46 7 0}
{ 45 2 0}
};
//用于绘制 Bezier 曲面 的100 个控制点
Point PMaxtrix[10][10]={ //第一个维度(列)的方向为u方向,第二个维度(行)的方向为w 方向
{{30 3 30}{27 3 30}{24 3 30}{21 3 30}{18 3 30}{15 3 30}{12 3 30}{9 3 30}{6 3 30}{3 3 30}}
{{30 6 30}{27 6 40}{24 6 40}{21 6 30}{18 6 30}{15 6 30}{12 6 30}{9 6 40}{6 6 40}{3 6 30}}//第2389高度Z不同
{{30 9 30}{27 9 40}{24 9 40}{21 9 30}{18 9 30}{15 9 30}{12 9 30}{9 9 40}{6 9 40}{3 9 30}}//第2389高度Z不同
{{30 1230}{27 1230}{24 1230}{21 1230}{18 1230}{15 1230}{12 1230}{9 1230}{6 1230}{3 1230}}
{{30 1530}{27 1530}{24 1530}{21 1530}{18 1530}{15 1530}{12 1530}{9 1530}{6 1530}{3 1530}}
{{30 1830}{27 1830}{24 1830}{21 1830}{18 1830}{15 1830}{12 1830}{9 1830}{6 1830}{3 1830}}
{{30 2130}{27 2130}{24 2130}{21 2130}{18 2130}{15 2130}{12 2130}{9 2130}{6 2130}{3 2130}}
{{30 2430}{27 2420}{24 2420}{21 2430}{18 2430}{15 2430}{12 2430}{9 2440}{6 2440}{3 2430}}//第2389高度Z不同
{{30 2730}{27 2720}{24 2720}{21 2730}{18 2730}{15 2730}{12 2730}{9 2740}{6 2740}{3 2730}}//第2389高度Z不同
{{30 3030}{27 3030}{24 3030}{21 3030}{18 3030}{15 3030}{12 3030}{9 3030}{6 3030}{3 3030}}
};
//eye 是视点,at 是视线参考点
static Point eye = {454545};
static Point at = {000};
//暂存鼠标操作获取的位置信息
static GLint prePosXprePosY;
void Display(void);
void BezierCurve(Point *pp int n); //绘制 Bezier 曲线
void BezierSuface(Point p[10][10]int mint n); //绘制 Bezier 曲面
void Reshape(int w int h);
void mymouse(int buttonint stateint xint y); //鼠标按钮事件
void mymotion(int xint y); //鼠标移动事件
int fac(int n); //计算阶乘
double powi(double base int n); //计算幂
void MoveTo(double a double b double c);
void LineTo(double a double b double c);
void init();
void drawCurveframe(Point pp[] int n); //绘制曲线控制点框架
void drawSurfaceframe(Point p[10][10] int mint n);//绘制曲面控制点框架
void drawCoordinate(); //绘制世界坐标
static double currentX currentYcurrentZ; //用于绘制曲线曲面时,临时保存当前点信息
static double interval_1 = 0.05; //绘制曲面时网格的间隔控制
static double interval_2 = interval_1; //绘制曲面时曲线的节点间隔控制
INT APIENTRY _tWinMain(HINSTANCE hInstance
HINSTANCE hPrevInstance
LPTSTR lpCmdLine
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
char *argv[] = { “hello“ “ “ };
int argc = 2;
glutInit(&argc argv
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10596 2016-01-29 11:51 Berzier3DBerzier3D.cpp
文件 4230 2016-01-10 23:03 Berzier3DBerzier3D.dsp
文件 526 2016-01-10 23:03 Berzier3DBerzier3D.dsw
文件 809 2016-01-10 23:03 Berzier3DBerzier3D.h
文件 66560 2016-01-29 11:52 Berzier3DBerzier3D.ncb
文件 651264 2016-01-29 11:52 Berzier3DBerzier3D.opt
文件 1155 2016-01-29 11:52 Berzier3DBerzier3D.plg
文件 2544 2016-01-10 23:03 Berzier3DBerzier3D.rc
文件 114815 2016-01-15 21:32 Berzier3DDebugBerzier3D.exe
文件 96884 2016-01-15 21:32 Berzier3DDebugBerzier3D.ilk
文件 29046 2016-01-15 21:32 Berzier3DDebugBerzier3D.obj
文件 2120812 2016-01-10 23:10 Berzier3DDebugBerzier3D.pch
文件 230400 2016-01-15 21:32 Berzier3DDebugBerzier3D.pdb
文件 5232 2016-01-10 23:09 Berzier3DDebugBerzier3D.res
文件 6226 2016-01-10 23:10 Berzier3DDebugMainWnd.obj
文件 57377 2016-01-10 23:10 Berzier3DDebugStdAfx.obj
文件 91136 2016-01-15 21:32 Berzier3DDebugvc60.idb
文件 184320 2016-01-15 21:32 Berzier3DDebugvc60.pdb
文件 1468 2016-01-10 23:03 Berzier3DMainWnd.cpp
文件 645 2016-01-10 23:03 Berzier3DMainWnd.h
文件 28672 2016-01-29 11:52 Berzier3DReleaseBerzier3D.exe
文件 15859 2016-01-29 11:52 Berzier3DReleaseBerzier3D.obj
文件 2002952 2016-01-15 21:35 Berzier3DReleaseBerzier3D.pch
文件 5232 2016-01-13 20:17 Berzier3DReleaseBerzier3D.res
文件 2618 2016-01-15 21:35 Berzier3DReleaseMainWnd.obj
文件 376 2016-01-15 21:35 Berzier3DReleaseStdAfx.obj
文件 41984 2016-01-29 11:52 Berzier3DReleasevc60.idb
文件 3638 2016-01-10 23:03 Berzier3D
esBerzier3D.ico
文件 1406 2016-01-10 23:03 Berzier3D
esBerzier3D_s.ico
文件 946 2016-01-10 23:03 Berzier3D
esource.h
............此处省略11个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)