- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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πθ/β))
其中 θ
范围从 0 to 360 degrees
和 β
的值是这样的 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 指出的那样,当用一个 int 除以一个 int 时,您进行的是整数除法。例如,45/90
导致 int 值为零。但是,45.0/90.0
的计算结果为 double 值 0.5。如果其中一个操作数是 double ,则另一个被强制转换为 double ,因此 45/90.0
也将产生 0.5。
同样,由于您的值在相对较小的范围内,因此在计算出与该值对应的确切像素之前,您不应将值截断为整数,以保持精度。因此,getValue
的返回类型应该是 double,并且它应该返回 result
而不是转换它。
然后,在您的绘图代码中,您将进行转换:
y = yBase - (int) (getValue(i) * yScale);
但是,正如 David Wallace 指出的那样,getValue(i) 似乎返回的值大约在 -5 到 +43 之间。将这些值乘以 yScale 将创建一个高度垂直拉伸(stretch)的图形。
你可以硬编码规范化:
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);
}
关于等式 5((θ/β) - cos(2πθ/β)) 的 Java Swing GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075431/
我正在尝试建立一个模型,该模型将根据是否存在某些组件(在我的情况下为流体端口)具有略微不同的方程。 如下代码将不起作用: parameter Boolean use_component=false;
首先采用,kludge 解决方案,sentinel 方法(您的程序必须不允许输入 sentinel 值): select coalesce(a, -2147483648) = coalesce(b,
我有一个类型族,它确定某物是否位于类型级列表的开头。 type family AtHead x xs where AtHead x (x ': xs) = True AtHead y
我试图找出为什么在下面的方法中,数组“8”中的最后一个值会满足“(8 & 7) == 0”的 where 子句。 public class Test { public static voi
我是 C 语言的初学者。我正在使用在线示例代码并尝试分析以下内容, int x = 0, y = 16; *x_ptr = &x 这是我要确保我在语法上理解的第二行。我刚刚遇到指针的概念,并试图从概念
我想知道geom_density()到底在做什么,所以我证明了图的合理性,以及是否有任何方法可以提取为绘制的每条曲线生成的函数或点。 谢谢 最佳答案 键入get("compute_group", gg
我试图用 Haskell 实现一个 Braun 树,定义如下: {-# LANGUAGE GADTs #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyK
==有什么区别和 === ? 松散到底是怎么做的==对比工作? 严格怎么做===对比工作? 什么是一些有用的例子? 最佳答案 ==之间的区别和 === 松散的区别==相等运算符和严格 ===相同的运算
==有什么区别和 === ? 松散到底是怎么做的==对比工作? 严格怎么做===对比工作? 什么是一些有用的例子? 最佳答案 ==之间的区别和 === 松散的区别==相等运算符和严格 ===相同的运算
在理解下面的代码中发生了什么时遇到问题。数组 c 和 d 的行为是我所期望的。但是 a 和 b 是怎么回事? (我也用普通的标量变量尝试过这个,在任何一种情况下都没有发生令人惊讶的事情。) 输出被复制
我正在尝试使用 Java Swing 为数学方程式创建一个 GUI 5((θ/β) - cos(2πθ/β)) . 最初我开始使用一个简单的余弦函数并创建了 GUI,它工作正常。这是我的余弦函数程序:
我正在尝试将这条曲线作为我目前正在开发的一款小游戏的升级系统的一部分。方程如下 f(x) = -e^-((-log(7)/100)*(100-x))+7 在python中可以定义为 f=lambda
我是一名优秀的程序员,十分优秀!