当前位置: 首页 > 面试题库 >

方程5((θ/β)-cos(2πθ/β))的Java Swing GUI

欧阳狐若
2023-03-14
问题内容

我正在尝试使用Java Swing创建数学方程式的GUI 5((θ/β) - cos(2πθ/β))

最初,我开始使用简单的余弦函数并创建了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);
            }
        }
    }
}

这个程序运行良好,我可以在Swing GUI上获得cos图。

现在,我正在尝试扩展该程序以支持该方程式- 5((θ/β) - cos(2πθ/β))其中θfrom 0 to 360 degrees和of的范围β是这样的0 < β < 360

我已经更改了上面的代码以计算y坐标来支持该方程,如下所示:

y =  yBase - getValue(i) * yScale;

这里的getValue方法是:

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;
        }

当我进行此更改时,我没有得到任何合适的图形或波形,而是得到了一条水平线。

有人可以帮我在这段代码中我做错的地方吗?


问题答案:

正如Wim Delauwe指出的那样,将一个整数除以一个整数时,您正在执行整数除法。例如,45 / 90结果int值为零。但是,45.0 / 90.0求值为0.5的两倍。如果一个操作数是双精度数,则另一个被强制为双精度数,因此45 / 90.0也将产生0.5。

同样,由于您的值在相对较小的范围内,因此,在计算出与该值相对应的确切像素之前,请勿将其截断为整数,以保持精度。因此,getValue应该具有double的返回类型,并且应该在result不强制转换的情况下返回。

然后,在您的绘图代码中,进行强制转换:

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

但是,正如David
Wallace指出的那样,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);
}


 类似资料:
  • 我正在尝试使用JavaSwing为数学方程创建一个GUI。 最初,我开始使用一个简单的余弦函数,并创建了GUI,它工作正常。这是我的余弦函数程序: 这个程序工作正常,我可以在摇摆图形用户界面上得到cos图。 现在我尝试扩展这个程序来支持方程-其中的范围从,并且的值是

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

  • 本文向大家介绍β测试是什么?相关面试题,主要包含被问及β测试是什么?时的应答技巧和注意事项,需要的朋友参考一下 是软件的多个用户在实际使用环境下进行的测试。开发者通常不在当前。不能由程序员和测试员来完成。因此是开发者无法控制的环境下进行的软件现场应用。同时,用户记录下所有问题,包括真实的以及主管认定的,定期向开发者报告,开发者做修改,最终将软件产品交付给全体用户使用。Β测试更注重于产品的支持性,包

  • 我不明白为什么表条目的标志被原样使用。例如,考虑具有α-β修剪和转置表的Negamax的伪代码,并集中于TT部分。 没关系。如果条目包含确切值的下限,我们尝试从左侧缩小窗口,依此类推。 而这部分我不明白。如果值太小,为什么我们设置上限标志?值位于搜索窗口的左侧 - 它小于已知的下限 - alpha。所以看起来值应该是一个下限。 从我的测试和每个人都使用那个版本的事实来看,我肯定是错的。但我不明白为

  • 我在为游戏筷子做一个C程序。 这是一个非常简单的游戏,总共只有625个游戏状态(如果考虑到对称性和不可到达的状态,它甚至更低)。我读过minimax和alpha-beta算法,主要是针对tic-tac-toe的,但我遇到的问题是,在tic-tac-toe中,不可能循环回到以前的状态,而这在筷子中很容易发生。因此,当运行代码时,它将以堆栈溢出结束。 我通过添加以前访问过的州的标志来解决这个问题(我不

  • 我正在尝试用换位表实现增强的α-β-最小-最大修剪。我使用这个伪代码作为参考: http://people.csail.mit.edu/plaat/mtdf.html#abmem 这个算法有三个问题: > 我相信我应该在每个保存的换位表条目中存储深度(=到叶级的距离),并且仅在 entry.depth 时才使用条目 我想存储每个位置的最佳移动,以便在搜索停止后使用它进行移动排序和提取最佳移动。在纯