@李东岳 嗯。。你现在这个体量轻易的换也换不了了,整不好数据还丢了。
我是觉得板块的话你看看分方向弄呢。of里面也有各个方向的,稍稍分一分,什么精华帖置顶什么的,精华区whatever。
fluent区缺个大佬,有大佬就好了。这玩意你看其他论坛不也是,有的板块热的够呛。。人家也没说关啊。板块啥的有总比没有强,万一什么时候就火了呢。
你又不玩fluent,不要有包袱。
@李东岳 嗯。。你现在这个体量轻易的换也换不了了,整不好数据还丢了。
我是觉得板块的话你看看分方向弄呢。of里面也有各个方向的,稍稍分一分,什么精华帖置顶什么的,精华区whatever。
fluent区缺个大佬,有大佬就好了。这玩意你看其他论坛不也是,有的板块热的够呛。。人家也没说关啊。板块啥的有总比没有强,万一什么时候就火了呢。
你又不玩fluent,不要有包袱。
@李东岳
每个人有每个人的路子,你也不需要有太多压力。愿意玩就玩,不愿意玩就拉倒。就像那个Holzmann,没事还在CFD online上四处回答问题呢。自己也还是有公司什么的。
如果你还想玩的话,我个人建议,开放注册,调整权限,内容分类。你现在这不就像linux 和Red Hat 那边的关系么。都是开源的,免费用,需要服务了,为服务付款。就当打广告,引流,扩大知名度呗~
主要很多人都是忙活OF一时。很少有人能一直搞OF,新人不断来,但是老人并没有不断的留下。
CFD online不也是,好多帖子就那么扔在那没人管。
分享精神也差点意思
开放注册试试,只是严一点的开放呢
开放注册吧,总有人愿意说话的
可以使用profiling tool 去查程序的某个部分有问题。
简单的intel vtune, intel advisor。
这个需要你有一些基础的performance engineering的知识。
可以在网上找找关键词,MPI tracer, roofline model, performance engineering。
这还涉及到MPI的知识。可以找一下关于MPI的课,不过MPI在OF中基本被各种隐藏,一般情况下可能你也看不到什么。不过我记得有关于mesh的renumbering的操作,在大规模并行的时候,会有一些优化。 当然这个也要看你使用的是什么计算,网格怎么分配的~
@Thomas_Huster
你在这include了文件,但是在你的make文件里面并没有提供相关的目录和地址,所以程序自然找不到在哪。你需要调整你的make文件的路径
@youhaoyu 因为你是基于kinematic parcel做的,说不准你做的很多东西都可能在别的地方植入过。
有的时候你觉得你植入对了,但是很有可能你并没有,这边差一点,那边差一点。
而且有一些模型并没有在kinematiccloud中真的植入。有可能就是一个空的头文件。
最好你植入一点,查一点。我建议你捋顺整个of的library,在哪个地方call cloud,cloud在什么地方call 的什么方程,到底call了几次。慢慢查,整着整着就熟了。
我之前可能在某个帖子里面发过我当时对lagranian这部分的理解的流程图,你可以借鉴一下。
不要纠结于具体某个模型,先搞懂框架,然后思考你要植入的东西具体应该植入到哪边,然后通过看看相似的其他植入,具体问题具体分析吧。git有很多repo 有的论文作者会分享出来的。
@youhaoyu 你这个想法是对的,我们也是那么植入p的interpolation的。
cfdonline一般没人回 就是多查 有空可以看看chalmers 的openfoam的课,里面有很多学生的project。很有帮助
比如你的particle diameter 应该通过p.d()获得。你的rhoc 是打算使用网格中心值还是考虑是有parcel点的插值?都是有算法的。
整体来说,你这个算法不能这么直接从别的地方生搬硬套。要根据你用的cloud,parcel,根据怎么获取parcrl这个struct内的内容来处理。建议你一步一步来,一行一行写,编译,测试。不能一口吃个胖子
@youhaoyu 应该是p.d()什么的吧。如果你在kinematicparcel.h等地方定义了的话,你应该通过p.xxx()赋值。另外如果你需要流场速度是可以通过两个方式获得,p.uc()插值的值或者通过mesh获得网格中心的数据吧
你的问题很具体,我也很久没接触OF了。所以建议你多去google。
都是红帽系的。一个命令就能从centOS转到Rocky这边。我们学校超算现在就是这个系统。
@好学者 在 Euler-Lagrange的一些解析,sprayFoam 中说:
大佬,你好!我有一些问题想问问,sprayFoam是基于欧拉-拉格朗日框架下进行喷雾模拟,我看了一些论文在用sprayFoam求解器计算喷雾时,其数值方法介绍时会介绍一些控制方程,其中会写 gas phase(论文里的小标题就写的气相控制方程)或Carrier phase的控制方程使用LES或者RANS的湍流模型,然后dispersed phase或Liquid phase的在拉格朗日框架下求解了喷雾包的质量、动量和能量控制方程。那么我想问一下,
1、那么只有在欧拉框架下的连续相才能使用LES或者RANS湍流模型对吗
2、这里的gas phase或Carrier phase的气相是指的什么?是喷雾室环境里的气体(N2)吗?是N2对液体喷雾工质造成的湍流的影响吗?
N_2
3、是不是在sprayFoam里的喷雾子模型里设置的喷射工质都是按照拉格朗日粒子进行计算的(一个parcel里有多个相同属性的液滴,然后喷射出大量parcel发展成雾化过程),即液体喷雾工质都是按照离散相计算吗?那么拉格朗日粒子不会产生连续的液柱吗?
4、如果上述问题3是正确的,那么喷射出来是不是就已经是雾化好的小液滴,这里的雾化小液滴和parcel是不是有所区别?
5、在工质喷射过程中,从喷嘴口区域到喷雾发展完全的底部区域如下图:
虚线的区域是不是都是parcel组成,那么这一块都是离散相吗?
首先你并没有解释说你这个是哪个field,流场的速度场?如果是流场的速度场的话,那么这个并不是离散相。
离散相是那些液滴,需要你额外在paraview中加载的。不知道你使用的那个版本的OF,在OF5以后,加载拉格朗日场会略微有点复杂。建议你在网上找一下解决办法,不同版本有不同或者近似的解决办法。
其次,在OF中并没有使用统计的方法把拉格朗日的速度场写出来。所以你需要使用统计的方法,比如在你的domain中添加一个面,统计在1s内通过这个面的颗粒的速度和大小,然后就可以其对应网格的颗粒的平均速度,平均尺寸等信息。不然你在of中查看到的只是瞬时值。
6、如果我想在喷雾过程中增加闪沸(即有气泡成核、长大和破碎过程),那么怎么植入气泡呢?我想是在一个parcel里植入气泡,如果我上述说的正确,那么就是在一个parcel(因为里面是同种属性小液滴,是不是可以看做连续相)里增加了一个气相(这样是不是在一个parcel控制体内出现了两相流),那么这个气相是不是也是应该在拉格朗日框架下计算相应的控制方程。这样是不是相当于一个拉格朗日框架下嵌套了另一个拉格朗日框架进行计算?
parcel就是point-mass,就是一个点/一个变量/一个c语言中的sturct ,他包含了他的尺寸,密度等信息。但是他在计算的过程中并不会物理上的存在。例如,两个液滴半径都是1cm,在计算的时候,就是两个点p1, p2。 当两个液滴的质心距离效率2cm的时候,在真实世界中,两个液滴就发生了碰撞。但是在模拟中,如果你不考虑碰撞模型的话,两个液滴就是两个点。距离是小于2cm的两个点。没有任何物理现象自然的发生。
同理,如果你考虑在parcel中添加气相。你就要考虑到对其相关的物理性质进行修改。例如,原来一个液滴直径1cm,那么p1.d()=100mm, p1.rho() = 998
.然后你想到,oh,这个液滴在什么条件下需要添加了气相,那么你就可以对这个parcel添加一个代表有气相的物理相。 还是p1
,添加一个参数叫p1.y() = 0.2
。当液滴中有了气相以后,相对的就要对其他对应的参数进行修改, p1.d()=105mm
, p1.rho()=800
。这个东西通常是使用spraycloudproperties文件中的compositionModel来调整和计算的的。可以调整你的parcel中都有什么相,每个相的百分比,相关的热力学参数。这部分我并没有太多的经验,mixture这个东西是很复杂的。
并没有所谓的嵌套了另外一个拉格朗日框架,都是在一个框架中的。
总体来说,所谓的欧拉拉格朗日的多相流模拟,简单的来说就是在普通的/常见模拟中添加另外的一个离散相,并将其视为质点。然后看这个离散相相是受到外部流体怎么样的影响。很基础,应用的就是牛二定律 F=ma
。然后你就需要对这个parcel所受的力进行建模,常见的drag,lift,bouyancy等(BBO equation)。在不同的情况下应用不一样的模型,比如体积密度比较大, 那么drag就要使用不一样的模型。这个离散相是被流场所影响的就是所谓的1-way coupling,同时离散相也是会对流场产生影响的(反馈:外部流场速度因为parcel而减慢,由于parcel的运动产生的湍流等),如果考虑进去的话就是2-way coupling,即在NS方程中添加一个source term。如果考虑离散相相内部的关系的话(液滴碰撞)就是所谓的4-way coupling。有一点需要你注意,对于离散相的某些特征,比如在某个测量面的数据,请参照我在Q5所说的内容。需要大量的数据统计。
推荐一本书:Computational Fluid Dynamics of Dispersed Multi-Phase Flows - Martin Sommerfeld, ISBN - 978-91-633-3564-8.
你肯定能在什么地方找到。这里面基本上包含了所有你需要的基础知识。
@youhaoyu 感谢你的分享。
大佬别用CentOS了。不维护了
建议换Rocky Linux
@ann Hi 我好久没有碰OF了,没有办法给你精准的结果。
但是我建议你查一下源程序, 看看哪一项是控制质量流量,np是怎么计算的,尺寸分布是怎么算的等。
建议你可以先从最简单的情况,比如喷射多少个尺寸多大的particle,然后一点一点 你就知道什么是什么了。
看起来你上一步LIGGGHTS计算完了,导入到OF中出错了吧。检查检查是不是LIGGGHTS给OF的数据出错了。
@dxl 首先要看你基于的哪个cloud做的,并不是所有的cloud都真实的包含了颗粒碰撞。要查一下code确认你的程序是不是真正的引用了碰撞模型。
其次,OF中的碰撞模型是O'Rourke的碰撞模型,是计算碰撞概率的,不是deteministic的(不知道中文怎么说)。即不是追踪所有颗粒,计算两个颗粒的路径,判断两个颗粒是否会发生碰撞的方法。
基于OF10的话,你可以在下面找到具体的源程序。
OpenFOAM-10/src/lagrangian/parcel/submodels/Spray/StochasticCollision
/ORourkeCollision/
回复一个远古的问题,留个纪念。
根据最近上过的有关并行计算的课,现代CPU都是以ccNUMA作为一个单位。例如下面这台电脑有2个Socket,每个Socket有2个ccNUMA,每个ccNUMA包含18个核心,每个核心有2个线程(所谓的超线程)。
为什么要分的这么仔细,原因之一就是这是因为现代CPU的高速缓存有部分(例如L3)是共享的,有部分是私有的(L1和L2)。访问缓存是有速度限制的,所以如果正确的分配核心的话,可以避免'交通拥挤‘。而且如果数据是储存在另外一个ccNUMA对应的缓存中的话,额外的访问延迟也是导致计算速度下降的原因之一。这点在OpenMP中格外明显和重要。至于MPI的话,MPI和OpenMP有本质上的差别,并且MPI可能涉及到多个Node间的网络延迟,所以这方面更加复杂。
Anyway,至少在一个Node中,不要使用超线程的线程,就使用物理核心。如果有条件可以在BIOS中关闭超线程。如果没有条件可以通过likwid找到那些Thread归属于什么位置。然后通过taskset进行固定。likwid中有个程序叫做likwid-topology,从此可以得到当前Node中的CPU的拓扑结构。如下面的内容。
多个Node暂时没有经验。但是可以通过profile对使用某些线程进行限制,我当前是没有经验的。
至于是不是对于计算速度有绝对的提升,这个我没有结论,但是如果你需要考虑有关性能的方向的话,这种控制变量也是必要的。
--------------------------------------------------------------------------------
CPU name: Intel(R) Xeon(R) Platinum 8360Y CPU @ 2.40GHz
CPU type: Intel Icelake SP processor
CPU stepping: 6
********************************************************************************
Hardware Thread Topology
********************************************************************************
Sockets: 2
Cores per socket: 36
Threads per core: 2
--------------------------------------------------------------------------------
HWThread Thread Core Die Socket Available
0 0 0 0 0 *
1 0 1 0 0 *
2 0 2 0 0 *
3 0 3 0 0 *
4 0 4 0 0 *
5 0 5 0 0 *
6 0 6 0 0 *
7 0 7 0 0 *
8 0 8 0 0 *
9 0 9 0 0 *
10 0 10 0 0 *
11 0 11 0 0 *
12 0 12 0 0 *
13 0 13 0 0 *
14 0 14 0 0 *
15 0 15 0 0 *
16 0 16 0 0 *
17 0 17 0 0 *
18 0 18 0 0 *
19 0 19 0 0 *
20 0 20 0 0 *
21 0 21 0 0 *
22 0 22 0 0 *
23 0 23 0 0 *
24 0 24 0 0 *
25 0 25 0 0 *
26 0 26 0 0 *
27 0 27 0 0 *
28 0 28 0 0 *
29 0 29 0 0 *
30 0 30 0 0 *
31 0 31 0 0 *
32 0 32 0 0 *
33 0 33 0 0 *
34 0 34 0 0 *
35 0 35 0 0 *
36 0 36 0 1 *
37 0 37 0 1 *
38 0 38 0 1 *
39 0 39 0 1 *
40 0 40 0 1 *
41 0 41 0 1 *
42 0 42 0 1 *
43 0 43 0 1 *
44 0 44 0 1 *
45 0 45 0 1 *
46 0 46 0 1 *
47 0 47 0 1 *
48 0 48 0 1 *
49 0 49 0 1 *
50 0 50 0 1 *
51 0 51 0 1 *
52 0 52 0 1 *
53 0 53 0 1 *
54 0 54 0 1 *
55 0 55 0 1 *
56 0 56 0 1 *
57 0 57 0 1 *
58 0 58 0 1 *
59 0 59 0 1 *
60 0 60 0 1 *
61 0 61 0 1 *
62 0 62 0 1 *
63 0 63 0 1 *
64 0 64 0 1 *
65 0 65 0 1 *
66 0 66 0 1 *
67 0 67 0 1 *
68 0 68 0 1 *
69 0 69 0 1 *
70 0 70 0 1 *
71 0 71 0 1 *
72 1 0 0 0 *
73 1 1 0 0 *
74 1 2 0 0 *
75 1 3 0 0 *
76 1 4 0 0 *
77 1 5 0 0 *
78 1 6 0 0 *
79 1 7 0 0 *
80 1 8 0 0 *
81 1 9 0 0 *
82 1 10 0 0 *
83 1 11 0 0 *
84 1 12 0 0 *
85 1 13 0 0 *
86 1 14 0 0 *
87 1 15 0 0 *
88 1 16 0 0 *
89 1 17 0 0 *
90 1 18 0 0 *
91 1 19 0 0 *
92 1 20 0 0 *
93 1 21 0 0 *
94 1 22 0 0 *
95 1 23 0 0 *
96 1 24 0 0 *
97 1 25 0 0 *
98 1 26 0 0 *
99 1 27 0 0 *
100 1 28 0 0 *
101 1 29 0 0 *
102 1 30 0 0 *
103 1 31 0 0 *
104 1 32 0 0 *
105 1 33 0 0 *
106 1 34 0 0 *
107 1 35 0 0 *
108 1 36 0 1 *
109 1 37 0 1 *
110 1 38 0 1 *
111 1 39 0 1 *
112 1 40 0 1 *
113 1 41 0 1 *
114 1 42 0 1 *
115 1 43 0 1 *
116 1 44 0 1 *
117 1 45 0 1 *
118 1 46 0 1 *
119 1 47 0 1 *
120 1 48 0 1 *
121 1 49 0 1 *
122 1 50 0 1 *
123 1 51 0 1 *
124 1 52 0 1 *
125 1 53 0 1 *
126 1 54 0 1 *
127 1 55 0 1 *
128 1 56 0 1 *
129 1 57 0 1 *
130 1 58 0 1 *
131 1 59 0 1 *
132 1 60 0 1 *
133 1 61 0 1 *
134 1 62 0 1 *
135 1 63 0 1 *
136 1 64 0 1 *
137 1 65 0 1 *
138 1 66 0 1 *
139 1 67 0 1 *
140 1 68 0 1 *
141 1 69 0 1 *
142 1 70 0 1 *
143 1 71 0 1 *
--------------------------------------------------------------------------------
Socket 0: ( 0 72 1 73 2 74 3 75 4 76 5 77 6 78 7 79 8 80 9 81 10 82 11 83 12 84 13 85 14 86 15 87 16 88 17 89 18 90 19 91 20 92 21 93 22 94 23 95 24 96 25 97 26 98 27 99 28 100 29 101 30 102 31 103 32 104 33 105 34 106 35 107 )
Socket 1: ( 36 108 37 109 38 110 39 111 40 112 41 113 42 114 43 115 44 116 45 117 46 118 47 119 48 120 49 121 50 122 51 123 52 124 53 125 54 126 55 127 56 128 57 129 58 130 59 131 60 132 61 133 62 134 63 135 64 136 65 137 66 138 67 139 68 140 69 141 70 142 71 143 )
--------------------------------------------------------------------------------
********************************************************************************
Cache Topology
********************************************************************************
Level: 1
Size: 48 kB
Cache groups: ( 0 72 ) ( 1 73 ) ( 2 74 ) ( 3 75 ) ( 4 76 ) ( 5 77 ) ( 6 78 ) ( 7 79 ) ( 8 80 ) ( 9 81 ) ( 10 82 ) ( 11 83 ) ( 12 84 ) ( 13 85 ) ( 14 86 ) ( 15 87 ) ( 16 88 ) ( 17 89 ) ( 18 90 ) ( 19 91 ) ( 20 92 ) ( 21 93 ) ( 22 94 ) ( 23 95 ) ( 24 96 ) ( 25 97 ) ( 26 98 ) ( 27 99 ) ( 28 100 ) ( 29 101 ) ( 30 102 ) ( 31 103 ) ( 32 104 ) ( 33 105 ) ( 34 106 ) ( 35 107 ) ( 36 108 ) ( 37 109 ) ( 38 110 ) ( 39 111 ) ( 40 112 ) ( 41 113 ) ( 42 114 ) ( 43 115 ) ( 44 116 ) ( 45 117 ) ( 46 118 ) ( 47 119 ) ( 48 120 ) ( 49 121 ) ( 50 122 ) ( 51 123 ) ( 52 124 ) ( 53 125 ) ( 54 126 ) ( 55 127 ) ( 56 128 ) ( 57 129 ) ( 58 130 ) ( 59 131 ) ( 60 132 ) ( 61 133 ) ( 62 134 ) ( 63 135 ) ( 64 136 ) ( 65 137 ) ( 66 138 ) ( 67 139 ) ( 68 140 ) ( 69 141 ) ( 70 142 ) ( 71 143 )
--------------------------------------------------------------------------------
Level: 2
Size: 1.25 MB
Cache groups: ( 0 72 ) ( 1 73 ) ( 2 74 ) ( 3 75 ) ( 4 76 ) ( 5 77 ) ( 6 78 ) ( 7 79 ) ( 8 80 ) ( 9 81 ) ( 10 82 ) ( 11 83 ) ( 12 84 ) ( 13 85 ) ( 14 86 ) ( 15 87 ) ( 16 88 ) ( 17 89 ) ( 18 90 ) ( 19 91 ) ( 20 92 ) ( 21 93 ) ( 22 94 ) ( 23 95 ) ( 24 96 ) ( 25 97 ) ( 26 98 ) ( 27 99 ) ( 28 100 ) ( 29 101 ) ( 30 102 ) ( 31 103 ) ( 32 104 ) ( 33 105 ) ( 34 106 ) ( 35 107 ) ( 36 108 ) ( 37 109 ) ( 38 110 ) ( 39 111 ) ( 40 112 ) ( 41 113 ) ( 42 114 ) ( 43 115 ) ( 44 116 ) ( 45 117 ) ( 46 118 ) ( 47 119 ) ( 48 120 ) ( 49 121 ) ( 50 122 ) ( 51 123 ) ( 52 124 ) ( 53 125 ) ( 54 126 ) ( 55 127 ) ( 56 128 ) ( 57 129 ) ( 58 130 ) ( 59 131 ) ( 60 132 ) ( 61 133 ) ( 62 134 ) ( 63 135 ) ( 64 136 ) ( 65 137 ) ( 66 138 ) ( 67 139 ) ( 68 140 ) ( 69 141 ) ( 70 142 ) ( 71 143 )
--------------------------------------------------------------------------------
Level: 3
Size: 54 MB
Cache groups: ( 0 72 1 73 2 74 3 75 4 76 5 77 6 78 7 79 8 80 9 81 10 82 11 83 12 84 13 85 14 86 15 87 16 88 17 89 18 90 19 91 20 92 21 93 22 94 23 95 24 96 25 97 26 98 27 99 28 100 29 101 30 102 31 103 32 104 33 105 34 106 35 107 ) ( 36 108 37 109 38 110 39 111 40 112 41 113 42 114 43 115 44 116 45 117 46 118 47 119 48 120 49 121 50 122 51 123 52 124 53 125 54 126 55 127 56 128 57 129 58 130 59 131 60 132 61 133 62 134 63 135 64 136 65 137 66 138 67 139 68 140 69 141 70 142 71 143 )
--------------------------------------------------------------------------------
********************************************************************************
NUMA Topology
********************************************************************************
NUMA domains: 4
--------------------------------------------------------------------------------
Domain: 0
Processors: ( 0 72 1 73 2 74 3 75 4 76 5 77 6 78 7 79 8 80 9 81 10 82 11 83 12 84 13 85 14 86 15 87 16 88 17 89 )
Distances: 10 11 20 20
Free memory: 53444.9 MB
Total memory: 64038.5 MB
--------------------------------------------------------------------------------
Domain: 1
Processors: ( 18 90 19 91 20 92 21 93 22 94 23 95 24 96 25 97 26 98 27 99 28 100 29 101 30 102 31 103 32 104 33 105 34 106 35 107 )
Distances: 11 10 20 20
Free memory: 52998.7 MB
Total memory: 64504.1 MB
--------------------------------------------------------------------------------
Domain: 2
Processors: ( 36 108 37 109 38 110 39 111 40 112 41 113 42 114 43 115 44 116 45 117 46 118 47 119 48 120 49 121 50 122 51 123 52 124 53 125 )
Distances: 20 20 10 11
Free memory: 57461.9 MB
Total memory: 64504.1 MB
--------------------------------------------------------------------------------
Domain: 3
Processors: ( 54 126 55 127 56 128 57 129 58 130 59 131 60 132 61 133 62 134 63 135 64 136 65 137 66 138 67 139 68 140 69 141 70 142 71 143 )
Distances: 20 20 11 10
Free memory: 35591.3 MB
Total memory: 64450.5 MB
--------------------------------------------------------------------------------
hi,我已经好久没碰OF了。
但是我看起来 你可以先将calcDiameter 不要用function的方式植入,先用最简单的方式直接添加到 calc中。你把Ro()也转换成类似Re的那种简单的定义方式。
scalar Ro = xxxx
因为OF是一层一层的按照template编译的,所以你现在这个处理办法要一层一层往上走,改了底层的,你先按照简单植入办法植入,然后当你发现你不得不突破OF的限制了以后,再考虑其他的办法。
GPT说:
在C++环境下,你可以使用一些图形库来绘制这个云图,比如OpenGL或者SFML。以下是一个简单的示例代码,使用SFML库来绘制一个简单的云图:
#include <SFML/Graphics.hpp>
#include <vector>
int main()
{
// 创建窗口
sf::RenderWindow window(sf::VideoMode(800, 600), "Cloud Map");
// 创建星号位置信息和压力值
std::vector<sf::Vector2f> positions = {sf::Vector2f(100, 100), sf::Vector2f(200, 200), sf::Vector2f(300, 300)};
std::vector<int> pressures = {5, 6, 7};
// 创建圆形表示星号
std::vector<sf::CircleShape> circles;
for (int i = 0; i < positions.size(); i++)
{
sf::CircleShape circle(5);
circle.setPosition(positions[i]);
circles.push_back(circle);
}
// 主循环
while (window.isOpen())
{
// 处理事件
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
// 清空窗口
window.clear();
// 绘制圆形
for (int i = 0; i < circles.size(); i++)
{
circles[i].setFillColor(sf::Color(255, 255, 255, pressures[i] * 25)); // 根据压力值设置颜色的透明度
window.draw(circles[i]);
}
// 显示窗口内容
window.display();
}
return 0;
}
除了使用OpenGL、SFML和gnuplot之外,还有其他方法可以绘制云图,比如使用OpenCV库。以下是一个简单的示例代码,使用OpenCV库来绘制一个简单的云图:
#include <opencv2/opencv.hpp>
#include <vector>
int main()
{
// 创建一个空白图像
cv::Mat cloudMap = cv::Mat::zeros(600, 800, CV_8UC3);
// 创建星号位置信息和压力值
std::vector<cv::Point> positions = {cv::Point(100, 100), cv::Point(200, 200), cv::Point(300, 300)};
std::vector<int> pressures = {5, 6, 7};
// 在图像上绘制星号
for (int i = 0; i < positions.size(); i++)
{
cv::circle(cloudMap, positions[i], 5, cv::Scalar(255, 255, 255), -1);
}
// 显示图像
cv::imshow("Cloud Map", cloudMap);
cv::waitKey(0);
return 0;
}
问GPT啊