- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是对我之前在此处发布的问题的扩展 -- Java Swing GUI for equation 5((θ/β) - cos(2πθ/β))
我已经根据帖子中提供的答案实现了 Java 程序,这是我的程序:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DisplacementFunctionNew extends JFrame {
public DisplacementFunctionNew() {
setLayout(new BorderLayout());
add(new CosGraph(), BorderLayout.CENTER);
}
public static void main(String[] args) {
DisplacementFunctionNew frame = new DisplacementFunctionNew();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(6000, 6000);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setTitle("SineWave");
}
class CosGraph extends JPanel {
public void paintComponent(Graphics g) {
int graphHeight = 5; // Declared this to set the height of graph based on the value given here.
super.paintComponent(g);
int xBase = 100;
int top = 100;
int yScale = 100;
int xAxis = 360;
int yBase = top + yScale;
g.drawLine(xBase, top, xBase, top + 2 * yScale);
g.drawLine(xBase, yBase, xBase + xAxis, yBase);
g.setColor(Color.red);
double maxY = 0;
for (int i = 0; i < 360; i++) {
maxY = Math.max(maxY, Math.abs(getValue(i)));
}
int x, y;
for (int i = 0; i < 360; i++) {
x = xBase + i;
y = yBase - (int) (getValue(i)*graphHeight / maxY * yScale);
g.drawLine(x, y, x, y);
}
}
private double getValue(int theta) {
int beta = 45;
double b = (theta / (double) beta);
double angle = 2 * Math.PI * (b);
double c = Math.cos(angle);
double s = (b - c);
return s;
}
}
}
现在在这个程序中我想要一个名为 graphHeight
的变量来帮助增加图形的高度。如果我将变量的值指定为 1
,那么我可以看到这样的输出:
现在,如果我尝试将高度增加到 5
,我会得到图形,但它显示的不是平滑的或连续的曲线,我得到的输出如下:
有人可以帮助我如何获得平滑连续曲线的输出吗?
最佳答案
您正在使用点绘制曲线。您在 x 轴上的每个位置放置一个点——这样做很有意义。
当图很小的时候,看起来还不错,因为这些点的y间隔比较小。但是,随着图形大小的增加,此缺陷变得更加明显。
这里的解决方法是用线条填充垂直空间。您有几个选项可以准确实现:
x(i), y(i)]
到 [x(i+1),y(i+1)]
画一条线 --这很简单,但可能看起来不像您想要的那样。x(i), y(i)]
到 [x(i),y(i+1)]
画一条线 -- 这是仍然很容易,但它不会很正确:你继续向上,这样你可能会偏离整个像素。x(i), y(i)]
画一条线到 [x(i),(y(i)+y(i+1))/2 ]
,然后从[x(i+1), (y(i)+y(i+1))/2]
到[x(i+1 ),y(i+1)]
-- 这是 1 应该做的(忽略抗锯齿),并且将是您可能的选项中最正确的。我会建议数字 3。请注意,您可以使用以下形式的循环来实现它:
int lastY = yBase - (int) (getValue(0)*graphHeight / maxY * yScale);
for (int i = 1; i < 360; i++) {
x = xBase + i;
y = yBase - (int) (getValue(i)*graphHeight / maxY * yScale);
g.drawLine(x-1, lastY, x-1, (y+lastY)/2);
g.drawLine(x, (y+lastY)/2, x, y);
}
如果一个像素的重叠让您感到困扰,您可以使其更复杂一些,例如第二行从 +/- 1 像素开始(取决于函数是增加还是减少)。
或者,您可以通过使用 for 循环手动绘制直线来实现数字 3,基本上编写 Bresenham 直线算法的特例版本。
关于用于等式 5((θ/β) - cos(2πθ/β)) 的 Java Swing GUI - 绘制连续图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077216/
我刚开始研究 C#,冗长的数学函数让我很烦。是否有标准的方法来编写 Cos(或任何其他 Math 函数)而不是 Math.Cos 而无需定义您自己的 Cos 函数? 最佳答案 切换到新的 Roslyn
我通过 R 运行 WolframAlpha Wolfram Alpha API from R 我的问题是,我需要将 wolfram 输出转换为 R 表达式。我在需要的地方添加了“*”,还有另一个问题
我遇到了一些应该很容易回答的问题,但我不能 Handlebars 指放在上面。自从我做了一些三角函数以来已经有一段时间了。 double cosValue = -2.7105054312E-20; /
如何重现此行为? https://isocpp.org/wiki/faq/newbie#floating-point-arith2 准确的说,在下面的代码中,参数x和y是相等的;它们可以等于 1.0
JavaScript 中的所有数学函数都使用弧度代替度数。然而,它们要么不相等,要么我离题太远。 从度数到弧度的转换是: var rad = angle * Math.PI / 180 90 度 An
这个问题已经有答案了: How can I get sin, cos, and tan to use degrees instead of radians? (6 个回答) 已关闭 9 年前。 cos
这是怎么回事?? 测试 sin 和 cos 函数以找出为什么在将我的坐标输出到 SVG 文件时我在错误的位置得到如此漂亮的定位。所以我做了这个测试代码,我可以预测答案是什么来找出原因。奇怪的是,没有任
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: C Build error when getting the value of sin() 我试图在这段时间内
在 Javascript 中使用 a.b(c) 或 [a.b][0](c) 是不同的,原因是 this 的绑定(bind)> 在 a.b 的代码执行期间是否发送给对象 a。 使用相同的推理 var z
这是一个很简单的问题,让我很困惑。 我收到一个源文件的以下错误,但另一个没有: 4 src/Source2.cpp:1466: error: no matching function for cal
如何只使用 sin 或 cos 而不是 Math.sin 或 Math.cos?我尝试导入 Math.* 但我想我可能需要对命名空间做一些事情? 最佳答案 import static java.lan
测试代码: #include #include const int N = 4096; const float PI = 3.1415926535897932384626; float cosin
代码片段1: from sympy import symbols, integrate, cos, pi from numpy import sqrt n = symbols('n', integer
我正在使用 Taylors series 来计算一个数字的 cos,对于小数字,该函数返回准确的结果,例如 cos(5) 给出 0.28366218546322663 。但是对于较大的数字,它会返回不
我是一个完全的编程初学者,我被分配了以下任务: 编写一个 C++ 程序,使用一系列内接和外接正多边形计算一对 π 的估计值。在不超过 30 步后停止,或者当外接多边形和内切多边形的周长之差小于 ε=1
我正在尝试使用余弦和正弦,但它们没有返回我期望的值。 #include #include #include int main() { float magnitudeForce;
我有一个作业要编写一个程序来通过 Maclaurin approximation 计算 cos(x) .但是,我必须为 cos(x) 使用一个函数,并使用另一个函数来计算 cos(x) 函数内的分母上
我正在尝试使用 Python2.7 对方程式进行数值求解。这是整个代码: from sympy import * from sympy import Symbol from sympy.solvers
因此,我正在尝试创建一个使用泰勒近似计算 cos(x) 的程序。 程序非常简单:用户输入一个参数 x(x 是以弧度为单位的角度)和一个 float ε,它是 cos(x) 值的精度。 基本上,程序唯一
我正在尝试将内部 cos() 函数调用插入 LLVM 传递。我在 FunctionPass 中的代码: std::vector arg_type; arg_type.push_back(Type::g
我是一名优秀的程序员,十分优秀!