流体中的流线【StreamLines】的实现

流线是一条线,它是 与瞬时速度方向相切(速度是一个矢量,并且 它有一个大小和一个方向)。为了在流程中可视化这一点,我们 可以想象一个小的标记流体元素的运动。例如,我们可以标记一个 用荧光染料滴水,然后用激光照射它,这样 它会发出荧光。如果我们在液滴移动时拍摄一张短曝光照片 根据局部速度场(与 速度发生明显变化所需的时间),我们会看到一个短的条纹,带有 长度 V\Delta t,且方向与瞬时速度方向相切。如果我们 以这种方式标记许多水滴,其中的流线 流量将变得可见。由于流动中任何一点的速度都有一个值 (流动不能同时流向多个方向),流线不能 渡。除了在速度 量级为零,例如在停留带。

还有其他方法可以使流可见。例如,我们可以追踪出路径 然后是我们的荧光滴剂,使用长时间曝光的照片。这条线被称为路径线,它类似于您在拍摄长时间曝光照片时看到的 夜间高速公路上的车灯。路径线有可能交叉,就像你可以的那样 想象一下高速公路的类比:当一辆汽车改变车道时,它的路径线由它划出 灯光可能会穿过相邻车辆在另一处追踪出的另一条路径线 时间。

可视化流动模式的另一种方法是通过条纹线。条纹线是 由在某个较早的某个点通过特定点的所有粒子所追踪的线 时间。例如,如果我们从一个固定点连续发射荧光染料,则染料 当它顺流而下时构成一条条纹线。为了继续高速公路的类比,它是 线路由经过同一收费站的所有车辆上的信号灯组成。 如果它们都遵循相同的路径(稳定的流动),则会产生一条线,但如果它们遵循 不同的路径(不稳定流动),线路可能会自行交叉。

在 非定常流、流线、路径线和条纹线都是不同的,但在稳态流中,流线、流线、路径线 和条纹线是相同的。

一,manim中流线的创建。

1.流线函数 

StreamLines(func, color=None, color_scheme=None, min_color_scheme_value=0,
 max_color_scheme_value=2, colors=[ManimColor('#236B8E'), ManimColor('#83C167'),
 ManimColor('#FFFF00'), ManimColor('#FC6255')], x_range=None, y_range=None,
 z_range=None, three_dimensions=False, noise_factor=None, n_repeats=1, dt=0.05, 
virtual_time=3, max_anchors_per_line=100, padding=3, stroke_width=1,
 opacity=1, **kwargs)

 

参数解释

  1. func:

    • 说明: 定义的向量场函数,应该接受并返回坐标。这是流线的核心,控制流线的形状和运动。
    • 示例:
      def func(x, y): 
          return np.array([-y, x, 0]) # 旋转流线的向量场 
  2. color:

    • 说明: 流线的基本颜色。如果未指定,则可能使用颜色列表中的颜色或默认颜色。
    • 示例:
      color=WHITE # 设置流线的颜色为白色 
  3. color_scheme:

    • 说明: 定义流线颜色的方案,通常基于向量场的值。常用的方案包括“viridis”,“plasma”等。
    • 示例:
      color_scheme='viridis' # 使用预定义的颜色方案 
  4. min_color_scheme_value:

    • 说明: 颜色方案的最小值,控制颜色映射的起点。
    • 示例:
      min_color_scheme_value=0 # 最小的颜色值 
  5. max_color_scheme_value:

    • 说明: 颜色方案的最大值,控制颜色映射的终点。
    • 示例:
      max_color_scheme_value=2 # 最大的颜色值 
  6. colors:

    • 说明: 用于流线的颜色列表,允许用户定义具体使用的颜色。
    • 示例:
      colors=[ManimColor('#236B8E'), ManimColor('#83C167'),
       ManimColor('#FFFF00'), 
      ManimColor('#FC6255')] 
  7. x_range:

    • 说明: 流线绘制的 x 轴范围,用于限制绘制区域。
    • 示例:
      x_range=[-3, 3] # x 轴范围从 -3 到 3 
  8. y_range:

    • 说明: 流线绘制的 y 轴范围。
    • 示例:
      y_range=[-3, 3] # y 轴范围从 -3 到 3 
  9. z_range:

    • 说明: 当 three_dimensions=True 时,限制 z 轴的范围。
    • 示例:
      z_range=[-1, 1] # z 轴范围从 -1 到 1 
  10. three_dimensions:

    • 说明: 布尔值,指示流线是否在三维空间中绘制。
    • 示例:
      three_dimensions=True # 在三维空间中绘制流线 
  11. noise_factor:

    • 说明: 引入随机性以模拟更自然的流动模式。可以帮助增强真实感。
    • 示例:
      noise_factor=0.1 # 添加少量噪声 
  12. n_repeats:

    • 说明: 指定起始点的重复次数,影响流线的密集程度。
    • 示例:
      n_repeats=5 # 重复起始点5次 
  13. dt:

    • 说明: 模拟的时间步长,较小的值意味着更多的模拟步骤和较平滑的结果。
    • 示例:
      dt=0.05 # 设置时间步长为0.05 
  14. virtual_time:

    • 说明: 指定模拟应该运行的虚拟时间单位,控制动画的持续时间。
    • 示例:
      virtual_time=3 # 设置虚拟时间为3单位 
  15. max_anchors_per_line:

    • 说明: 设置构成单条流线的最大锚点数量,影响流线的复杂程度。
    • 示例:
      max_anchors_per_line=100 # 每条流线最多100个锚点 
  16. padding:

    • 说明: 向量场周围的间距,有助于可视化以防止流线过于靠近边缘。
    • 示例:
      padding=3 # 设置3个单位的间距 
  17. stroke_width:

    • 说明: 控制流线的宽度,允许用户自定义外观。
    • 示例:
      stroke_width=2 # 流线的宽度为2个单位 
  18. opacity:

    • 说明: 控制流线的透明度,通过调节来实现层叠效果。
    • 示例:
      opacity=0.8 # 设置透明度为80% 
  19. kwargs:

    • 说明: 允许传递附加参数,这些参数可能是特定于某个实现的或提供额外的自定义选项。
    • 示例:
      additional_param='some_value' # 任意附加参数 

示例代码

以下是使用 StreamLines 的代码示例,包含所有参数:

from manim import *  

class StreamLinesExample(Scene):  
    def construct(self):  
        # 定义向量场函数  
        # pos 是一个包含 x 和 y 的位置向量  
        # 这个函数会计算出一个二次元矢量,用于指定在该位置的流线方向和强度  
        # np.sin(pos[0]) * UR: 基于 x 坐标生成一个朝向右上方的分量  
        # np.cos(pos[1]) * LEFT: 基于 y 坐标生成一个朝向左的分量  
        # pos / 5: 将位置归一化,使得位置对流动的影响比较小  
        func = lambda pos: np.sin(pos[0]) * UR + np.cos(pos[1]) * LEFT + pos / 5  

        # 创建流线对象  
        streamlines = StreamLines(  
            func,  # 向量场函数  
            color=RED,  # 流线的颜色  
            color_scheme='viridis',  # 颜色方案用来色彩的过渡  
            min_color_scheme_value=0,  # 颜色方案的最小值  
            max_color_scheme_value=2,  # 颜色方案的最大值  
            colors="#ece6e2",  # 流线的基础颜色  
            x_range=[-3, 3],  # x轴范围  
            y_range=[-3, 3],  # y轴范围  
            z_range=[-1, 1],  # z轴范围(在三维情况下)  
            three_dimensions=True,  # 是否使用三维  
            noise_factor=0.1,  # 噪声因子,影响流线的随机性  
            n_repeats=5,  # 每个点生成的流线数  
            dt=0.05,  # 时间步长,用于模拟流动  
            virtual_time=3,  # 虚拟时间,用来控制流线的显示时长  
            max_anchors_per_line=100,  # 每条流线的最大锚点数量  
            padding=3,  # 流线的填充  
            stroke_width=2,  # 流线的宽度  
            opacity=0.8  # 流线的不透明度  
        )  
        
        # 将流线添加到场景中  
        self.add(streamlines)  
        # 使用 Create 动画来呈现流线效果  
        self.play(Create(streamlines), run_time=3)

 示例2:

class BasicUsage(Scene):
    def construct(self):
        func = lambda pos: ((pos[0] * UR + pos[1] * LEFT) - pos) / 3
        a=(StreamLines(func))
        self.play(a.create())

示例3: 

from manim import *

class SpawningAndFlowingArea(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[0]) * UR + np.cos(pos[1]) * LEFT + pos / 5
        stream_lines = StreamLines(
            func, x_range=[-3, 3, 0.2], y_range=[-2, 2, 0.2], padding=1
        )

        spawning_area = Rectangle(width=6, height=4)
        flowing_area = Rectangle(width=8, height=6)
        labels = [Tex("Spawning Area"), Tex("Flowing Area").shift(DOWN * 2.5)]
        for lbl in labels:
            lbl.add_background_rectangle(opacity=0.6, buff=0.05)

        self.add(stream_lines, spawning_area, flowing_area, *labels)

二, 函数方法:

1.crrate函数

create(lag_ratio=None, run_time=None, **kwargs)

该函数用于创建动画,使得对象在场景中展示出来。

参数说明:
  • lag_ratio: 控制动画执行的延迟程度。值在 [0, 1] 之间。较大的值会使得效果看起来更有延迟感,例如可以给每个对象增加一个延迟效果。
    • 示例lag_ratio=0.5 设置对象动画的延迟为 50%。
  • run_time: 动画运行的时间(以秒为单位)。可以用来控制动画的速度。
    • 示例run_time=2 设置动画运行时间为 2 秒。
  • **kwargs: 其他关键字参数,通常用于设置动画的具体行为或效果。例如,可以调用其他动画的额外参数,如 stroke_color 来改变线条颜色。

示例:

self.play(Create(circle, lag_ratio=0.1, run_time=2)) 

这个示例创建一个圆的动画,在 2 秒内完成,并且对象间有 0.1 的延迟效果。


 2.end_animation函数

end_animation()

 end_animation 是在动画中用于结束或停止动画的方法。具体的使用和效果可能因具体的动画库或框架而异。不过,通常情况下,这个方法会用来清理动画状态、结束当前动画的运行,并可能退回到初始状态或切换到某个结束状态。

以下是一般性说明:

功能:
  • 结束当前动画的执行。
  • 清理与动画相关的资源或状态。
  • 可能用于将场景中对象恢复到原始状态。
使用场景:
  • 在执行完一系列动画后,可以调用该方法来确保所有动画都妥善结束。
  • 用于在某些条件下强制停止正在运行的动画。

示例:

self.animate_object() # 开始动画 # 一些操作 
self.end_animation() # 结束动画 
注意事项:
  • 确保在合适的时间调用 end_animation() 以避免状态不一致,比如在动画完成后或在出现错误需要强制停止时。
  • 不同的动画库可能有不同的实现,确保查看相关文档以了解其确切用途。

 

3. start_animation函数

start_animation(warm_up=True, flow_speed=1, time_width=0.3, rate_func=<function linear>,
 line_animation_class=<class 'manim.animation.indication.ShowPassingFlash'>, **kwargs)

该函数用于启动流动动画。

参数说明:
  • warm_up: 一个布尔值,控制是否在动画开始前进行预热。预热可以使得动画初期更平滑。

    • 示例warm_up=True 会在开始动画之前预热。
  • flow_speed: 表示流动动画的速度。值越大,流动越快。通常使用一个比例值。

    • 示例flow_speed=2 表示流动的速度是正常速度的两倍。
  • time_width: 控制动画在时间维度上的宽度,影响流动的持续时间。值越大,流动的时间宽度越长。

    • 示例time_width=0.5 表示动画在时间维度上更宽。
  • rate_func: 一个函数,用于控制动画随着时间变化的方式。可以使用内置的函数如 linearsmooth, 或者自定义的 easing 函数。

    • 示例rate_func=there_and_back 表示动画会先前进然后再退回。
  • line_animation_class: 指定用来进行线条动画的类。默认是 ShowPassingFlash,可以替换成其他的动画类来改变效果。

    • 示例line_animation_class=ShowIncreasingSubsets 使用不同的动画类来展示。
  • **kwargs: 其他参数,通常用来传递特定控制动画的额外选项,具体取决于line_animation_class。

示例:

self.start_animation(warm_up=True, flow_speed=1.5,
 time_width=0.5, rate_func=smooth) 

这个示例准备启动流动动画,使用 1.5 的流动速度,时间宽度为 0.5。动画的变化速率采用平滑效果。


应用实例 1:

class StreamLineCreation(Scene):
    def construct(self):
        func = lambda pos: (np.sin(pos[0]) * UR + np.cos(pos[1]) * LEFT) - pos
        stream_lines = StreamLines(
            func,
            color=YELLOW,
            x_range=[-7, 7, 1],
            y_range=[-4, 4, 1],
            stroke_width=3,
            virtual_time=1,  # use shorter lines
            max_anchors_per_line=5,  # better performance with fewer anchors
        )
        self.play(stream_lines.create())  # uses virtual_time as run_time
        self.wait()

 应用实例 2:

from manim import *

class EndAnimation(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[0] / 2) * UR + np.cos(pos[1] / 2) * LEFT
        stream_lines = StreamLines(
            func, stroke_width=3, max_anchors_per_line=5, virtual_time=1, color=BLUE
        )
        self.add(stream_lines)
        stream_lines.start_animation(warm_up=False, flow_speed=1.5, time_width=0.5)
        self.wait(1)
        self.play(stream_lines.end_animation())

  应用实例 3:

from manim import *

class ContinuousMotion(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[0] / 2) * UR + np.cos(pos[1] / 2) * LEFT
        stream_lines = StreamLines(func, stroke_width=3, max_anchors_per_line=30)
        self.add(stream_lines)
        stream_lines.start_animation(warm_up=False, flow_speed=1.5)
        self.wait(stream_lines.virtual_time / stream_lines.flow_speed)

总结:

这些参数允许有效地控制动画的性质,包括持续时间、流动速度、延迟情况、以及整体动画表现的风格和流动特性。通过调整这些参数,您能够创建出更丰富、更动感的动画效果。如果您还有其他疑问或需要进一步的说明,请告诉我!

 

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在Fluent查看速度流线图,您可以按照以下步骤操作: 1. 首先,您需要加载您的模型和网格,并设置求解器选项。 2. 在Fluent的界面上,选择“Graphics”菜单并点击“Contours”。 3. 在Contour菜单,选择您要绘制的变量,例如速度。 4. 在Contour菜单,选择“Streamlines”。 5. 在Streamlines菜单,选择您要绘制的变量,例如速度,并设置一些流线图的选项,例如线宽、线条颜色等。 6. 点击“Display”按钮以显示流线图。 7. 您可以使用缩放和旋转工具来查看流线图。 8. 您还可以使用其他工具来编辑和修改流线图,例如添加标签、更改颜色等。 请注意,以上步骤可能因Fluent的版本而有所不同。 ### 回答2: Fluent是一种流体力学分析软件,可以用于模拟和研究流体流动和传热现象。在使用Fluent进行流线图查看时,速度流线图常用于显示流体在流动过程的速度分布和流线形状。 通过Fluent的速度流线图功能,可以直观地展示流体的流动情况。在查看速度流线图时,我们可以根据自己的需求设置参数,如流体流动速度、边界条件等。 在软件设置好参数后,Fluent会根据流体力学原理进行计算,并将结果以图像的形式展示出来。速度流线流线的形状和密度表示了流体流动的方向、速度大小和变化情况。我们可以通过观察图流线,了解流体在不同区域的流动速度和流线的分布情况。 同时,Fluent还提供了一些交互式工具,可以对速度流线图进行进一步分析。比如,我们可以选择特定的区域进行放大查看,或者切换到二维或三维视图来更全面地了解流体的流动情况。这些工具可以帮助我们更加准确地分析和理解流体的行为。 总之,Fluent的速度流线图功能提供了一种直观、可视化的方法来观察和分析流体流动情况。通过查看速度流线图,我们可以深入了解流体的速度分布、流线形状和流动变化,从而为相关领域的研究和应用提供重要的参考和指导。 ### 回答3: fluent查看速度流线图是一种用于显示流体流动速度的可视化方法。在流体力学研究流体流动速度是一个重要的参数,而速度流线图可以帮助我们直观地理解和分析流体流动的特征。 fluent软件是一种常用的计算流体力学(CFD)分析工具,它可以进行流体流动的数值模拟和分析。通过使用fluent,用户可以得到流体流动的速度场分布数据。 通过fluent查看速度流线图,用户可以将速度场数据直观地可视化。在流体流动区域内,根据速度的大小和方向,可以得到一系列的流线流线可以形象地描述流体在不同位置的速度变化。速度越大,流线越密集;速度越小,流线越稀疏。通过观察流线的分布,我们可以了解流体的流动速度及其变化规律,例如涡旋的形成位置和大小、流体的分离点、流动的交汇点等等。 利用fluent查看速度流线图,研究人员可以得到关于流体流动性质的重要信息,如流体的速度分布、流动的方向和流动的路径等。这些信息对于工程设计、流体优化和流动控制具有重要意义。通过分析速度流线图,我们可以改进工程设备的设计,减少能耗和压力损失;可以优化流体的运输和传递过程,提高流体的运动效率;还可以研究流体流动的稳定性和不稳定性,为相关领域的科学研究提供参考。 总而言之,通过fluent查看速度流线图,我们可以直观地了解流体流动的速度特性和规律,为流体力学研究和工程应用提供有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值