Coder Social home page Coder Social logo

jasonwebb / 2d-space-colonization-experiments Goto Github PK

View Code? Open in Web Editor NEW
186.0 186.0 16.0 7.17 MB

Visual experiments exploring space colonization as a 2D morphogenesis tool.

Home Page: https://jasonwebb.github.io/2d-space-colonization-experiments/

License: Other

HTML 4.85% JavaScript 94.42% CSS 0.72%
2d creative-coding generative-art hyphae javascript leaf-venation morphogenesis space-colonization space-colonization-algorithm

2d-space-colonization-experiments's Issues

Improve branch thickness implementation

Right now the thickness of a branch is varied per segment by setting the stroke thickness of the line that gets drawn. This has a side effect of causing the segments not to join up perfectly since each segment is a discrete line with its own thickness. This problem is especially visible when there are sharp angles between segments.

Look into implementing branch thickness in a continuous way, maybe using ribbons or isolines.

Add License Info

Hello,

great repo and article! I think adding a license could be helpful for people that want to use the code properly.

Find way to keep distant auxin sources alive in closed venation

Right now for closed venation, any sources that are not influencing any nodes are immediately removed. This causes vein clusters to be pretty small and not grow indefinitely.

Try adding a "fresh" flag when the sketch starts, then set to false when it begins influencing nodes so it only disappears after its influenced some.

SVG export

Hi Jason,
On the obstacles experiment, I am not able to get a working SVG exported using "e".

Create a playful UI for non-technical users

See Defaults.js for a list of global parameters that can be changed within sketches for different effects.

Feature wishlist

  • Toggle type of venation - open or closed.
    • VenationType = values are either 'Open' or 'Closed'
  • Draw simple primitive shapes and set them as either "bounds" or "obstacle" shapes
    • A simple MS Paint kind of interface would be just fine
    • These shapes would be Path objects assigned to the Network through the internal arrays network.bounds and network.obstacles
    • Auxin sources should only be allowed to spawn inside of bounds, and outside of obstacles. Sources may need to be reset when a bounds or obstacle is added or changed.
  • Allow freehand drawing of bounds or obstacle shapes
    • Click and hold to draw shape
    • All paths must be closed, so maybe automatically connect the last point to the first point on mouse up
  • Allow users to paint auxin sources with their mouse (these are what the veins grow towards)
  • Toggle auxin flux canalization (vein thickening) (see EnableCanalization)
  • Toggle opacity blending (see EnableOpacityBlending)
  • Click to add root vein nodes
    • BONUS: integrate a color picker so veins can be colored differently
  • Buttons to start, stop, or reset the simulation (see IsPaused and the resetNetwork() method in any sketch)
  • Custom colors for background, veins, bounds, and obstacles
    • See Colors variable, which references objects stored in ColorPresets.js
  • Buttons to toggle visibility of veins, bounds, obstacles, and other effects (see Defaults.js)
  • Rendering style - either 'Lines' or 'Dots' (see VeinRenderMode)

Advanced features

  • Attraction zone radius
    • See AttractionDistance
    • Smaller values can improve performance, but will also make things look slightly different.
  • Kill zone radius
    • See KillDistance
    • Higher values tend to improve performance but creates visible gaps in the "closed" venation style.
  • Vein thickness
    • See VeinThickness
  • SVG export would be cool, but the current export process doesn't cope well with large vein networks, which happen a lot. If it can be improved, this would be a good feature to expose in the UI.

Find way to fully join converging veins

Right now multiple veins that are converging on a single source do not actually connected together once they enter the source's kill zone. With a sufficiently small kill zone the veins can appear to be joined, but actually aren't.

My intuition is that once veins enter the kill zone of a source, they are more or less pointed straight at the center of the source. So maybe the veins can be extended with a straight line segment to reach the source's center.

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.