Java - 绘制多项式

3

我想知道如何以高效的方式绘制类似于X^2+2*X^4+...的多项式,并使其看起来像真实的多项式。我的意思是幂是上标。


“powers is up-script” - 这是一个隐藏的提示吗?您的算法输入是一种格式化文本或HTML中的多项式吗? - Andreas Dolk
1
你如何存储多项式? - Anders Lindahl
1
从被接受的答案来看,我想你想要格式化公式,但从问题中我认为你想要绘制函数的图形。请尽量在以后提出更清晰的问题。 - Paŭlo Ebermann
4个回答

4
如果您的环境具有良好的Unicode字体,您可以相对容易地创建自己的多项式toString()。Unicode拥有所有定义为上标的阿拉伯数字, 其中大部分位于上下标块
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

因此,通过打印U+0078 U+207B U+2074 U+00B2,可以构建x⁻⁴²(x^-42)。
请注意,您用于打印的字体必须定义这些字符。

我搜索了它们...但我只找到了00B2和00B3...我以为这是唯一的两个 :D - Ahmad
你能推荐一个字体吗?因为所有207x的字体都不起作用 :( - Ahmad

2
Unicode方法具有相当大的吸引力,但需要字体支持。作为替代方案,考虑使用HTML在Swing组件中实现,例如如何在Swing组件中使用HTML
new JLabel("<html><i>x</i><sup>2</sup> + <i>x</i><sup>4</sup></html>")

Polynomial.png


1

好的,为了帮助你入门,以下是你需要从高层次上完成的步骤:

  • 扩展一个JPanel。这个新类(假设叫PolynominalPanel extends JPanel)将会绘制你的多项式。
  • 覆盖paintComponent(Graphics g)方法。
  • 使用“Graphics”参数来设置你选择的线条样式(转换为Graphics2D并使用setStroke()方法)。
  • 定义一个新类,将X和Y值转换为你的JPanel坐标系中的值。这样可以以统一的方式平移、镜像、旋转等所有点。(因此,对于多项式中的每个X和Y,使用你选择的公式进行变换,使得多项式在JPanel的边界内绘制)。重点是要将多项式的一部分映射到PolynominalPanel的边界上。这取决于多项式。
  • 以离散的方式对多项式进行采样。例如,你可以为每个X像素采样,或者可能为了提高性能,你可以以较低的速率进行采样。(虽然每个像素应该没问题)
  • 使用Graphics.drawLine()方法绘制线条。你应该使用之前采样的转换值。

完成了!

希望这有所帮助!


如果你需要一个API,也许可以重用一些JMathTools的功能。它不允许你绘制多项式,但它提供了具有移动、平移和旋转控件的面板。它还允许你向你的图表中添加线条。所以基本上你仍然需要将你的多项式分解成线条,但比我上面描述的要少一些工作量。我以前用它来画线条,如果你只是想要一个快速的可视化效果,它的效果很好。 - Tovi7

0
你的意思是:绘制公式还是绘制图形?看起来你想要前者。你可以看一下LaTex。

啊,没错,你添加了Java和Swing标签。不过在问题中你没有提到它们。恐怕我不知道如何在Swing组件中显示LaTex。 - Puce
使用 dvipng 并在您的 Swing 组件中显示生成的 PNG 文件。 - Paŭlo Ebermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接