资源简介
用三次Bezier曲线画Uath茶壶,给出各个控制点,根据控制点画出Utah茶壶,有需要的话还可以贴上不同的图案使茶壶更完整。
代码片段和文件信息
#include “StdAfx.h“
#include “BicubicBezierSurface.h“
#include
#define ROUND(d) int(d+0.5)
CBicubicBezierSurface::CBicubicBezierSurface(void)
{
}
CBicubicBezierSurface::~CBicubicBezierSurface(void)
{
}
void CBicubicBezierSurface::ReadControlPoint(CP3 P[4][4])
{
for (int i = 0;i<4;i++)
for(int j=0;j< 4;j++)
P3[i][j] = P[i][j];
}
void CBicubicBezierSurface::DrawCurvedSurface(CDC* pDC)
{
double M[4][4];//系数矩阵Mbe
M[0][0]=-1;M[0][1]=3; M[0][2]=-3;M[0][3]=1;
M[1][0]=3; M[1][1]=-6;M[1][2]=3; M[1][3]=0;
M[2][0]=-3;M[2][1]=3; M[2][2]=0; M[2][3]=0;
M[3][0]=1; M[3][1]=0; M[3][2]=0; M[3][3]=0;
CP3 P[4][4];//曲线计算用控制点数组
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
P[i][j]=P3[i][j];
LeftMultiplyMatrix(MP);//数字矩阵左乘三维点矩阵
TransposeMatrix(M);//计算转置矩阵
RightMultiplyMatrix(PM);//数字矩阵右乘三维点矩阵
double tStep =0.1;//t的步长
double u0u1u2u3v0v1v2v3;//u,v参数的幂
for(double u=0;u<=1;u+=tStep)
for(double v=0;v<=1;v+=tStep)
{
u3=u*u*u;u2=u*u;u1=u;u0=1;v3=v*v*v;v2=v*v;v1=v;v0=1;
CP3 pt=(u3*P[0][0]+u2*P[1][0]+u1*P[2][0]+u0*P[3][0])*v3
+(u3*P[0][1]+u2*P[1][1]+u1*P[2][1]+u0*P[3][1])*v2
+(u3*P[0][2]+u2*P[1][2]+u1*P[2][2]+u0*P[3][2])*v1
+(u3*P[0][3]+u2*P[1][3]+u1*P[2][3]+u0*P[3][3])*v0;
CP2 Point2=OrthogonalProjection(pt);//正交投影
if(v==0)
pDC->MoveTo(ROUND(Point2.x)ROUND(Point2.y));
else
pDC->LineTo(ROUND(Point2.x)ROUND(Point2.y));
}
for(double v=0;v<=1;v+=tStep)
for(double u=0;u<=1;u+=tStep)
{
u3=u*u*u;u2=u*u;u1=u;u0=1;v3=v*v*v;v2=v*v;v1=v;v0=1;
CP3 pt=(u3*P[0][0]+u2*P[1][0]+u1*P[2][0]+u0*P[3][0])*v3
+(u3*P[0][1]+u2*P[1][1]+u1*P[2][1]+u0*P[3][1])*v2
+(u3*P[0][2]+u2*P[1][2]+u1*P[2][2]+u0*P[3][2])*v1
+(u3*P[0][3]+u2*P[1][3]+u1*P[2][3]+u0*P[3][3])*v0;
CP2 Point2=OrthogonalProjection(pt);//正交投影
if(0==u)
pDC->MoveTo(ROUND(Point2.x)ROUND(Point2.y));
else
pDC->LineTo(ROUND(Point2.x)ROUND(Point2.y));
}
}
void CBicubicBezierSurface::LeftMultiplyMatrix(double M[][4]CP3 P[][4])//左乘矩阵M*P
{
CP3 T[4][4];//临时矩阵
int ij;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
T[i][j].x=M[i][0]*P[0][j].x+M[i][1]*P[1][j].x+M[i][2]*P[2][j].x+M[i][3]*P[3][j].x;
T[i][j].y=M[i][0]*P[0][j].y+M[i][1]*P[1][j].y+M[i][2]*P[2][j].y+M[i][3]*P[3][j].y;
T[i][j].z=M[i][0]*P[0][j].z+M[i][1]*P[1][j].z+M[i][2]*P[2][j].z+M[i][3]*P[3][j].z;
}
for( i=0;i<4;i++)
for(int j=0;j<4;j++)
P[i][j]=T[i][j];
}
void CBicubicBezierSurface::RightMultiplyMatrix(CP3 P[][4]double M[][4])//右乘矩阵P*M
{
CP3 T[4][4];//临时矩阵
int ij;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
T[i][j].x=P[i][0].x*M[0][j]+P[i][1].x*M[1][j]+P[i][2].x*M[2][j]+P[i][3].x*M[3][j];
T[i][j].y=P[i][0].y*M[0][j]+P[i][1].y*M[1][j]+P[i][2].y*M[2][j]+P[i][3].y*M[3][j];
T[i][j].z=P[i][0].z*M[0][j]+P[i][1].z*M[1][j]+P[i][2].z*M[2][j]+P[i][3].z*M[3][j];
}
for( i=0;i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 67072 2017-05-15 19:08 7-Utah茶壶\.vs\Test\v14\.suo
文件 4217 2017-05-19 20:57 7-Utah茶壶\BicubicBezierSurface.cpp
文件 586 2017-05-19 20:58 7-Utah茶壶\BicubicBezierSurface.h
文件 50043 2018-03-26 16:00 7-Utah茶壶\Debug\BicubicBezierSurface.obj
文件 7466 2018-03-26 16:00 7-Utah茶壶\Debug\cl.command.1.tlog
文件 70914 2018-03-26 16:00 7-Utah茶壶\Debug\CL.read.1.tlog
文件 4462 2018-03-26 16:00 7-Utah茶壶\Debug\CL.write.1.tlog
文件 2 2018-03-26 16:00 7-Utah茶壶\Debug\li
文件 2 2018-03-26 16:00 7-Utah茶壶\Debug\li
文件 2794 2018-03-26 16:00 7-Utah茶壶\Debug\li
文件 6780 2018-03-26 16:00 7-Utah茶壶\Debug\li
文件 1918 2018-03-26 16:00 7-Utah茶壶\Debug\li
文件 89658 2018-03-26 16:00 7-Utah茶壶\Debug\MainFrm.obj
文件 704 2018-03-26 16:00 7-Utah茶壶\Debug\mt.command.1.tlog
文件 844 2018-03-26 16:00 7-Utah茶壶\Debug\mt.read.1.tlog
文件 470 2018-03-26 16:00 7-Utah茶壶\Debug\mt.write.1.tlog
文件 5599 2018-03-26 16:00 7-Utah茶壶\Debug\P2.obj
文件 13481 2018-03-26 16:00 7-Utah茶壶\Debug\P3.obj
文件 4677 2018-03-26 16:00 7-Utah茶壶\Debug\Patch.obj
文件 1076 2018-03-26 16:00 7-Utah茶壶\Debug\rc.command.1.tlog
文件 4152 2018-03-26 16:00 7-Utah茶壶\Debug\rc.read.1.tlog
文件 494 2018-03-26 16:00 7-Utah茶壶\Debug\rc.write.1.tlog
文件 640164 2018-03-26 16:00 7-Utah茶壶\Debug\stdafx.obj
文件 269312 2018-03-26 16:00 7-Utah茶壶\Debug\Test.exe
文件 915 2018-03-26 16:00 7-Utah茶壶\Debug\Test.exe.em
文件 980 2018-03-26 16:00 7-Utah茶壶\Debug\Test.exe.em
文件 640 2018-03-26 16:00 7-Utah茶壶\Debug\Test.exe.intermediate.manifest
文件 1899092 2018-03-26 16:00 7-Utah茶壶\Debug\Test.ilk
文件 71 2018-03-26 16:00 7-Utah茶壶\Debug\Test.lastbuildstate
文件 4400 2018-03-26 16:00 7-Utah茶壶\Debug\Test.log
............此处省略62个文件信息
- 上一篇:HHT课件——国立中央大学
- 下一篇:全息谱的资源
相关资源
- 计算机图形学考试试卷试题6套含3套的
- GPU精粹1-中文版.pdf《GPU精粹:实时图形
- 计算机图形学 基于3D图形开发技术
- 3D游戏与计算机图形学中的数学方法
- 虚拟现实技术文献英文
- 华南理工大学软件学院计算机图形学
- GPU+编程与CG+语言之阳春白雪下里巴人
- 计算机图形学实验 opengl实现太阳系运
- 中国科学技术大学计算机图形学大作
- 计算机图形学的实习
- 计算机图形大作业opengl-物联网.rar
- 计算机图形学 z-buffer
- 计算机图形学经典论文计算机图形学
- 计算机图形学几何工具算法详解
- 广东工业大学 各年 计算机图形学最全
- 交互式计算机图形学 基于WEBGL的自顶
- 清华大学版计算机图形学
- 计算机图形学 边界定义的8连通区域
- 实验一 OpenGL 程序设计基础
- 计算机图形学与几何造型导论 英文版
- 计算机图形学基础教程.docx
- 广东工业大学计算机图形学实验.rar
- 计算机图形学 OpenGL实验源码+实验文档
- 计算机图形学的设计作业。。OpenGl源
- 计算机图形学-基于OpenGL的3D迷宫漫游
- 用opengl绘制的兔子
- objdata.zip
- 《计算机图形学课程设计》源代码
- 内蒙古大学计算机图形学作业——画
- 计算机图形学三维变换课程设计
评论
共有 条评论