用MFC绘制各种数学图形,如sin,cos等
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
**理工大学
C++面向对象课程设计报告
院(系):计算机工程学院
专业:计算机科学与技术
学生姓名:__**
班级计算111 学号: 2011070** 题目:设计绘制各种数学图形程序_起迄日期:_2013.6.23~2013.7.5 设计地点:计算机学院机房
指导教师: *** 完成日期: 2013 年7月 5 日
目录
一、需求分析
1.选做此课题的目的 (3)
2.程序所实现的功能 (3)
二、设计内容
1.模块图 (3)
2.主程序及其主要模块的流程图 (3)
3.类图 (4)
3.1表达式 (4)
3.2 储存运算符的栈 (5)
3.3储存运算数的栈 (5)
3.4 圆 (5)
3.5 椭圆 (6)
3.6 三叶玫瑰线 (6)
3.7 四叶玫瑰线 (7)
3.8 阿基米德螺线 (7)
3.9 心形线 (7)
4.函数关系图 (8)
5.编写程序代码 (9)
三、调试分析
1.实际完成的情况说明 (12)
2.程序的性能分析 (12)
3.上机过程中出现的问题及其解决方案 (12)
4.程序中可以改进的地方说明 (13)
四、用户手册 (13)
五、设计总结 (15)
六、参考文献 (15)
七、附录 (15)
一、需求分析
1.选作此课题的目的
在日常生活中我们常常需要解决一些复杂的数学问题,而这些数学问题的解答往往可以从它的函数图形上很直观、明了的表现出来,这时快捷方便的绘制出该数学函数的图形就显得尤为重要。所以我们使用Microsoft 提供的MFC 类库来实现数学函数图形的绘制。
2 .程序所实现的功能
本程序支持用户输入一般表达式,然后输出其对应的函数图形,例如:一次(二次……)函数,三角函数,双曲余弦,双曲正弦,双曲正切,幂函数,指数函数(以10为底,以e 为底)。另外,还支持一些供选择的数学图形,例如:圆,椭圆,三叶玫瑰线,四叶玫瑰线,阿基米德螺线,心形线。
二、设计内容
1.模块图
2. 主程序及主要模块的流程图
表达式
特殊数学图形
圆 主界面
椭圆 三叶玫瑰线 阿基米德螺线
四叶玫瑰线
心形线
开始
选择图形类型
No
确定
Yes
输入表达式或参数
图形
结束
3.类图
3.1 表达式
CGraphDlg
public:
double Pow(double ,double ); //幂函数求值
double Operate(double ,char ,double ); //表达式求值
char Precede(char ,char); //判断操作符优先级
int In(char ); //判断运算数和运算符
void Coordinate(); //求点的集合
double Calculate(CString ,double);
CGraphDlg(CWnd* pParent = NULL);
enum { IDD = IDD_GRAPH_DIALOG };
protected:
Virtual void DoDataExchange(CDataExchange* pDX); private:
ICON m_hIcon;
UINT m_num; //点的数量
char *m_stop;
CPtrArray m_ptrarray; //点的集合变量
CComboBox m_type; //图形类型
CString m_expression; //表达式
3.2存储运算符的栈
OPTR
public:
OPTR(); //缺省构造函数
int InitOPTR(); //构造一个空栈
char GetTop(); //返回栈顶元素
int Push(char e); //进栈
char Pop(); //出栈
virtual ~OPTR(); //析构函数
Public:
char *base; //栈底指针
char *top; //栈顶指针
int size; //当前已分配的存储空间3.3存储运算数的栈
OPND
public:
OPND(); //缺省构造函数
int InitOPND(); //构造一个空栈
double GetTop(); //返回栈顶元素
int Push(double e); //进栈
double Pop(); //出栈
virtual ~OPND(); //析构函数
Public:
double *base; //栈底指针
double *top; //栈顶指针
int size; //当前已分配的存储空间
3.4 圆
circle
public:
afx_msg void OnChangeEdit1();
afx_msg void OnChangeEdit2();
afx_msg void OnChangeEdit3();
afx_msg void OnButton1();
circle(CWnd* pParent = NULL);
enum { IDD = IDD_DIALOG1 };
Public:
double m_x; //圆心横坐标
double m_y; //圆心纵坐标
double m_r; //半径
3.5椭圆
ellipse
public:
afx_msg void OnChangeEdit1();
afx_msg void OnChangeEdit2();
afx_msg void OnChangeEdit3();
afx_msg void OnChangeEdit4();
afx_msg void OnButton1();
ellipse(CWnd* pParent = NULL);
enum { IDD = IDD_DIALOG2 };
Public:
double m_x; //椭圆中心横坐标
double m_y; //椭圆中心纵坐标
double m_lr; //长轴
double m_sr; //短轴
3.6 三叶玫瑰线
sanyie
public:
afx_msg void OnChangeEdit1();
afx_msg void OnChangeEdit2();
afx_msg void OnButton1();
sanyie(CWnd* pParent = NULL);
enum { IDD = IDD_DIALOG3 };
Public:
double m_a; //系数a
double m_b; //角度θ