【问题标题】:Java - drawing PolynomialsJava - 绘制多项式
【发布时间】:2011-08-05 09:58:28
【问题描述】:

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

【问题讨论】:

  • powers is up-script - 这是一个隐藏的提示,您的算法的输入是某种格式化文本或 html 中的多项式?
  • 如何存储多项式?
  • 从接受的答案我想你想格式化公式,但从这个问题我会认为你想绘制函数图。以后请尽量提出更清晰的问题。

标签: java swing unicode superscript


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您有一个具有良好 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
    

    因此,可以通过打印 U+0078 U+207B U+2074 U+00B2 来构造 x⁻⁴² (x^-42)。

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

    【讨论】:

    • 我搜索了它们 .. 但我找到了 00B2 和 00B3 .. 我认为这是那里唯一的 :D
    • mmmm ...你能推荐一种字体吗?因为所有 207x 都无法正常工作:(
    【解决方案3】:

    好的,为了帮助您入门,以下是您需要在高层次上执行的操作:

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

    瞧,你完成了!

    希望这会有所帮助!

    【讨论】:

    • 如果您想要一个 API,也许您可​​以重用一些 JMathTools 功能。它不允许您绘制多项式,但它确实提供了具有移动、平移和旋转控件的面板。它还允许您在绘图中添加线条。所以基本上你仍然需要把你的多项式分成几行,但这比我上面描述的要少。我以前用它来画线,如果你只是想要一个快速的可视化效果,它效果很好。
    【解决方案4】:

    什么意思:画公式还是画图。看来你想要前者。你可以看看 LaTex。

    【讨论】:

    • 啊,没错,你添加了 java 和 swing 标签。不过,您没有在问题中提及它们。恐怕我不知道在 Swing 组件中显示 LaTex 的方法。
    • 使用 dvipng 并在 Swing 组件中显示生成的 PNG 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2020-05-23
    • 2020-05-08
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多