zoukankan      html  css  js  c++  java
  • WHY数学图形显示工具

          软件功能:输入一个二元数学表达式,含有两个参数变量X和Y,显示该数学表达式的三维图形.

          很久之前就有写这个软件的想法,却一直没有激情和动力,终于在年假这两天完成了.以此软件纪念我那十几年前的高中生活,那时我虽然不喜欢数学,但立体几何学得还算不错.不知道还有没有人记得我之前发的博客"数学表达式解析工具"见:http://www.cnblogs.com/WhyEngine/p/3513478.html, 当时写那个小工具就是为这个软件做基础工作.程序写的有点着急,比如我本打算按Z的高度设置不同的颜色,底层接口都已经实现,但发现MFC的界面逻辑写起来有些麻烦,就没写下去.数学表达式的批量解析算法写完之后没有做太多测试,可能存在BUG.还有就是如果算法出现非法运算时,可能会有问题,如log(负数), 除0产生无穷大的数,等以后再做优化吧.

          为了该软件,我还写了一个显示立方体包围范围的图形控件,这让我想起很多年前搞VTK时,调用它的接口也能显示出类似的控件.不同的是之前只是调别人的接口,而这次是自己写,写了才发现,这个功能要实现很容易.

    数学表达式的规范说明:

    (1)标准运算符
    支持+,-,*,/,%,^这6种标准运算符,其中:
    %为求余运算, a%b 相当于 mod(a, b);
    ^为求幂运算, a^b 相当于 pow(a, b);

    (2)括号标志符
    支持{}, [], ()这三类括号标志符,括号必需成对出现.支持最大32级括号的嵌套.如:
    (2+(-2+(5.0*(9 + ((1+2)*3))/3) + 2))
    -{exp[sqrt(abs[sin{rand(100)}])]}

    (3)支持函数形式的运算符
    运算符的函数名必需为小写字母.具体说明如下:
    单目运算操作:
    positive(a)  // 相当于 +a
    negative(a)  // 相当于 -a
    abs(a)
    floor(a)
    ceil(a)
    sign(a)
    sqrt(a)  // a为负时,会得到数值0
    exp(a)  // a过大时,会得到数值0
    log(a)  // a为负时,会得到数值0
    log2(a)  // a为负时,会得到数值0
    log10(a) // a为负时,会得到数值0
    sin(a)
    cos(a)
    tan(a)
    asin(a)
    acos(a)
    atan(a)
    rand(a)  // 生成一个0到a的随机数

    双目运算操作:
    add(a, b)
    sub(a, b)
    multiply(a, b)
    divide(a, b)
    max(a, b)
    min(a, b)
    mod(a, b)
    pow(a, b)  // 很容易得到无效的数值
    atan2(a, b)
    rand2(a, b)  // 生成一个a到b的随机数

    在之前的"数学表达式解析工具"中支持若干个三元和四元的运算函数,但这里不支持,等以后做优化再说.
    (4)常量值
    有两个常量值
    PI 3.1415927
    E 2.7182818
    常量名必需为大写字母,如(PI + E)或 sin(PI*0.5)
    (5)数值解析
    对整数的解析支持2,8,10,16四种进制
    0X开头为16进制, XABCDEF大小写都可以, 如0xffff
    0Y开头为2进制, Y大小写都可以, 如0y10101010000
    0开头为8进制, 如07523, 注意出现了"08"之类的分失败
    默认为10进制

    (6)可以设置XY两个参数, XY大小写都可以.

     

    下载地址:

    http://files.cnblogs.com/WhyEngine/MathGeometryViewer.zip

  • 相关阅读:
    Spring4+SpringMVC+MyBatis登录注册详细
    Spring MVC登录注册以及转换json数据
    MyBatis+mysql查询和添加数据
    html5中的选择器
    倒影(转)
    bi包
    函数作用域
    节点开始
    window.onload中失效的问题
    Node.js简介
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/3535903.html
Copyright © 2011-2022 走看看