这是为了做作业。
我们必须创建一个符合MVP原理的JavaFX应用程序,该应用程序显示一个静态正弦波,并使用滑块控制所述正弦波的属性。
这些滑块是幅度,频率,相位和缩放。通过演示者,它们被绑定到构成正弦波的模型中的属性。然后,这些人员将具有侦听器以根据更改来更新模型。
为绘制正弦波,我选择了一条折线,并计算了模型中可观察到的每个点的X和Y坐标:
for (double x = -360; x < 360; x++) {
data.add(x);
data.add(Math.sin(frequency.doubleValue() * x + phase.doubleValue()) * amplitude.doubleValue());
}
然后,我通过演示者到达此数据集并进入我的视图,在这里我将每个点都指定给折线:
public void setPoints(ObservableList<Double> list) {
functionLine.getPoints().clear();
functionLine.getPoints().addAll(list);
double temp;
for(int i = 0;i<functionLine.getPoints().size();i++) {
//separate x from y coordinates
if (i % 2 == 0) {
temp = functionLine.getPoints().get(i);
functionLine.getPoints().set(i, temp + (display.getWidth() / 2)); // + displaywidth/2 to get it to the center of the graph
} else {
temp = functionLine.getPoints().get(i);
functionLine.getPoints().set(i, temp + ((display.getHeight() / 2))); //same as above
}
}
}
由于for循环和接口比较滞后,这也表现不佳,但这不是我在这里的原因。 这是当前的样子。折线和图形(两条线)位于其自己的窗格中:
现在,我已经尝试在不增加实际线条宽度的情况下对此进行缩放,但是我不知道如何在图形中心周围正确缩放。显然,我必须变换每个点的坐标,但是我不知道如何。我已经尝试了几件事,但是没有达到我想要的。
感觉自己应该可以自己做一些事情,但显然我做不到。
任何帮助将不胜感激。