该软件用于将数学表达式以图形的形式显示出来.软件中定义一套简单易学的脚本语言,用于描述数学表达式.使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形.能够生成曲线图形和曲面图形. 目前只能处理显示表达式.
(1)主界面
在文件夹” MathScript”中,提供了500个以上已经写好的数学表达式脚本文件.将数学脚本文件拖入到主界面中,即显示其图形.亦可以通过菜单项打开脚本文件.
如果图形是一个3D图形,那么软件会自动为你切换到3D显示模式.使用鼠标右键拖动,以旋转视角.键盘上的WSAD,QERF,上下左右也对视角进行控制.这个不细讲了,用户自己去体验吧.如果图形是一个2D图形,打开时为二维显示模式,用户可以按下键盘上的’O’键,在3D,2D间进行切换.鼠标滚轮可以对视口进行缩放.
下图为一个二维的视图:
按下键盘上的’U’键,会在左边显示一套UI控件:
用于对一些显示属性的操作.可惜我的引擎目前不支持中文字体,所以先将就着用吧.
按下键盘上的’0’键,会在右边显示一个纹理选择控件,用于设置数学曲面的纹理:
UI面板上的也可以控制纹理选择控件.
纹理文件存放在” Texture”文件夹下,用户可以将自己喜欢的图像文件放入其中.软件会自动为你加载.用户亦可以直接将图像文件拖入到主界面中.对图像格式的支持包括: dds,bmp,jpg,png,gif,tga.
当打开一个数学图形后,按下键盘上的’7’键,会显示一个滑动条控件,用于控制所显示的图形范围. 控件
也可以.滑动条上有两个滑块,分别表示其显示范围的最小与最大,如下图:黄线处为显的区域,绿线处为未显示的区域.
最小滑块与最大滑块可以错开:
下图为对曲面图形的操作
下图为对曲线图形的操作:
当打开一个数学曲面图形后, 按下键盘上的’P’键或点下会在右下角显示两个对曲面上曲线进行操作的控件.
如下图所展示:
图中绿色曲线为第一维度的曲线,红色曲线为第二维度的曲线.
MathExpression模块中为数学表达式及脚本解析的代码逻辑.
(1)主要接口
文件”math_expression_parser.h”提供了对表达式的解析函数
// 设置参数值
void SetParameterValue(char c, float value);
// 清空参数值
void ClearParameterValues();
// 表达式解析
bool ParseExpression(const char* szExpression, float& rst);
// 括号内的子表达式解析
bool ParseBracketExpression(const char* szExpression,
unsigned int& pos, float& rst,
unsigned int bracketIndex, bool endComma);
可以针求独立表达式的结果,如:
bool sus = ParseExpression(“sin(PI*3) + 10*E*log(100)”, rst);
文件”math_script_parser.h”提供了一个对象MathScriptParser,用于对数学脚本的解析
class MathScriptParser
{
public:
...
// 加载脚本文件
bool LoadFile(const char* szFile);
// 处理内存数据
bool ProcessMemory(const char* bufPtr, unsigned int bufSize);
...
};
(2)添加或设置常量值
开发者可以通过”const_value.h”文件中的如下函数对常量进行添加或修改
// 添加或设置常量值
bool SetConstValue(const char* szName, float value);
(3)添加或设置函数运算符
程序中的运算符操作是以函数指针的方式使用,开发者可以将自己实现的函数设置到系统中.
有6种运算符函数类型
// 单目运算函数
typedef float (*SINGLE_OPERATOR_FUNC)(float);
// 双目运算函数
typedef float (*TWIN_OPERATOR_FUNC)(float, float);
// 三目运算函数
typedef float (*THREE_OPERATOR_FUNC)(float, float, float);
// 四目运算函数
typedef float (*FOUR_OPERATOR_FUNC)(float, float, float, float);
// 对ValueNode的运算函数(输入ValueNode,输出一个浮点数)
typedef float (*VALUENODE_TO_FLOAT_OPERATOR_FUNC)(const ValueNode*);
// 对ValueNode的运算函数(输入ValueNode,输出ValueNode)
typedef void (*VALUENODE_CONVERT_OPERATOR_FUNC)(const ValueNode*, ValueNode*);
开发者可自定义运算函数后,使用如下接口,将其添加到系统中.
// 添加或设置运算函数
bool SetSingleOperator(const char* szName, SINGLE_OPERATOR_FUNC func);
bool SetTwinOperator(const char* szName, TWIN_OPERATOR_FUNC func);
bool SetThreeOperator(const char* szName, THREE_OPERATOR_FUNC func);
bool SetFourOperator(const char* szName, FOUR_OPERATOR_FUNC func);
bool SetValueNodeToFloatOperator(const char* szName, VALUENODE_TO_FLOAT_OPERATOR_FUNC func);
bool SetValueNodeConvertOperator2(const char* szName, VALUENODE_CONVERT_OPERATOR_FUNC func);
需要注意这两个宏:
#define OPERATOR_NAME_LENGTH 24 // 操作符名的最大长度
#define MAX_FUNCTIONS_COUNT 256 // 运算函数的最大数目
如果不满足要求,请自己修改这两个宏值
代码中的Integraller模块为额外添加的数学函数.
在文件MathGraph.cpp中将额外的数学函数注册到系统中:
void CMathGraph::SetupIntergralFunctions()
{
Why::SetTwinOperator("Trapezia", TestTrapezia);
Why::SetTwinOperator("Simpson", TestSimpson);
Why::SetTwinOperator("ATrapezia", TestATrapezia);
Why::SetTwinOperator("Romberg", TestRomberg);
Why::SetTwinOperator("ValuePq", TestValuePq);
Why::SetTwinOperator("LegdGauss", TestLegdGauss);
Why::SetSingleOperator("Gamma", YfGamma);
Why::SetTwinOperator("Gamma2", YfGamma2);
Why::SetSingleOperator("Erf", YfErf);
Why::SetThreeOperator("Beta", YfBeta);
Why::SetThreeOperator("Gass", YfGass);
Why::SetTwinOperator("Student", YfStudent);
Why::SetTwinOperator("Chii", YfChii);
Why::SetThreeOperator("Fdisp", YfFdisp);
Why::SetSingleOperator("Sinn", YfSinn);
Why::SetSingleOperator("Coss", YfCoss);
Why::SetSingleOperator("Expp", YfExpp);
}
未经书面许可,严禁将本网内容作为AI训练资源。
33台词PC版 0.1
文件批量改名Bulk Rename Utility v3.4.1 中文绿色版
PDF快转(SanPDF) v2.0.6.66 官方版
菲菲更名宝贝之得意非凡FFRenamePro V4.0专业版
查找大文件(WizTree) v3.35 绿色版
文件比较查重工具WinMerge v2.16.8.0 中文版
Windows文件管理器(WinNc) v9.4.0.0 官方安装版
文件压缩档案提取(Explzh) v8.18 官方版
WinMerge v2.16.7.0 官方多语中文版
UltraCompare文件比较工具汉化修正中文版 V21.10.0.20免费64位注册码绿色版
文档自动转换工具BlackIce BiBatchConverter v4.80.632 官方版
批量文本文件处理器 V1.4绿色版
MAXHUB文档客户端 v1.3.1官方PC版
文件校验工具(EF CheckSum Manager) v20.02 官方版
全速pdf转换成excel转换器 v7.8.0.0官方版