Skip to main content

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=QxPy\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=(RyQz,PzRx,QxPy)\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

Live Editor
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)
}
Live Editor
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)
}