我只是想知道如何以有效的方式绘制像X^2 + 2 * X^4 + ... 这样的多项式,并使它看起来像一个真实的。我的意思是力量是向上剧本等等。爪哇 - 绘图多项式
回答
如果你有一个好的Unicode字体的环境,你可以相对容易地创建你自己的多项式toString()
。 Unicode有所有Arabic numerals defined as superscript,在Superscripts and Subscripts block大部分:
x⁰: U+2070
x¹: U+00B9 // Not in U207x range!
x²: U+00B2 // Not in U207x range!
x³: U+00B3 // Not in U207x range!
x⁴: U+2074
x⁵: U+2075
x⁶: U+2076
x⁷: U+2077
x⁸: U+2078
x⁹: U+2079
x⁻: U+207B
因此,构建x⁻⁴²(X^-42)将通过打印U+0078 U+207B U+2074 U+00B2
是可能的。
请注意,用于打印的字体必须定义这些字符。
好,以帮助您开始,这里就是你需要在高水平上做什么:
- 扩展的JPanel。这个新类(可以说PolynominalPanel扩展JPanel)将绘制多项式。
- 重写paintComponent(Graphics g)方法
- 使用“图形”参数设置您选择的线条行为(转换为Graphics2D并使用setStroke())。
- 定义一个将X和Y值转换为JPanel坐标值的新类。这允许您以统一的方式翻译,镜像,旋转...等等。 (因此,对于多项式中的每个X和Y,使用您选择的公式对其进行变换,以使多项式被绘制在JPanel的边界内)。这里的要点是您要将多项式的一部分映射到您的PolynominalPanel边界。这是您感兴趣的多项式的一部分,这取决于多项式。
- 以离散方式对多项式进行采样。例如,您可以对每个X像素进行采样,或者可以以较低的采样率对其进行采样以获得更好的性能。 (尽管每个像素应该很好)
- 使用Graphics.drawLine()方法绘制线条。您应该使用之前采样的转换后的值。
瞧,你完成了!
希望这会有所帮助!
如果你想要一个API,也许你可以重用一些JMathTools的功能。它不允许绘制多项式,但它确实提供具有移动,平移和旋转控制的面板。它也允许你添加线条到你的情节。所以基本上,你仍然必须将多项式分解成几行,但这比上面描述的要少。我以前用它来绘制线条,如果你只是想要一个快速的可视化效果,它会很好用。 – Tovi7 2011-04-14 10:26:32
Unicode方法具有相当大的吸引力,但它需要字体支持。作为替代,考虑How to Use HTML in Swing Components,例如
new JLabel("<html><i>x</i><sup>2</sup> + <i>x</i><sup>4</sup></html>")
另请参见['HTMLFractions'](http:// stackoverflow的.com /一个/230513分之7452088)。 – trashgod 2011-12-04 20:58:39
- 1. 爪哇 - 恢复的JFrame /绘图
- 2. 爪哇 - 在DAL项目
- 3. 爪哇 - 并行
- 4. 爪哇 - 多接受输入”
- 5. 爪哇 - 多或声明
- 6. 爪哇命中公式
- 7. 爪哇UDP数据格式
- 8. 爪哇:enum toString()
- 9. 爪哇谷歌地图
- 10. ScrollBar爪哇Swing图像
- 11. 爪哇 - 减去从图像
- 12. 爪哇 - 图像闪烁
- 13. 硒,爪哇,waitForCondition
- 14. 爪哇优化
- 15. 爪哇的StringIndexOutOfBoundsException
- 16. 爪哇OpenGL画一颗星
- 17. 爪哇JPG到Png
- 18. 爪哇thesauraus
- 19. 爪哇 - 在
- 20. 爪哇 - 由
- 21. 爪哇排序
- 22. 爪哇 - 每行
- 23. 爪哇从长
- 24. 爪哇 - 不承认
- 25. 爪哇用空格
- 26. 爪哇 - 从JList的
- 27. 爪哇mouseDragged逻辑
- 28. 爪哇从文件
- 29. 爪哇类澄清
- 30. 爪哇 - 空的ResultSet
*功率高达脚本* - 这是一个隐藏的提示,将输入到你的算法是在某种格式的文本或HTML的一个多项式? – 2011-04-14 10:52:26
如何存储多项式? – 2011-04-14 11:04:28
从我接受的答案中,我想你想*格式化公式*,但从这个问题我会想你想绘制一个函数图。请尝试在未来提出更清晰的问题。 – 2011-04-14 12:40:36