我正在尝试使用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 时才使用条目 我想存储每个位置的最佳移动,以便在搜索停止后使用它进行移动排序和提取最佳移动。在纯