2011-04-14 101 views
3

我只是想知道如何以有效的方式绘制像X^2 + 2 * X^4 + ... 这样的多项式,并使它看起来像一个真实的。我的意思是力量是向上剧本等等。爪哇 - 绘图多项式

+0

*功率高达脚本* - 这是一个隐藏的提示,将输入到你的算法是在某种格式的文本或HTML的一个多项式? – 2011-04-14 10:52:26

+1

如何存储多项式? – 2011-04-14 11:04:28

+1

从我接受的答案中,我想你想*格式化公式*,但从这个问题我会想你想绘制一个函数图。请尝试在未来提出更清晰的问题。 – 2011-04-14 12:40:36

回答

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是可能的。

请注意,用于打印的字体必须定义这些字符。

+0

这就是我正在寻找的:D:D非常感谢你 – Ahmad 2011-04-14 11:05:54

+0

我搜索了他们..但我找到了00B2和00B3 ..我认为这是唯一的那里:D – Ahmad 2011-04-14 11:06:22

+0

mmmm ...你可以推荐一个字体?因为所有的207x不工作:( – Ahmad 2011-04-14 11:09:03

0

你是什么意思:绘制公式或绘制图形。看来你想要前者。你可以看看LaTex。

+0

公式我的意思是...我可以在java中应用乳胶? – Ahmad 2011-04-14 10:13:15

+0

啊,真的,你添加了java和swing标签。尽管你在问题中没有提到他们。我不知道在Swing组件中显示LaTex的方式,恐怕。 – Puce 2011-04-14 10:17:04

+0

使用'dvipng'并在您的Swing组件中显示产生的PNG文件。 – 2011-04-14 12:41:46

1

好,以帮助您开始,这里就是你需要在高水平上做什么:

  • 扩展的JPanel。这个新类(可以说PolynominalPanel扩展JPanel)将绘制多项式。
  • 重写paintComponent(Graphics g)方法
  • 使用“图形”参数设置您选择的线条行为(转换为Graphics2D并使用setStroke())。
  • 定义一个将X和Y值转换为JPanel坐标值的新类。这允许您以统一的方式翻译,镜像,旋转...等等。 (因此,对于多项式中的每个X和Y,使用您选择的公式对其进行变换,以使多项式被绘制在JPanel的边界内)。这里的要点是您要将多项式的一部分映射到您的PolynominalPanel边界。这是您感兴趣的多项式的一部分,这取决于多项式。
  • 以离散方式对多项式进行采样。例如,您可以对每个X像素进行采样,或者可以以较低的采样率对其进行采样以获得更好的性能。 (尽管每个像素应该很好)
  • 使用Graphics.drawLine()方法绘制线条。您应该使用之前采样的转换后的值。

瞧,你完成了!

希望这会有所帮助!

+0

如果你想要一个API,也许你可以重用一些JMathTools的功能。它不允许绘制多项式,但它确实提供具有移动,平移和旋转控制的面板。它也允许你添加线条到你的情节。所以基本上,你仍然必须将多项式分解成几行,但这比上面描述的要少。我以前用它来绘制线条,如果你只是想要一个快速的可视化效果,它会很好用。 – Tovi7 2011-04-14 10:26:32

2

Unicode方法具有相当大的吸引力,但它需要字体支持。作为替代,考虑How to Use HTML in Swing Components,例如

new JLabel("<html><i>x</i><sup>2</sup> + <i>x</i><sup>4</sup></html>") 

Polynomial.png

+0

另请参见['HTMLFractions'](http:// stackoverflow的.com /一个/230513分之7452088)。 – trashgod 2011-12-04 20:58:39