当前位置: 首页 > 知识库问答 >
问题:

JavaSwing GUI用于方程5((θ/β) - cos(2πθ/β))

尉迟禄
2023-03-14

我正在尝试使用JavaSwing为数学方程5((θ/β)-cos(2πθ/β))创建一个GUI。

最初,我开始使用一个简单的余弦函数,并创建了GUI,它工作正常。这是我的余弦函数程序:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class SimpleCosWave extends JFrame {
    public SimpleCosWave() {
        setLayout(new BorderLayout());
        add(new CosGraph(), BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        SimpleCosWave frame = new SimpleCosWave();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setTitle("SineWave");
    }

    class CosGraph extends JPanel {
        public void paintComponent(Graphics g) {
            int xBase = 100;
            int top = 100; 
            int yScale = 100;
            int xAxis = 360; 

            int yBase = top + yScale;
            int x, y;

            g.drawLine(xBase, top, xBase, top + 2 * yScale);
            g.drawLine(xBase, yBase, xBase + xAxis, yBase);

            g.setColor(Color.red);

            for (int i = 0; i < xAxis; i++) {
                x = xBase + i;
                y =  yBase - (int) Math.cos(Math.toRadians(i)) * yScale;
                g.drawLine(x,y,x,y);
            }
        }
    }
}

这个程序工作正常,我可以在摇摆图形用户界面上得到cos图。

现在我尝试扩展这个程序来支持方程-5((θ/β)-cos(2πθ/β))其中θ的范围从0到360度,并且β的值是0

我更改了上述代码,以计算y坐标,从而支持如下等式:

y =  yBase - getValue(i) * yScale;

这里的方法是:

private int getValue(int theta) {
            int beta = 45;
            double b = (theta/beta);

            double angle = 2*Math.PI*(b);

            double c = Math.cos(angle);

            double result = 5*(b-c);
            return (int)result;
        }

当我做这个改变的时候,我没有得到任何正确的图形或波形,而是得到一条水平线。

有人能帮我在这个代码中哪里出错了吗?


共有2个答案

钦侯林
2023-03-14

替换:

double b = (theta/beta);

具有

double b = (theta/(double)beta);

看看这是否有帮助。

请参见如何使2整数的除法产生一个浮点数而不是另一个整数?更多信息。

齐阎宝
2023-03-14

正如Wim Delauwe所指出的,当一个int除以一个int时,就是整数除法。例如,45/90导致int值为零。但是,45.0/90.0的计算结果为0.5的双倍值。如果其中一个操作数是双精度的,则另一个操作数强制为双精度的,因此45/90.0也将产生0.5。

类似地,由于值处于相对较小的范围内,因此在计算出与该值对应的确切像素之前,不应将值截断为整数,以保持精度。因此,getValue的返回类型应该是double,并且应该返回result,而不强制转换它。

然后,在图形代码中,您将执行以下转换:

y = yBase - (int) (getValue(i) * yScale);

然而,正如DavidWallace指出的,getValue(i)似乎返回的值大约在-5到43之间。将这些值乘以yScale将创建一个垂直拉伸的图形。

您可以只进行硬代码规范化:

y = yBase - (int) (getValue(i) / 43.0 * yScale);

我会选择计算最大的y值,并将其标准化:

double maxY = 0;
for (int i = 0; i < xAxis; i++) {
    maxY = Math.max(maxY, Math.abs(getValue(i)));
}

for (int i = 0; i < xAxis; i++) {
    x = xBase + i;
    y = yBase - (int) (getValue(i) / maxY * yScale);
    g.drawLine(x,y,x,y);
}
 类似资料:
  • 问题内容: 我正在尝试使用Java Swing创建数学方程式的GUI 。 最初,我开始使用简单的余弦函数并创建了GUI,并且它可以正常工作。这是我的余弦函数程序: 这个程序运行良好,我可以在Swing GUI上获得cos图。 现在,我正在尝试扩展该程序以支持该方程式- 其中from 和of的范围是这样的。 我已经更改了上面的代码以计算坐标来支持该方程,如下所示: 这里的方法是: 当我进行此更改时,

  • 这是我在这里发布的上一个问题的扩展——方程式5((θ/β)-cos(2πθ/β))的Java Swing GUI 我已经根据帖子中提供的答案实施了Java计划,这里是我的计划: 现在在这个程序中,我想要一个名为的变量,它有助于增加图形的高度。如果将变量的值设为,则可以看到如下输出: 现在,如果我尝试将高度增加到,那么我会得到图形,但它不是平滑或连续的曲线,我会得到如下输出: 有人能帮我如何获得输出

  • cos

    cos(取余玄函数值) 相关函数 acos,asin,atan,atan2,sin,tan 表头文件 #include<math.h> 定义函数 double cos(double x); 函数说明 cos()用来计算参数x 的余玄值,然后将结果返回。 返回值 返回-1至1之间的计算结果。 附加说明 使用GCC编译时请加入-lm。 范例: #include<math.h> main() { dou

  • 描述 (Description) 该方法返回指定double值的余弦值。 语法 (Syntax) double cos(double d) 参数 (Parameters) 这是参数的细节 - d - 此方法接受double数据类型的值。 返回值 (Return Value) 此方法返回指定double值的余弦值。 例子 (Example) public class Test { publ

  • cos

    此方法返回指定值的余弦值。 语法 (Syntax) cos(X) 参数 (Parameters) X - 为余弦函数指定一个值。 返回值 (Return Value) 返回值是表示余弦值的浮点值。 例如 (For example) -module(helloworld). -import(math,[cos/1]). -export([start/0]). start() -> C

  • 该方法返回指定double值的余弦值。 语法 (Syntax) double cos(double d) 参数 (Parameters) d - 此方法接受double数据类型的值。 返回值 (Return Value) 此方法返回指定double值的余弦值。 例子 (Example) 以下是此方法的使用示例 - class Example { static void main(Strin