xxxxxxxxxx
82
// Additive Waves
// The Nature of Code
// The Coding Train / Daniel Shiffman
// https://youtu.be/okfZRl4Xw-c
// https://thecodingtrain.com/learning/nature-of-code/3.7-additive-waves.html
// https://editor.p5js.org/codingtrain/sketches/qcRsZ_O5a
let waves = [];
let ship;
let slider_period;
let slider_amp;
let ship_data;
let ship_img;
let min_H = 1;
let max_H = 3;
let min_T = 5;
let max_T = 20;
let factor = 3;
function preload() {
RollData = loadJSON('Roll_RAO.json');
HeaveData = loadJSON('Heave_RAO.json');
ship_img = loadImage('Ship emoji.png');
}
function setup() {
wave = new AiryWave(random(min_H, max_H), random(min_T,max_T));
ship = new Ship();
ship.load_RollData(RollData);
ship.load_HeaveData(HeaveData);
ship.load_img(ship_img);
ship.calcRollRAO();
ship.calcHeaveRAO();
createCanvas(600, 400);
slider_period = createSlider(min_T, max_T, wave.T);
slider_period.position(10, 10);
slider_period.size(80);
slider_amp = createSlider(min_H, max_H, wave.a);
slider_amp.position(10, 30);
slider_amp.size(80);
}
function draw() {
frameRate(50);
background(0);
for (let x = 0; x < width; x += 5) {
let y = 0;
// let factor = 5;
y += factor * wave.evaluate(x);
noStroke();
fill('#128ECC');
ellipse(x, y + height / 2, 4);
}
let T = slider_period.value();
let a = slider_amp.value();
wave.update();
wave.update_wave(a, T);
let period_text = 'Wave period: ' + T + ' sec'
let wave_height_text = 'Wave height: ' + a + ' m'
text(period_text, 100, 25);
text(wave_height_text, 100, 45);
ship.calcRollResponse(wave);
ship.calcHeaveResponse(wave);
ship.draw(wave);
}