背景
昨天想着在船舶领域理想圆的船舶避让行为评价上进行优化,将理想圆优化成四元船舶领域,会更加贴合实际要求。
在csdn里面也有四元船舶领域的py代码,但他没直接画出来,使得python新手不好改,那我就出一个matlab版的四元船舶领域代码还原。
供大家参考,代码通俗易懂,不足之处还请多多批评指正。
学习内容
提示:周壮壮《基于四元船舶领域的船舶危险度模型》
昨天昨天还原周壮壮的论文公式,搞半天,找了其他论文才发现原来他公式错了。
还原公式就是以下三张截图
复现思路
1、代码输入仅需船舶的航速和船长,这里航速可以用m/s,船长用m,这样输出四元船舶领域前后左右的距离单位就是米
2、f(x,y)=… 这其实后面的就是椭圆公式,将R_fore、R_aft、R_starb、R_port和xy四个象限的正(负)号代进去就得到椭圆的长短轴ab参数
例:
3、用t变量为角度,分四个象限[0,90]、[90,180]、[180,270]、[270,360],用x=acosd(t)和y=bsind(t)得到四个椭圆1/4的xy坐标(可分别画出来)
4、将四个象限的xy汇总成x_all和y_all作为自定义函数输出
5、在另一个.m文件调用这个quaternion_ship_domain函数,用plot一次性画出四元船舶领域图
Matlab代码
提示:自定义函数
%% 代码为了给理想圆船舶领域优化成四元船舶领域 2024.1.4
% 公式参考《基于四元船舶领域的船舶碰撞危险度模型》周壮壮
% 输入船舶航速V和船长L
% 文件名 quaternion ship domain
% clc;clear
% close all
% 1 kn 约 0.514 m/s
function [x_all,y_all]= quaternion_ship_domain(L,V)
%% 计算参数
% V = 5.14 % 航速
% L = 200 % 船长
%% 第1象限
a1 = R_starb
b1 = R_fore
t = 0:90;
x1 = a1 * cosd(t);
y1 = b1 * sind(t);
% 绘制椭圆
% plot(x1, y1, 'LineWidth', 2);hold on
%% 第2象限
a2 = R_port
b2 = R_fore
t = 90:180;
x2 = a2 * cosd(t);
y2 = b2 * sind(t);
% 绘制椭圆
% plot(x2, y2, 'LineWidth', 2);hold on
%% 第3象限
a3 = R_port
b3 = R_aft
t = 180:270;
x3 = a3 * cosd(t);
y3 = b3 * sind(t);
% 绘制椭圆
% plot(x3, y3, 'LineWidth', 2);hold on
%% 第4象限
a4 = R_starb
b4 = R_aft
t = 270:360;
x4 = a4 * cosd(t);
y4 = b4 * sind(t);
% 绘制椭圆
% plot(x4, y4, 'LineWidth', 2);hold on
% axis equal; % 保证横纵坐标尺度一致
x_all = [x1,x2,x3,x4]
y_all = [y1,y2,y3,y4]
% figure
% plot(x_all, y_all, 'LineWidth', 2);hold on
end
提示:主函数调用
clc;clear;close all
V = 5.14 % 航速
L = 200 % 船长
[x_all,y_all]= quaternion_ship_domain(L,V)
plot(x_all, y_all,'k--', 'LineWidth', 2);hold on
grid on
axis equal
title('航速5.14m/s,船长200m 的四元船舶领域')
提示:结果
总结
本次分享根据四元数船舶领域公式,对公式进行解说,将其转换成四个1/4椭圆坐标点,在自定义函数输出所有坐标点的数据再调用画出。
分享代码若有错漏之处,请大家留言批评指正!!
如果本篇文章对您有用的话,欢迎点赞收藏噢,谢谢谢谢,哈哈哈哈哈哈!!
如需帮助,请加扣联系:1097522625
主页还有更加丰富的内容噢 O(∩_∩)O :
Matlab 地理(经纬度)坐标 转 笛卡尔(直角)坐标
Matlab 土法求航海DCPA和TCPA,并根据DCPA正负判断目标船过本船船首or船尾
基于Matlab雷达视窗的来船运动矢量绘制
Matlab 沿着曲线的动态图制作
Matlab改进埃尔米特(Hermite)分段三次插值——(可在pchip函数中自定义导数值)
Matlab 四元素船舶领域代码复现
Matlab图片曲线数据提取