找回密码
 欢迎注册
查看: 9773|回复: 3

[讨论] 数学公式显示算法

[复制链接]
发表于 2012-6-20 10:04:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本帖最后由 plp626 于 2012-6-20 11:58 编辑

就如同matlab 的pretty(表达式)那样的字符显示
  1. +------------------------------------------------------------------------+
  2. | >> pretty(diff(asin(x)))                                               |
  3. |                                                                        |
  4. |                                        1                               |
  5. |                                   -----------                          |
  6. |                                         2 1/2                          |
  7. |                                   (1 - x )                             |
  8. | >>                                                                     |
  9. +------------------------------------------------------------------------+
复制代码
大家能否提供个算法伪代码,或者比较好的思路?

评分

参与人数 1鲜花 +12 收起 理由
wayne + 12 有趣!谢谢!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-6-20 12:03:44 | 显示全部楼层
最直接的想法,先确定高度,再确定宽度,然后计算每个字符相对于左上角定点的位置; 最后全部输出;
感觉计算比较复杂;
然后想到用个递归,逐行打印,在打印某个字符前, 先计算它右下角字符的坐标位置, 然后根据这个位置打印它;。。。

大家讨论讨论实现细节。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-6-20 12:27:53 | 显示全部楼层
不错,很有趣!期待讨论!

其实很多很多的数学软件都可以的,只要有终端运行的功能即可。

ascii_art.png

推广言之,不仅仅是数学公式,还有图片,中文汉字,都可以用ascii直观展示。
这叫做 ascii art,我google到了几个链接,可惜打不开。


我见过有的人,把程序代码格式化成自己的照片。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-6-20 15:38:18 | 显示全部楼层
  1. +-------------------------------------------------------------------------------------+
  2. | >> pretty(diff(asin(x)*asin(1/x))+diff(asin(1/asin(x)))/diff(asin(1/x)))            |
  3. |                                                                                     |
  4. |                                                  2 /     1  \1/2                    |
  5. |                                                 x  |1 - ----|                       |
  6. |                                                    |      2 |                       |
  7. |      asin(1/x)        asin(x)                      \     x  /                       |
  8. |     ----------- - ---------------- + --------------------------------------         |
  9. |           2 1/2    2 /     1  \1/2          2       2 1/2 /       1    \1/2         |
  10. |     (1 - x )      x  |1 - ----|      asin(x)  (1 - x )    |1 - --------|            |
  11. |                      |      2 |                           |           2|            |
  12. |                      \     x  /                           \    asin(x) /            |
  13. | >>                                                                                  |
  14. |                                                                                     |
  15. +-------------------------------------------------------------------------------------+
复制代码
能看出matlab处理字符输出的规律ABC图高度一致:
  1. +------------------------------------------------------------------------+
  2. |         +-----------------+                                            |
  3. |         |                 |                                            |
  4. |         |                 |                                            |
  5. |         |                 |                                            |
  6. |         |   asin(1/x)     |                                            |
  7. | A =     |  -----------    |                                            |
  8. |         |        2 1/2    |                                            |
  9. |         |  (1 - x )       |                                            |
  10. |         |                 |                                            |
  11. |         |                 |                                            |
  12. |         |                 |                                            |
  13. |         +-----------------+                                            |
  14. |         +-------------------+                                          |
  15. |         |                   |                                          |
  16. |         |                   |                                          |
  17. |         |                   |                                          |
  18. |         |                   |                                          |
  19. | B =     |      asin(x)      |                                          |
  20. |         |  ---------------- |                                          |
  21. |         |   2 /     1  \1/2 |                                          |
  22. |         |  x  |1 - ----|    |                                          |
  23. |         |     |      2 |    |                                          |
  24. |         |     \     x  /    |                                          |
  25. |         +-------------------+                                          |
  26. |         +---------------------------------------------+                |
  27. |         | ;43                                         |                |
  28. |         |             2 /     1  \1/2                 |                |
  29. |         |            x  |1 - ----|                    |                |
  30. |         |               |      2 |                    |                |
  31. | C =     |               \     x  /                    |                |
  32. |         | --------------------------------------      |                |
  33. |         |        2       2 1/2 /       1    \1/2      |                |
  34. |         | asin(x)  (1 - x )    |1 - --------|         |                |
  35. |         |                      |           2|         |                |
  36. |         |                      \    asin(x) /         |                |
  37. |         +---------------------------------------------+                |
  38. +------------------------------------------------------------------------+
复制代码
我把2楼第二个思路拓展下。。
把一个式子看做用+-连接的若干个图形,
然后就是图形的拼接,
打印第一个图形,调用三个函数,
一个打印分子,一个打印分数线,一个打印分母,
打印分子,分母的时候,重复图形拼接策略。。。

想来不难,但实现起来挺难。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-3-29 05:53 , Processed in 0.052094 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表