メインコンテンツまでスキップ

curl: Vector Field Flow Analysis

Advanced Flow Pattern Generation Through Differential Calculus​

The curl function computes the rotational characteristics of vector fields generated from noise functions. This mathematical operator calculates the circulation density at each point in a field, creating natural swirling and turbulent patterns essential for fluid dynamics simulation.

Mathematical Foundation​

For a 2D vector field F⃗(x,y)=(P(x,y),Q(x,y))\vec{F}(x,y) = (P(x,y), Q(x,y)), the curl operation is defined as:

curl F⃗=∂Q∂x−∂P∂y\text{curl } \vec{F} = \frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y}

For 3D vector fields F⃗(x,y,z)=(P,Q,R)\vec{F}(x,y,z) = (P, Q, R), the curl becomes:

∇×F⃗=(∂R∂y−∂Q∂z,∂P∂z−∂R∂x,∂Q∂x−∂P∂y)\nabla \times \vec{F} = \left(\frac{\partial R}{\partial y} - \frac{\partial Q}{\partial z}, \frac{\partial P}{\partial z} - \frac{\partial R}{\partial x}, \frac{\partial Q}{\partial x} - \frac{\partial P}{\partial y}\right)

The implementation uses finite differences with step size ϵ=0.1\epsilon = 0.1 to approximate these partial derivatives numerically.

Function Variants​

FunctionInput TypeOutput TypePurpose
curlVec2vec2vec22D flow field analysis
curlVec3vec3vec33D turbulence patterns
curlVec4vec4vec3Time-varying flow evolution

Implementation​

ライブエディター

const fragment = () => {
      const p = uv.mul(4)
      const flow = curlVec2(p.add(iTime.mul(0.1)))
      const angle = flow.y.atan2(flow.x).add(float(3.14159)).div(float(3.14159).mul(2))
      return vec4(flow, angle, 1)
}
結果
Loading...
ライブエディター

const fragment = () => {
      const p = vec3(uv.mul(3), iTime.mul(0.2))
      const vorticity = curlVec3(p)
      const magnitude = vorticity.length()
      const color = vorticity.abs().normalize().mul(magnitude).pow(vec3(0.7))
      return vec4(color, 1)
}
結果
Loading...