java - 如何使用正弦/余弦波返回振荡数

标签 java trigonometry

我是 Java 编程的新手,我正在使用 Android 编写 Java 1.6。

我有一个简单的函数,可以使数字在 0 到 200 之间上下波动。我想将其放入正弦函数中,但我一直在尝试,结果总是出错。

我希望我的程序通过正弦波 y 轴更新一个 int (Number1)。

有什么想法可以将以下逻辑更改为正弦函数吗? (忽略第二个数字)

代码:

private int Number1 = 150;
private int Number2 = 0;
private int counter = 0;     

  public void updateNumbers() {   
            if (counter == 0) {
                if (Number1 < 200) {
                    Number1 = Number1 + 50;
                    Number2 = Number2 - 50;
                    if (Number1 >= 200) {
                        counter = 1;
                    }
                }               
            } else if (counter == 1) {
                if (Number2 < 200) {                                       
                    Number1 = Number1 - 50;
                    Number2 = Number2 + 50;               
                    if (Number2 >= 200) {
                        counter = 0;
                    }
                }
            }
        }           

最佳答案

好的,那么您要做的是构建一个介于 0 和 200 之间的正弦波,但周期是多少?您是否希望它每 8 个调用循环一次?

这个怎么样,利用内置的 Java Math.sin 函数:

private static final double PERIOD = 8; // loop every 8 calls to updateNumber
private static final double SCALE = 200; // go between 0 and this

private int _pos = 0;
private int Number1 = 0;

public void updateNumber() {
    _pos++;
    Number1 = (int)(Math.sin(_pos*2*Math.PI/PERIOD)*(SCALE/2) + (SCALE/2));
}

基本上,我们保留一个变量来计算我们已完成的更新次数,并对其进行缩放以匹配正弦波的周期 2*PI。它充当“真实”sin 函数的输入,为我们提供介于 -1 和 1 之间但具有正确频率的值。然后,为了实际设置数字,我们只需将其缩放到 -100 到 100 之间,然后加上 100 以使其从一开始就处于您想要的 0-200 范围内。

(如果 double 适合你,你不必将数字转换为 int,我只是与你上面写的精神保持一致。)

关于java - 如何使用正弦/余弦波返回振荡数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3671160/

相关文章:

java - 类型无法创建 List<FooClass> 的通用数组

java - 如何设置 JPA EntityManager 查询的超时时间

Python:尽可能高效地使用三角函数估计 Pi

java - main 中对象的方法

java - 如何通过 Java 使用 Google 日历 API?

java - JTable - 对渲染值进行排序

ios - 计算与地板的角度

OpenCV三角函数: find object closest to the camera

c# - 播放未知时间的正弦波

java - 如何根据加速度估计角度以及根据 3 维角度估计加速度?