如何在matlab中绘制库尔德斯坦旗?

44次浏览(过去30天)
Yaseen Tarq
Yaseen Tarq 2021年3月25日
评论道: 史蒂文的主 2022年6月21日
Flag =uint8(零(300,600,3));
Flag (:,:,:)=300;
% rad颜色
Flag (1:100,:, 1)=230;
Flag (1:100,:, 2)=0;
Flag (1:100,:, 3)=0;
%绿色
Flag (200:300,:, 1)=10;
Flag (200:200,:, 2)=0;
Flag (200:300,:, 3)=0;
i = 1:50 0
j = 1:50 0
如果√(power(i-10, 2)+ power(j-10, 2))>=0
如果√力量(i - 150, 2) +力量(j - 300, 2) < = 40
Flag (i, j, 3)=0;
结束
结束
结束
结束
图中,imshow(国旗);
我在这个地方停了下来,你能帮我画一面旗帜,上面有这些可以移动的场景吗?
1评论
约翰D 'Errico
约翰D 'Errico 2021年3月25日
搬家吗?怎么做?现在你想让别人帮你写代码让旗子在风中飘扬?严重吗?让我们看一下,模拟一个柔性膜,允许在湍流气流的作用下,在三维空间中移动。所以流体力学的专业知识,加上柔性膜的力学。

登录评论。

接受的答案

亚当Danz
亚当Danz 2021年3月25日
编辑:亚当Danz 2021年3月27日
我同意约翰的看法,这是一个相当大的要求,因为有很多GIF图像已经可用,这使得任务有点平凡。
更新 :看 Chad Greene的评论如下 用于波浪动画。
但让我们看看你得到了什么并做一些改进
您的原始代码
使用智能缩进(ctrl+a全选,ctrl+i智能缩进)
1.Flag =uint8(零(300,600,3));
2.Flag (:,:,:)=300;
3.% rad颜色
4.Flag (1:100,:, 1)=230;
5.Flag (1:100,:, 2)=0;
6.Flag (1:100,:, 3)=0;
7.%绿色
8.Flag (200:300,:, 1)=10;
9.Flag (200:200,:, 2)=0;
10.Flag (200:300,:, 3)=0;
11.i = 1:50 0
12.j = 1:50 0
13.如果√(power(i-10, 2)+ power(j-10, 2))>=0
14.如果√力量(i - 150, 2) +力量(j - 300, 2) < = 40
15.Flag (i, j, 3)=0;
16.结束
17.结束
18.结束
19.结束
20.图中,imshow(国旗);
前两行可以合并以提高效率,但第2行有一个问题。uint8的最大值是255,但你将它设置为300,默认值为255。不是第一行和第2行,
1.Flag = uint8(ones(300,600,3))*intmax(“uint8”);
2.% flag(:,:,:)=300;%去除
高度和宽度应该是2:3
接下来,我提到这个有帮助 库尔德斯坦旗帜的技术描述 库尔德数字图书馆将国旗的高宽比定义为2:3,但你的高宽比是300:600或1:2。要设置正确的比例,第一行应该改为
1.Flag = uint8(ones(300,450,3))*intmax(“uint8”);
但是要小心!高度(300)必须能被3整除,宽度也应该是 宽度=高度/ 2 * 3。
官方色彩
网站 还使用潘通颜色系统识别官方颜色,转换为下面的RGB值。
红色: 032年经前综合症 [239 51 64]
格林: 354年经前综合症 [0 177 64]
黄色: 116年经前综合症 [255 205 0]
你的颜色和这个网站上的颜色不匹配(可能是网站有问题?)为了使用300x450的图像来匹配这些颜色,
3.%红色
4.Flag (1:100,:, 1)=239;
5.Flag (1:100,:, 2)=51;
6.Flag (1:100,:, 3)=64;
7.%绿色
8.Flag (201:300,:, 1)=0;将索引更改为201,而不是200
9.Flag (201:300,:, 2)=170;将索引更改为201:300,而不是200:200
10.Flag (201:300,:, 3)=64;将索引更改为201,而不是200
太阳的大小和形状
再次引用 网站 在美国,太阳有21条等距射线,其中内径是外径的一半,太阳的方向是垂直子午线穿过顶部的一条射线。最后,外径与旗子高度之比为1:2。
你的旗帜包含300x450像素,这不足以代表一个21角的星星(或太阳)。我没有将星星构建到颜色矩阵中,而是将它创建为绘制在旗帜顶部的补丁对象。
xy 是星形的[x,y]个顶点的mx2矩阵。
11.% for i=1:500
12.%, j=1:500
13.% if√(power(i- 10,2)+ power(j- 10,2))>=0
14.% if√(power(i-150, 2)+power(j-300,2))<=40
15.% flag(i, j, 3)=0;
16.%结束
17.%结束
18.%结束
19.%结束
outerDiam = size(flag,1)/2;
nRays = 21;
th = linspace(0,2*pi,nRays*2+1)-pi/2;% -pi/2确保小费在上面
flagCenter = size(flag)/2;
xy = outerDiam/2 * [cos(th(:)), sin(th(:))];
Xy (2:2:end,:) = Xy (2:2:end,:)/2;
= xy + flagCenter([2,1]);
情节国旗
20.图中,imshow(国旗);
21.持有
22.Patch (xy(:,1), xy(:,2), [255 205 0]/255,“EdgeColor”“没有”
23.轴平等的
完整的、更新的代码
Flag = uint8(ones(300,450,3))*intmax(“uint8”);
%的红色
Flag (1:100,:, 1)=239;
Flag (1:100,:, 2)=51;
Flag (1:100,:, 3)=64;
%绿色
Flag (201:300,:, 1)=0;
Flag (201:300,:, 2)=170;
Flag (201:300,:, 3)=64;
%创建太阳射线坐标(x,y)
outerDiam = size(flag,1)/2;
nRays = 21;
flagCenter = size(flag)/2;
th = linspace(0,2*pi,nRays*2+1)-pi/2;% -pi/2确保小费在上面
xy = outerDiam/2 * [cos(th(:)), sin(th(:))];
Xy (2:2:end,:) = Xy (2:2:end,:)/2;
= xy + flagCenter([2,1]);
%图标志
图中,imshow(国旗);
持有
Patch (xy(:,1), xy(:,2), [255 205 0]/255,“EdgeColor”“没有”
平等的
为了从视觉上确认恒星是居中的,
参照线(大小(国旗,2)/ 2,“α”, 1)
yline(大小(国旗,1)/ 2,“α”, 1)
情节([min (xlim);马克斯(xlim)]、[min (ylim);马克斯(ylim)),“k -”
情节([min (xlim);马克斯(xlim)]、[马克斯(ylim);分钟(ylim)),“k -”
9日评论
史蒂文的主
史蒂文的主 2022年6月21日
抽搐
Flag = uint8(ones(300,450,3))*intmax(“uint8”);
toc
运行时间为0.005061秒。
这一行创建了一个双精度数组,将该数组转换为 uint8 ,并将每个元素乘以uint8的最大值。相反,我可能会用 repmat 直接将最大值展开为正确大小的数组。
抽搐
Flag2 = repmat(intmax(“uint8”), [300 450 3]);
toc
运行时间为0.001817秒。
isequal(国旗,flag2)
ans =逻辑
1
您看到的时间来自于重新运行代码几次。如果因为某种原因你不能用 repmat 您仍然可以通过调用来避免“创建双精度数组”步骤 使用要创建的数组类型。
抽搐
M1 = uint8(ones(300, 450, 3));
toc
运行时间为0.002032秒。
抽搐
M2 = ones(300, 450, 3,“uint8”);
toc
运行时间为0.001300秒。
isequal (M1、M2)
ans =逻辑
1

登录评论。

更多答案(1)

Bjorn Gustavsson
Bjorn Gustavsson 2021年3月25日
你可以添加如下内容:
Phi360 = linspace(0,2*pi,43);
R = 60 + 25*(-1).^(1:43);
Phi360 = linspace(0,2*pi,43);
持有
ph =填补(r0 (1) + r。*罪(phi360)、r0 (2) + r。* cos (phi360) [1 1 0]);
集(ph值,“EdgeColor”“没有”
如果你想设置星星的颜色为黄色,你应该看看帮助和文档 inpolygon 这是一种简单的方法来找到恒星内部的像素。
HTH
1评论
Shahir Ahmad Safi
Shahir Ahmad Safi 2022年6月21日
你好,你能帮我画阿富汗国旗吗?
谢谢! !

登录评论。

标签

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!