1. 比如说有一组点的坐标(1,1),(2,2),(3,3),如何将他们绘制在坐标系中?
cpp
points = [1 1;2 2; 3 3];
plot(points(1,:), points(2,:))
hold on;
grid;
2. 矩阵表示
points = [1 1;2 2; 3 3];
实际上是
1 1
2 2
3 3
每个分号之前是一行
3. 图像绘制
3.1 一组点的绘制
cpp
%% 已知样本特征向量
class_apple=... %% 苹果类样本
[220 240 220;
90 95 95]
class_orange=... %% 桔子类样本
[80 85 85;
85 80 85]
%% 在二维平面上绘制两类点
plot(class_apple(1,:),class_apple(2,:),'o')
hold on;
plot(class_orange(1,:),class_orange(2,:),'*')
hold on;
grid;
plot(class_apple(1,:),class_apple(2,:),'o')后面为什么没有分号?
在 MATLAB 中,分号 ; 的作用是 抑制输出,即防止命令的结果显示在命令窗口中。
没有分号时,命令的结果会被显示出来。
plot(class_apple(1,:), class_apple(2,:), 'o') 这一行,
不加分号的原因通常是为了显示图形,而不是为了显示命令的输出。
"hold on;" 有什么作用?
hold on 是用来保持当前图形的状态,允许在同一个图像上绘制多个图形。
当你使用 hold on 时,后续的 plot 命令会继续在当前图形上添加内容,
而不是创建新的图形窗口。
"hold on" 和 "hold off" 有什么不同?
hold on:保持当前图形,后续的绘图命令将添加到已有图形上。
hold off:恢复默认行为,后续的绘图命令会清除当前图形并重新绘制。
hold off 通常在你完成多次绘图操作后使用,确保清除所有之前的图形,开始新的绘图。
hold on 和 hold off 可以配合使用,比如现在需要画100组点,
使用plot画完一组后使用 hold on; 画完第100组后使用 hold off;
这样可以避免每组后面 都使用hold on;
网格线的开关:
grid on:显示网格线。
grid off:隐藏网格线。
grid:根据当前状态切换网格的显示与隐藏(
如果网格已开启,则关闭;如果网格未开启,则开启)。
图例、标题和标签:
legend('图例1', '图例2', '图例3');
title(' 标题名 ');
xlabel('X');
ylabel('Y');
4. X = [randn(1000,2)+ones(1000,2); ...
randn(1000,2)-ones(1000,2);];
randn(m, n) 是 MATLAB 中用来生成一个 m 行 n 列的矩阵,其中每个元素是从标准正态分布(均值为 0,方差为 1)中随机抽取的数值。
ones(m, n) 生成一个 m 行 n 列的矩阵,所有元素的值为 1。
方括号 [] 用来在 MATLAB 中合并矩阵。这里使用了 垂直拼接(concatenation),即将两组数据(每组 1000 个二维数据点)上下合并成一个大矩阵。
5. size(train_data, 2);size(train_data, 2) 返回的是矩阵train_data第二维的大小,也就是train_data的列数
6. 二维数组映射成图像
% 定义颜色映射 (cmap)
cmap = [1 1 1; ... % 1 - 白色 - 可通行区域
0 0 0; ... % 2 - 黑色 - 障碍物
1 0 0; ... % 3 - 红色 - 已访问节点
0 0 1; ... % 4 - 蓝色 - 待处理队列中的节点
0 1 0; ... % 5 - 绿色 - 起点
1 1 0]; % 6 - 黄色 - 终点
% 设置颜色映射
colormap(cmap);
% 初始化一个 10x10 的地图,0 表示空白区域,2 表示障碍物
map = zeros(10);
map(1:9, 7) = 2; % 在第7列添加一个障碍物
map(3, 2) = 5; % 设置起点位置为 (3, 2)
map(4, 9) = 6; % 设置终点位置为 (4, 9)
% 绘制初始地图
image(1.5, 1.5, map);
grid on;
axis image;
解释:
image(1.5, 1.5, map):
image 是 MATLAB 用来显示图像的函数。它将一个矩阵 map 显示为一个图像,其中矩阵的值对应不同的颜色。这是一种将二维数据以图像的形式呈现出来的方式。
1.5, 1.5:
这是 image 函数的 XData 和 YData 参数,分别设置图像的 X 和 Y 轴坐标范围。
1.5 代表图像显示区域的左下角坐标。通过这种方式,图像会有一个固定的显示范围,而不仅仅是基于原始矩阵的索引。这个参数是用来控制图像显示的位置和缩放的,但在大多数情况下,你也可以省略它,只使用默认值,这时图像会按矩阵的索引自动显示。
map:
map 是一个包含地图信息的矩阵。它是一个二维数组,其中每个元素的数值代表该位置的类型(如障碍物、空地、起点、终点等)。这些值会映射到指定的颜色上,给图像着色。
通过 colormap(cmap) 来设置一个颜色映射,将 map 中的不同值映射到不同的颜色。例如,值为 1 的区域可能显示为白色,值为 2 的区域显示为黑色,以此类推。
7. 矩阵相关
7.1 正无穷矩阵
distanceFromStart = Inf(nrows, ncols);
创建一个 nrows行,ncols列 的正无穷矩阵
7.2 矩阵索引
示例:
map = [
1 2 3 4 5;
6 7 8 9 10;
11 12 13 14 15;
16 17 18 19 20
];
% 获取矩阵尺寸
matrix_size = size(map);
% 使用 sub2ind 将 (3, 2) 转换为线性索引
linear_index = sub2ind(matrix_size, 3, 2);
% 输出结果
disp(['线性索引为: ', num2str(linear_index)]);
disp(['对应的元素值为: ', num2str(map(linear_index))]);
解释:
- size(map) 返回矩阵 map 的尺寸 [4, 5],即 4 行 5 列。
- sub2ind(matrix_size, 3, 2) 将二维坐标 (3, 2) 转换为对应的线性索引。此时 (3, 2) 表示的是第 3 行第 2 列的元素。
- map(linear_index) 可以直接通过这个线性索引来访问矩阵中的元素。linear_index的值是列优先的,即(3,2)这个第三行第二列的元素索引是 7 。
7.3 矩阵反索引
[i, j] = ind2sub(size(distanceFromStart), current);
将线性索引 current 转换为二维数组 distanceFromStart 的行 i 和列 j
8. 图像相关
8.1 横纵坐标比例保持1 :1
axis image;
主要用于控制图像显示的比例,确保图像的横纵比例与原始数据一致,避免图像因坐标轴的尺度差异而产生变形。
8.2 网格展示
grid on;
用于在图形中显示网格线,使得数据的趋势和分布更加清晰,特别是在可视化过程中对比数据点的位置时非常有用。
8.3 强制更新图形
drawnow;
强制 MATLAB 更新图形窗口的命令,通常用于在循环中或长时间运行的程序中实时显示图形,确保图形显示是即时的而不是等待程序执行完毕后才显示。它特别适用于动画或实时更新的情境。
9. 简单函数
9.1 矩阵最小值
[min_dist, current] = min(distanceFromStart(😃);
min_dist 是 distanceFromStart 中的最小值。
current 是最小值在展开后的列向量中的索引位置。
9.2 find() 函数
示例:
locate = find(outRangetest>0);
outRangetest:这是一个列向量。
outRangetest > 0:这是一个逻辑条件,生成一个布尔数组。
find(outRangetest > 0):find 函数会返回所有满足条件(即 outRangetest(i) > 0)的索引值。
10. 行连接符 " ... "
outRangetest = (neighbor(:,1)<1) + (neighbor(:,1)>nrows) +...
(neighbor(:,2)<1) + (neighbor(:,2)>ncols);
" ... " 用于把两个条件 (neighbor(:,1)<1) 和 (neighbor(:,1)>nrows) 分成两行书写,但它们实际上是同一行代码的一部分。... 让 MATLAB 知道,下一行代码是当前行代码的延续,继续计算。