社区
C++ Builder
帖子详情
C++Builder绘制三维曲面
hu_cdut
2006-09-05 07:30:43
哪位用C++Builder绘制过三维曲面?
我要用C++Builder绘制曲面,还必须消隐.
希望大家给点思路哈!
先谢了!
...全文
397
3
打赏
收藏
C++Builder绘制三维曲面
哪位用C++Builder绘制过三维曲面? 我要用C++Builder绘制曲面,还必须消隐. 希望大家给点思路哈! 先谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
leesnow1
2006-10-16
打赏
举报
回复
用 MATLAB把
Y___Y
2006-09-05
打赏
举报
回复
这里有我自己编写的一个简单的绘制三维曲面类,不过是画的网格
能以任意视角绘制,任意放大,网格密度也可以是任意的
但不能消隐,不能进行纹理映射
如果需要较好的效果,可以花点时间学习openGL编程
#include <math.h>
//绘制三维曲面类
class Draw3DSurface
{
protected:
double Ox,Oy;//原点坐标
double startX,startY,endX,endY;//起始位置和终止位置
int numX,numY;//线条数目
double tc,tp;//平视角,仰视角
double R; //放大倍数
public:
void InitInstance( double Ox0,double Oy0,
double startX0,double startY0,double endX0,double endY0,
int numX0,int numY0,
double tc0,double tp0,
double R0
);//初始化
Draw3DSurface();
Draw3DSurface( double Ox0,double Oy0,
double startX0,double startY0,double endX0,double endY0,
int numX0,int numY0,
double tc0,double tp0,
double R0
);
void SetOrigin(double Ox0,double Oy0);//设置原点
void SetLocation(double startX0,double startY0,
double endX0,double endY0);//设置起始和终止位置
void SetNum(int numX0,int numY0);//设置线条数目
void SetAngle(double Ox0,double Oy0);//设置角度
void SetMultiple(double R0);//设置倍数
void Draw(TCanvas *pDc,double (*fun)(double,double));// 绘制三维曲面
};
Draw3DSurface::Draw3DSurface()
{
InitInstance(300.0,300.0,
0.0,0.0,1.0,1.0,
10,10,
1.047197551,0.785398163,
10.0
);
}
Draw3DSurface::Draw3DSurface(double Ox0,double Oy0,
double startX0=0.0,double startY0=0.0,double endX0=1.0,double endY0=1.0,
int numX0=10,int numY0=10,
double tc0=1.047197551,double tp0=0.785398163,
double R0=10)
{
InitInstance( Ox0,Oy0,
startX0,startY0,endX0,endY0,
numX0,numY0,
tc0,tp0,
R0
);
}
void Draw3DSurface::InitInstance(double Ox0=300,double Oy0=300,
double startX0=0.0,double startY0=0.0,double endX0=1.0,double endY0=1.0,
int numX0=10,int numY0=10,
double tc0=1.047197551,double tp0=0.785398163,
double R0=10)
{
Ox=Ox0;
Oy=Oy0;
startX=startX0;
startY=startY0;
endX=endX0;
endY=endY0;
numX=numX0;
numY=numY0;
tc=tc0;
tp=tp0;
R=R0;
}
void Draw3DSurface::SetOrigin(double Ox0,double Oy0)
{
Ox=Ox0;
Oy=Oy0;
}
void Draw3DSurface::SetLocation(double startX0,double startY0,
double endX0,double endY0)
{
startX=startX0;
startY=startY0;
endX=endX0;
endY=endY0;
}
void Draw3DSurface::SetNum(int numX0,int numY0)
{
numX=numX0;
numY=numY0;
}
void Draw3DSurface::SetMultiple(double R0)
{
R=R0;
}
void Draw3DSurface::Draw(TCanvas *pDC,double (*fun)(double,double))
{ int i;
register int j;
int ix=int(endX-startX);
int iy=int(endY-startY);
double ddx,ddy;
double x,y,z,x0,y0;
double dx=(endX-startX)/numX,dy=(endY-startY)/numY;
double sintc=sin(tc),costc=cos(tc),sintp=sin(tp),costp=cos(tp);
ddx=(endX-startX)/ix;
ddy=(endY-startY)/ix;
for(i=0;i<=numX;i++)
{
x=startX+i*dx;
y=startY;
z=(*fun)(x,y);
x0=-x*sintc+y*costc;
y0=-x*costp*costc-y*costp*sintc+z*sintp;
pDC->MoveTo((int)(Ox+R*x0),(int)(Oy-R*y0));
for(j=0;j<=iy;j++)
{
y=startY+j*ddy;
z=(*fun)(x,y);
x0=-x*sintc+y*costc;
y0=-x*costp*costc-y*costp*sintc+z*sintp;
pDC->LineTo((int)(Ox+R*x0),(int)(Oy-R*y0));
}
}
for(i=0;i<=numY;i++)
{
y=startY+i*dy;
x=startX;
z=(*fun)(x,y);
x0=-x*sintc+y*costc;
y0=-x*costp*costc-y*costp*sintc+z*sintp;
pDC->MoveTo((int)(Ox+R*x0),(int)(Oy-R*y0));
for(j=0;j<=iy;j++)
{
x=startX+j*ddx;
z=(*fun)(x,y);
x0=-x*sintc+y*costc;
y0=-x*costp*costc-y*costp*sintc+z*sintp;
pDC->LineTo((int)(Ox+R*x0),(int)(Oy-R*y0));
}
}
}
Y___Y
2006-09-05
打赏
举报
回复
用openGL编程吧
CBuilder XE与SQLite快速开发app
因为C++ Builder XE10资料一直较少,所以作为C++ Builder业余fans,有必要为这冷门提供一些技术支持,与小伙伴们一起成长!本视频系列,主要是讲解C++ Builder XE10与sqlite来快速开发手机安卓app,让学友们能够快速掌握这个搭建开发过程,不走弯路。学习的好处在于,这个软件不需要复杂的安装与环境配置要求。实再是太简单了,只要懂点C++,就可以搞起了。
OpenCASCADE:基于MFC的
三维
模型
绘制
示例
在本篇文章中,我们利用OpenCASCADE和MFC这两个工具来实现一个简单的
三维
模型
绘制
示例。我们可以从OpenCASCADE的官网上下载到相应版本的库文件和头文件,并将其添加到我们的项目中。在代码中,我们需要定义一些基本...
DELPHI中OPENGL图形程序设计
OPENGL图形程序设计OPENGL是一个
三维
图形和模型库,由于它在
三维
图形方面的杰出性能,目前许多高级语言都提供了与OPENGL的接口,如:VC、DELPHI、
C++Builder
等。使用OPENGL可以极大地减少用户开发图形、图像的难度,...
基于OpenCASCADE自制
三维
建模软件(六)瓶子模型例程
在OpenCASCADE有一个例程,在官方帮助网站中可以找到。程将教你如何使OpenCASCADE服务来进行
三维
建模。教程的目的不是描述所有的OpenCASCADE类,而是帮助你开始考虑将OpenCASCADE作为一种工具。
python
三维
数据转换成二维_Python科学计算全生态工具锦集
MetroloPy 处理物理量的MetroloPy工具:不确定性传播和单位转换 绘图、数据可视化、
三维
编程 二维工具 matplotlib OpenCV Yellowbrick Bokeh Chaco PyQwt 数据可视化:
三维
、
曲面
和体
绘制
Mayavi2 visvis S2PLOT ...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章