matlab绘图:
通过编写代码来进行调整图片:
可以先生成图片,再生成代码。
rgb网址选取合适的颜色
matlab常用命令:
- 创建函数:
function <输出结果> = <函数名>(输入参数)
'函数主体'
end
function result=add(a,b)
result=a+b
end
通常在一个.m文件中创造函数并于函数名相同,然后在其他.m文件调用函数。
clear all
clc
close all
%% 初始化地形信息
mapRange = [100,100,100]; % 地图长、宽、高范围
N = 10; % 山峰个数
peaksInfo = struct; % 初始化山峰特征信息结构体
peaksInfo.center = []; % 山峰中心
peaksInfo.range = []; % 山峰区域
peaksInfo.height = []; % 山峰高度
peaksInfo = repmat(peaksInfo,N,1);
%% 随机生成N个山峰的特征参数
for i = 1:N
peaksInfo(i).center = [mapRange(1) * (rand*0.8+0.2), mapRange(2) * (rand*0.8+0.2)];
peaksInfo(i).height = mapRange(3) * (rand*0.7+0.3);
peaksInfo(i).range = mapRange*0.1*(rand*0.7+0.3);
end
%% 计算山峰曲面值
peaksData = [];
for x = 1:mapRange(1)
for y = 1:mapRange(2)
sum = 0;
for k = 1:N
h_i = peaksInfo(k).height;
x_i = peaksInfo(k).center(1);
y_i = peaksInfo(k).center(2);
x_si = peaksInfo(k).range(1);
y_si = peaksInfo(k).range(2);
sum = sum + h_i * exp(-((x-x_i)/x_si)^2 - ((y-y_i)/y_si)^2);
end
peaksData(x,y) = sum;
end
end
%% 构造曲面网格,用于后期MAP图插值判断三维路径是否与山峰交涉
% x列向量
x = [];
for i = 1:mapRange(1)
x = [x; ones(mapRange(2),1) * i];
end
% y列向量
y = (1:mapRange(2))';
y = repmat(y,length(peaksData(:))/length(y),1);
% peaksData列向量
peaksData = reshape(peaksData,length(peaksData(:)),1);
% 构造X/Y/Z网格数据
[X,Y,Z] = griddata(x,y,peaksData,...
linspace(min(x),max(x),100)',...
linspace(min(y),max(y),100));
%% 画山峰曲面
surf(X,Y,Z) % 画曲面图
shading flat % 各小曲面之间不要网格
%% 构建地形查询结构(用于避障)
% 生成点云数据(去除NaN值)
points = [X(:), Y(:), Z(:)];
points(isnan(Z(:)), :) = []; % 删除无效点
% 创建高度插值函数(用于快速获取地面高度)
F = griddedInterpolant(X', Y', Z', 'linear', 'none');
gridX = linspace(min(x), max(x), 100);
gridY = linspace(min(y), max(y), 100);
%创建存储数据的矩阵(存储x,y,z)
testPoint_sum=[12,34,45
23,34,54]
%可以在一些数据中随机抽选几个来查看当今的状态是否有必要一直计算
[dist,isInside]= compute(testPoint_sum,points,F,gridX, gridY )
%% 初始化
%yaw:偏航角 pitch:俯仰角 roll:滚转角=0