找回密码
 欢迎注册
查看: 16861|回复: 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-11-22 01:33 , Processed in 0.030887 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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