软件功能:输入一个二元数学表达式,含有两个参数变量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

WHY数学图形显示工具的更多相关文章

  1. linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

    指令:let.expr.array.convert.tput.date.read.md5.ln.apt.系统信息 一:特殊符号用法整理 系统变量 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $ ...

  2. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  3. Java工具类(util) 之01- 数学运算工具(精确运算)

    数学运算工具(精确运算) /** * * @author maple * */ public abstract class AmountUtil { private AmountUtil() { } ...

  4. R语言介绍

    R语言简介 R语言是一种为统计计算和图形显示而设计的语言环境,是贝尔实验室(Bell Laboratories)的Rick Becker.John Chambers和Allan Wilks开发的S语言 ...

  5. (1)R介绍

    1. R初窥 从CRAN(The Comprehensive R Archive Network)cran.r-project.org—mirrors.html中选择一个镜像,然后下载合适的安装包(R ...

  6. OpenCASCADE Interpolations and Approximations

    OpenCASCADE Interpolations and Approximations eryar@163.com Abstract. In modeling, it is often requi ...

  7. Function Set in OPEN CASCADE

    Function Set in OPEN CASCADE eryar@163.com Abstract. The common math algorithms library provides a C ...

  8. Linux学习笔记(16)shell基础之Bash变量

    1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...

  9. 渐进记号 Asymptotic Notations-------geeksforgeeks 翻译

    我们已经简单的讨论了下渐进分析以及最坏,平均和最佳情况的分析.渐进分析的主要思想是分析算法的效率,不用依靠计算机的具体快慢,不需要实现这个算法,也不需要真正去计算时间.渐进记号是一种数学的工具来表示渐 ...

随机推荐

  1. canvas入门级小游戏《开关灯》思路讲解

    游戏很简单,10行10列布局,每行每列各10盏灯,游戏初始化时随机点亮其中一些灯,点击某盏灯,其上下左右的灯及本身状态反转,如果点击前是灭着的,点击后即点亮,将所有灯全部点亮才算过关.游戏试玩: 下面 ...

  2. spring@PropertySource用法

    测试例子 package com.hjzgg.auth.config; import org.springframework.beans.factory.annotation.Autowired; i ...

  3. 菜鸟nginx源码剖析

    菜鸟nginx源码剖析 配置与部署篇(一) 手把手配置nginx "I love you" TCMalloc 对MYSQL 性能 优化的分析 菜鸟nginx源码剖析系列文章解读 A ...

  4. Qt编写websocketpp客户端

    1.下载websocketpp,地址为https://github.com/zaphoyd/websocketpp,版本为0.7. 2.下载boost,地址为https://www.boost.org ...

  5. phpexcel导出excel等比例缩放图片

    list($width, $height, $type, $attr) = getimagesize($img_path); if( $width>100 || $height >100 ...

  6. 读think in java有感

    .... 2.2.1 保存到什么地方 程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器.这是最快的保存区域,因为它位于和其他所 ...

  7. JDK7新特性<八>异步io/AIO

    概述 JDK7引入了Asynchronous I/O.I/O编程中,常用到两种模式:Reactor 和 Proactor.Reactor就是Java的NIO.当有事件触发时,我们得到通知,进行相应的处 ...

  8. 国外IOS UI指南

    国外IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻译) ...

  9. LPC43xx State Configurable Timer : SCT

  10. 奇妙的 CSS shapes(CSS图形) 【css 图形,绘图,CSS 几何图形)】

    http://www.cnblogs.com/coco1s/p/6992177.html <!DOCTYPE html> <html> <head> <met ...