% Wave Simulation Based On Ocean Wave Spectrum
clc
clear all
close all
% output (x,y,z) represents the point coordinates of the waves
%---------------------------------parameters----------------------------------------------
time = 100;
g = 9.8; % gravitational acceleration constant
m = 5; % number of segment of theta
n = 10; % number of segment of omg
T = 12.5; % average period of wave
% area of the sea simulated: 1500m * 1500m
x = [0:15:1500];
y = [0:15:1500];
% other parameters
omg_0 = 2 * pi / T;
min_omg = 0.3;
max_omg = 0.8;
d_omg = (max_omg - min_omg) / n;
d_theta = pi / m;
[x,y] = meshgrid(x,y);
z = zeros(size(x));
v=1;
%---------------------------------calculating----------------------------------------------
for i = 1:n
omg_i = (rand + i - 1) * d_omg + min_omg;
k_i = omg_i^2 / g;
for j = 1:m
theta_j = -pi / 2 + d_theta * j;
eps = pi / 2 * rand;
temp = k_i * x * cos(theta_j) + k_i * y * sin(theta_j) - omg_i * time + eps;
S_omg = 6.65e-4 * g^2 * exp(-0.35* (g / (v * omg_i)^4) ) / omg_i^5;
p = 0.5 + 0.82 * exp(-0.5 * (omg_i / omg_0)^4);
q = 0.32 * exp(-0.5 * (omg_i / omg_0)^4);
fi_u = 1 / pi * (1 + p * cos(2 * theta_j) + q * cos(4* theta_j));
z = cos(temp) * sqrt(2 * S_omg * fi_u * d_omg * d_theta) + z; % height of the wave
end
end
%---------------------------------plotting----------------------------------------------
surf(x,y,z);
title('Wave Simulation');
x1=xlabel('x(m)');
x2=ylabel('y(m)');
x3=zlabel('Height(m)');
set(x1,'Rotation',30);
set(x2,'Rotation',-30);
colormap(jet);