• 大小: 18.65MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-30
  • 语言: 其他
  • 标签:

资源简介

用三次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\link-cvtres.read.1.tlog

     文件          2  2018-03-26 16:00  7-Utah茶壶\Debug\link-cvtres.write.1.tlog

     文件       2794  2018-03-26 16:00  7-Utah茶壶\Debug\link.command.1.tlog

     文件       6780  2018-03-26 16:00  7-Utah茶壶\Debug\link.read.1.tlog

     文件       1918  2018-03-26 16:00  7-Utah茶壶\Debug\link.write.1.tlog

     文件      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.embed.manifest

     文件        980  2018-03-26 16:00  7-Utah茶壶\Debug\Test.exe.embed.manifest.res

     文件        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个文件信息

评论

共有 条评论