数学公式显示算法
本帖最后由 plp626 于 2012-6-20 11:58 编辑就如同matlab 的pretty(表达式)那样的字符显示+------------------------------------------------------------------------+
| >> pretty(diff(asin(x))) |
| |
| 1 |
| ----------- |
| 2 1/2 |
| (1 - x ) |
| >> |
+------------------------------------------------------------------------+大家能否提供个算法伪代码,或者比较好的思路? 最直接的想法,先确定高度,再确定宽度,然后计算每个字符相对于左上角定点的位置; 最后全部输出;
感觉计算比较复杂;
然后想到用个递归,逐行打印,在打印某个字符前, 先计算它右下角字符的坐标位置, 然后根据这个位置打印它;。。。
大家讨论讨论实现细节。。 不错,很有趣!期待讨论!
其实很多很多的数学软件都可以的,只要有终端运行的功能即可。
推广言之,不仅仅是数学公式,还有图片,中文汉字,都可以用ascii直观展示。
这叫做 ascii art,我google到了几个链接,可惜打不开。
我见过有的人,把程序代码格式化成自己的照片。。。 +-------------------------------------------------------------------------------------+
| >> pretty(diff(asin(x)*asin(1/x))+diff(asin(1/asin(x)))/diff(asin(1/x))) |
| |
| 2 / 1\1/2 |
| x|1 - ----| |
| | 2 | |
| asin(1/x) asin(x) \ x/ |
| ----------- - ---------------- + -------------------------------------- |
| 2 1/2 2 / 1\1/2 2 2 1/2 / 1 \1/2 |
| (1 - x ) x|1 - ----| asin(x)(1 - x ) |1 - --------| |
| | 2 | | 2| |
| \ x/ \ asin(x) / |
| >> |
| |
+-------------------------------------------------------------------------------------+能看出matlab处理字符输出的规律ABC图高度一致:+------------------------------------------------------------------------+
| +-----------------+ |
| | | |
| | | |
| | | |
| | asin(1/x) | |
| A = |----------- | |
| | 2 1/2 | |
| |(1 - x ) | |
| | | |
| | | |
| | | |
| +-----------------+ |
| +-------------------+ |
| | | |
| | | |
| | | |
| | | |
| B = | asin(x) | |
| |---------------- | |
| | 2 / 1\1/2 | |
| |x|1 - ----| | |
| | | 2 | | |
| | \ x/ | |
| +-------------------+ |
| +---------------------------------------------+ |
| | ;43 | |
| | 2 / 1\1/2 | |
| | x|1 - ----| | |
| | | 2 | | |
| C = | \ x/ | |
| | -------------------------------------- | |
| | 2 2 1/2 / 1 \1/2 | |
| | asin(x)(1 - x ) |1 - --------| | |
| | | 2| | |
| | \ asin(x) / | |
| +---------------------------------------------+ |
+------------------------------------------------------------------------+我把2楼第二个思路拓展下。。
把一个式子看做用+-连接的若干个图形,
然后就是图形的拼接,
打印第一个图形,调用三个函数,
一个打印分子,一个打印分数线,一个打印分母,
打印分子,分母的时候,重复图形拼接策略。。。
想来不难,但实现起来挺难。。。
页:
[1]