Giter Club home page Giter Club logo

vectorflow's Introduction

Vectorflow is a tool designed for visualizing vector fields using a 2D field equation. It represents the velocity of each point in the field with a particle that traces a path. This project and guide draw inspiration from Anvaka's Fieldplay repository. The entire project is written in Rust and compiled to Web Assembly. Try it out on nyberg.dev/vectorflow/

field field 2 field 3 field 4

What?

Let's assign to every point on a grid a vector (1, 0). This means we have an arrow, pointing to the right:

Vector field V(1, 0)

Let's pretend these vectors represent velocity. What if we drop a thousand particles onto this grid? How would they move?

Moving particles in V(1, 0)

When we assigned a vector to each point on the plain, we created a mathematical structure called Vector Field.

Let's create a bit more interesting vector field:

  • Points with even y coordinate get vector (1, 0);
  • Points with odd y coordinate get an opposite vector (-1, 0);

Even odd directions

Again we drop a few thousands particles and see what happens:

Moving even odd directions

The field above can be written in a single formula:

(
50 * (floor(y/100) % 2) - 25
,
0.0
)

The floor function effectively rounds down all y values to the nearest integer. As a result, the first 100 pixels assume the value 0, the subsequent 100 pixels take on the value 1, and so forth. By applying the modulo of 2 to these values, we obtain 0 for even numbers and 1 for odd numbers. We then manipulate this remainder to generate a final vector, which is either (-25, 0) or (25, 0).

Up until now, we've exclusively utilized one component of the velocity vector, specifically x, causing the particles to move solely horizontally. Let's experiment with configuring both components and observe the outcomes.

(
50 * (floor(y/100) % 2) - 25
,
50 * (floor(x/100) % 2) - 25
)

Field x, y Animated field x, y

Wow! Two simple operations, and the final animation looks like an art piece!

Field x, y

Vector fields turns out to be very flexible generative framework.

Parser Syntax

The parser function utilizes the x and y coordinates as well as the distance from the origin r and the angle with the x-axis a of each pixel to compute the corresponding vector, it also has the ability to use the t variable to create time-dependent fields where t is measured in seconds, and resers every minute. Furthermore, it offers the following functionalities:

constants:
pi  // 3.141592653589793
e   // 2.718281828459045

variables:
x
y
t  // time in seconds
r  // distance from origin
a  // angle with the x-axis

Single variable functions:
sin(x)
cos(x)
tan(x)
sqrt(x)   // square root
abs(x)    // absolute value
sgn(x)    // signum function
floor(x)  // round down
ceil(x)   // round up

Two variable functions:
a + b
a - b
a * b
a / b
a ^ b  // power
a % b  // modulo
len(x1, y2, x2, y2)  // distance between two points

Cool Examples

Here are some cool example, feel free to suggest some yourself!

Dipole

(
x*y/1000
,
(y*y - x^2)/1000
)

Swirls

(
x+r * sin(sqrt(r))
,
y+r * cos(sqrt(len(x,x)))
)

Black Hole

(
y/(r^2/100000 - 0.001*x)
,
-x/(r^2/10000 - 0.001*y)
)

Mosaic

(
10*sin(y/100 + x/1000)*t
,
10*cos(x/100 - y/1000)*t
)

Eye

(
x*cos(abs(sin(t/4))*600/r) - y*sin(abs(sin(t/4))*600/r)
,
x*sin(abs(sin(t/4))*600/r) + y*cos(abs(sin(t/4))*600/r)
)

Radar

(
-y + (1-((x*sin(t) + y*cos(t))/abs(x*sin(t) + y*cos(t))))^10*x
,
x  + (1-((x*sin(t) + y*cos(t))/abs(x*sin(t) + y*cos(t))))^10*y
)

vectorflow's People

Contributors

grishavar avatar isaknyberg avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.