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

方程式5((θ/β)-cos(2πθ/β))的Java Swing GUI绘制连续图

呼延臻
2023-03-14

这是我在这里发布的上一个问题的扩展——方程式5((θ/β)-cos(2πθ/β))的Java Swing GUI

我已经根据帖子中提供的答案实施了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,那么我会得到图形,但它不是平滑或连续的曲线,我会得到如下输出:

有人能帮我如何获得输出为平滑的连续曲线吗?

共有2个答案

施玉宸
2023-03-14

使用graphHeight定义下一个要绘制的点的y。绘制线(x,y,x,y) 。绘制点之间的距离将与graphHeight变量相关

解明辉
2023-03-14

您正在使用点绘制曲线。你在x轴上的每个位置放置一个点——这是有意义的。

当图形很小时,它看起来很好,因为这些点的y间距相对较小。但是,随着图形大小的增加,此缺陷变得更加明显。

这里的解决方案是用线填充垂直空间。您有几个选项可以精确实现此功能

  1. 从[x(i),y(i)][x(i 1),y(i 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个像素开始(取决于函数是增加还是减少)。

或者,您可以通过手动绘制线条来实现数字3,使用for循环,并基本上编写Bresenham线条算法的特例版本。

 类似资料:
  • 问题内容: 我正在尝试使用Java Swing创建数学方程式的GUI 。 最初,我开始使用简单的余弦函数并创建了GUI,并且它可以正常工作。这是我的余弦函数程序: 这个程序运行良好,我可以在Swing GUI上获得cos图。 现在,我正在尝试扩展该程序以支持该方程式- 其中from 和of的范围是这样的。 我已经更改了上面的代码以计算坐标来支持该方程,如下所示: 这里的方法是: 当我进行此更改时,

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

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

  • 我不明白为什么表条目的标志被原样使用。例如,考虑具有α-β修剪和转置表的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 时才使用条目 我想存储每个位置的最佳移动,以便在搜索停止后使用它进行移动排序和提取最佳移动。在纯