可以请问:在matlab中根据已知图形边界如何在边界上形成系列离散的点
参考GPT和自己的思路:在matlab中,你可以使用函数bwboundaries()
来获取已知图形的边界,并将边界离散化为一系列的点。具体步骤如下:
读取图像并进行二值化处理。
img = imread('your_image.png'); % 读取图片
bw_img = im2bw(img); % 二值化处理
使用bwboundaries()
函数获取边界并离散化。
[B,L] = bwboundaries(bw_img, 'noholes'); % 获取边界
for i=1:length(B)
boundary = B{i};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2) % 绘制离散的边界点
end
其中,L
是边界的标签矩阵,B
是一个存储边界点坐标的单元格数组。
绘制边界离散化后的点时,boundary
是一个N行2列的矩阵,其中的每一行都是一个二维空间点的坐标,第一列是X坐标,第二列是Y坐标。
f=[5;6]; %样例中求最大值,取反转化为最小值,也可以在函数中传-f来解决
%与标准不等式一致,需要转化符号,直接传参数实施-a
A=[1,-2;-2,3];
%与标准不等式一致,需要转化符号,直接传参数实施-b
b=[2;2];
%不存在等式,用[]代替
%zeros(2,1)就是(0;0)
%ub不存在,可以不用写,也可以用[]代替
%ub不存在,可以不用写,也可以用[]代替
%[x,y] = linprog(-f,-A,-b,[],[],[],[]);
[x,y] = linprog(-f,-A,-b,[],[]);
结果展示
Optimal solution found.
x =
-10.0000
-6.0000
y =
86.0000
x1 = -10, x2 = -6;
max z = -86;
例3
min z = 0.3 * x1 + 0.5 * x2;
0.5 * x1 +0.5 * x2 >= 2;
1.0 * x1 +0.3 * x2 >= 3;
0.2 * x1 +0.6 * x2 >= 1.2;
0.5 * x1 +0.2 * x2 >= 2;
x1 , x2 >=0;