Ai Dreams Forum

Artificial Intelligence => General AI Discussion => Human Computer Interaction => Topic started by: ivan.moony on February 04, 2018, 11:19:12 am

Title: Fractal Orbit
Post by: ivan.moony on February 04, 2018, 11:19:12 am
Fractal Orbit is a project that has some connection to representing structured data on 2D screen. Data can be anything, from textbooks, over source code, over business databases, over knowledge base representation. As knowledge base is directly connected to AI, I thought  this is the right place to share this project.

(http://aidreams.co.uk/forum/index.php?action=dlattach;topic=12849.0;attach=9093;image)

It is about representing knowledge trees in a way that reminds me of fractals. Children nodes orbit around parent nodes, while adjusting their magnification to fit between outer and inner circle. Clicking a child node zooms in its circle together with its grandchild nodes. Clicking a central parent node zooms out, back to the grandparent circle node. It should be interesting to follow node links in and out from one tree node to another, even across indirectly connected nodes of the tree.

I think it would look cool on round smart watches :)
Title: Re: Fractal Orbit
Post by: Freddy on February 04, 2018, 02:52:27 pm
Interesting - is this a project by yourself Ivan ?
Title: Re: Fractal Orbit
Post by: ivan.moony on February 04, 2018, 03:49:06 pm
Thank you, Freddy.

Yes, it is another project of mine in development. I plan to use it as a structural editor for a logic framework I'm developing (still have to inform you about progress), but I may also find another, less interesting uses, I'll see.  Like in arranging chapters and sub-chapters of markdown (https://en.wikipedia.org/wiki/Markdown) documents inside circles (documentation), or in arranging forum like conversations in a structured way (collaboration), or in knowledge versioning (parallel domain universes). It is about trees of data, and as such, it should fit anywhere in the information world, which means AI knowledge base in my primary interest. I'm also excited about possibility of crowdsource powered building of ontologies (https://en.wikipedia.org/wiki/Ontology_(information_science)) (like Sumo or WordNet).
Title: Re: Fractal Orbit
Post by: Zero on February 04, 2018, 06:19:08 pm
I really like it, congratulations!

It would probably fit well in a "touch" environment: various gestures would rotate, zoom in/out, translate, and edit.
Title: Re: Fractal Orbit
Post by: ranch vermin on February 04, 2018, 11:37:17 pm
I love this project of yours Ivan, I also love fractals.

Each level is a magnification of the level before, and its actually the same as multiplication.   But ur different levels dont have to just be a repeat if ur using it for data purposes.

But I dont believe in your ability to understand this subject, if you dont take advantage of the compressability here, and i think youve bunged your project. :)
Title: Re: Fractal Orbit
Post by: keghn on February 05, 2018, 12:50:38 am
 I really like circles and kirigami folds:

https://www.youtube.com/watch?time_continue=1&v=spUNpyF58BY   
Title: Re: Fractal Orbit
Post by: Zero on February 05, 2018, 08:38:59 am
I love this project of yours Ivan, I also love fractals.

Each level is a magnification of the level before, and its actually the same as multiplication.   But ur different levels dont have to just be a repeat if ur using it for data purposes.

But I dont believe in your ability to understand this subject, if you dont take advantage of the compressability here, and i think youve bunged your project. :)
The fractal is not in the dataset, but in the presentation of the dataset. Only the interface is fractal-like. Well, the dataset can be fractals.

It reminds me the design of a wonderful game named The Machine (https://www.facebook.com/FarstallGames/).

Ivan.moony if you can make it as a "universal" pluggable UI tool, you'd make a lot of people veeery happy!
 ;)
Title: Re: Fractal Orbit
Post by: ivan.moony on February 05, 2018, 11:18:15 am
The thing initially really slowed down even at some low recursion level like four or five. If each level has, say 100 children, then the first level has 100 nodes, second 100 * 100, third 100 * 100 * 100, and so on. That is very steep exponential curve, which I solved by measuring a radius of each node. If the radius is less than 2.5 pixels, I don't enter the recursion, and things get fast enough to get a static image.

Calculating positions and radiuses was a tricky thing. I tried to make it mathematically correct, but when I entered a system of equations to Wolfram Alpha, I got two pages long solutions. I also tried an option of making inner and outer circles concentric, drawing child circles each with the same smaller fit radius, then 3D rotating the whole thing, so the near circles get big, and far ones small. This was also unacceptable, as there was a big focus distorsion of coordinates on very near circles.

I finally settled down with binary search of x, y and r. First I set bounds on minimum and maximum coordinates and radius, then I check if circles intersect, and that is a case when:
If there is an intersect, I half the position and radius in one direction. If there is no intersect, I half the position and radius in the other direction. After some 16 steps for each circle (I actually measure a pixel precision to stop the binary search), I get coordinates and radius precise enough to draw it without noticing an error in approximation. Surprisingly, this is a very fast method, probably faster than getting mathematically correct model because each calculation step is very simple.

More or less I'm done with the static part (the posted image is actual browser screenshot), but I still have to make it responsible to mouse drags and clicks. Also, each node will probably have a user defined HTML to draw it at certain magnification level (I still have to check the speed of this perversion).

Then It probably goes to Github, but I'll give it another thought after it's finished.

[Edit] I attached another screenshot...
Title: Re: Fractal Orbit
Post by: Zero on February 05, 2018, 01:45:13 pm
Man you're my god.

If it's a little cpu-intensive, maybe a web worker (https://www.w3schools.com/HTML/html5_webworkers.asp) can do part of calculations in the background, so you stay sanely responsive.
Title: Re: Fractal Orbit
Post by: ivan.moony on February 05, 2018, 03:39:42 pm
Quote
Man you're my god.
Thank you, but a simple `like` would be enough for me. No need for exaggerating.

If it's a little cpu-intensive, maybe a web worker (https://www.w3schools.com/HTML/html5_webworkers.asp) can do part of calculations in the background, so you stay sanely responsive.
Webworkers are cool, but I think a bit heavyweight if you use a lot of short threads. Anyway, I might try it if necessary.
Title: Re: Fractal Orbit
Post by: WriterOfMinds on February 05, 2018, 09:05:22 pm
Neat idea.  Is it compatible with trees that feature multiple inheritance, or is it necessary that each child only have one parent?
Title: Re: Fractal Orbit
Post by: ivan.moony on February 05, 2018, 09:49:15 pm
Neat idea.  Is it compatible with trees that feature multiple inheritance, or is it necessary that each child only have one parent?
Thank you WriterOfMinds, very kind of you :)

One parent limitation is not necessary if we don't want it. So, how could multiple parents be created? Suppose we have a tree:
Code
node-1 {
    node-1-1 {
        node-1-1-1,
        node-1-1-2,
        node-1-1-3
    },
    node-1-2, {
        node-1-2-1,
        node-1-2-2,
        reference-to-node-1-1
    },
    node-1-3 {
        reference-to-note-1-1
    }
}
From this tree it follows that `node-1-1` has three parents: initial `node-1` by definition place, and nodes `node-1-2` and `node-1-3` by referencing places.

I'm sure there are other methods too, but this one is the best I have for now. May I ask would this be compatible with Acuitas' knowledge base?
Title: Re: Fractal Orbit
Post by: LOCKSUIT on February 05, 2018, 11:47:53 pm
Connections? Connect one orb/ball to another far away one, with a weight/strength, that adapts with time. ???
Title: Re: Fractal Orbit
Post by: Zero on February 06, 2018, 10:44:08 am
Oh God... ;)
For multiple parents, "up" could mean parent and "down" could mean child. When dragging, the thing would move as if it was projected on a sphere.
Title: Re: Fractal Orbit
Post by: Art on February 06, 2018, 03:31:54 pm
Nice but some of us do not use Facebook so that Machine reference was just a glance.

Good fractal work!
Title: Re: Fractal Orbit
Post by: WriterOfMinds on February 06, 2018, 04:23:35 pm
Quote
For multiple parents, "up" could mean parent and "down" could mean child. When dragging, the thing would move as if it was projected on a sphere.

That's what I was mainly getting at with my question about multiple inheritance ... if a circle has multiple parents, how does it get drawn?  Would it and its children be duplicated in more than one place, or ... ?

Quote
May I ask would this be compatible with Acuitas' knowledge base?

Possibly.  Acuitas' knowledge is more of a sprawling directed graph than a collection of trees, though, so I wonder if it would be presented well by this visualization.
Title: Re: Fractal Orbit
Post by: Zero on February 06, 2018, 04:57:07 pm
Thinking about it, as it is today, "inside" means parent and "outside" means child. So after all, multiple inheritance should mean "multiple insides". I don't know how it would translate visually in 2D though. I guess 2D is inherently reaching its limits here.

https://www.youtube.com/watch?v=9yW--eQaA2I

 :o Insane stuff.

A 2D interface showing only "slices" of data would be hard to use.
Title: Re: Fractal Orbit
Post by: ivan.moony on February 06, 2018, 06:44:44 pm
... if a circle has multiple parents, how does it get drawn?  Would it and its children be duplicated in more than one place, or ... ?
What are even the options?
Title: Re: Fractal Orbit
Post by: WriterOfMinds on February 06, 2018, 11:09:41 pm
One approach would be replication ... drawing a copy of the child circle next to each of its parents. Another would be to draw the child circle only once, but get it to touch or connect with each of the parents. I think Zero is suggesting some sort of folding or curvature through 3D space to accomplish this.  It sounds hard.
Title: Re: Fractal Orbit
Post by: ivan.moony on February 06, 2018, 11:44:58 pm
Another would be to draw the child circle only once, but get it to touch or connect with each of the parents.
Possible, but UI gets complicated up when introducing new kind of links. How about simply drawing another, inexisting child, to label it "parents", and to put all the multiple parent references in orbit around it?

I think Zero is suggesting some sort of folding or curvature through 3D space to accomplish this.  It sounds hard.
My brain gets intricated when thinking about higher dimensions  :o
Title: Re: Fractal Orbit
Post by: ranch vermin on February 07, 2018, 07:48:00 am
Look up fractal compression,  but it doesnt look that helpful to me,   but I dont want to share my actual idea because its too precious to me.

But I will say this->

If I were to do video compression with fractals,   id put the next image inside of the last image, and would come to a really large picture at the end.

Putting things inside things, so it comes out in a zoom.

Interesting stuff!
Title: Re: Fractal Orbit
Post by: ranch vermin on February 07, 2018, 09:08:55 am
Just think, if you had a scale invarient key,  you could use this to capture the up close parts to the distant parts that are similar to it,  and use the exact same photo patch for both.

This works i think,  it was a part of my automatic 3d system,  and it would also do this "scope like" compression,  of seeing the same thing over and over and at different scales.

I know alot more too,  but I have to keep it secret.  But fractals are really amazing.


[edit]
here i found this. https://www.youtube.com/watch?v=k_0owN2E8-E
Title: Re: Fractal Orbit
Post by: ivan.moony on February 07, 2018, 01:37:10 pm
Rotating 4D cube:
https://www.youtube.com/watch?v=5xN4DxdiFrs (https://www.youtube.com/watch?v=5xN4DxdiFrs)
Title: Re: Fractal Orbit
Post by: keghn on February 07, 2018, 03:37:54 pm

Fractal music: explore musical patterns: 

https://www.raspberrypi.org/magpi/fractal-music-explore-musical-patterns/ 

Title: Re: Fractal Orbit
Post by: WriterOfMinds on February 07, 2018, 06:47:04 pm
Quote
How about simply drawing another, inexisting child, to label it "parents", and to put all the multiple parent references in orbit around it?

So references to extra parents would be drawn like additional children (or grandchildren)? In a sense that inverts the organizational hierarchy, but it might work out just fine.
Title: Re: Fractal Orbit
Post by: ivan.moony on February 07, 2018, 10:20:26 pm
Just polishing some static rotation details. Should be better organized now.

I think I'll save some time for the next week to get into dynamics.
Title: Re: Fractal Orbit
Post by: ranch vermin on February 07, 2018, 11:49:36 pm
sorry for bringing up all this data stuff about fractals...   i can see your just making some nice patterns,  i always overblow things woops.
Title: Re: Fractal Orbit
Post by: ivan.moony on February 07, 2018, 11:56:47 pm
It is really nothing complicated. First I range over orbit circles. If a circle is bigger than 5 pixels, I draw surrounding bounds and step into recursion. If it is less than 5 pixels, I just draw bounds and skip to the next circle. What will be finally drawn inside circles (as data) will completely depend upon end programmer, I'll just scale it to fit bounds.
Title: Re: Fractal Orbit
Post by: ivan.moony on February 23, 2018, 06:01:46 pm
WriterOfMinds, you asked about showing multiple parents.

I've been composing some combinations, and l think the first image could be some solution.

The second image is there just for its aesthetic value, magnification decay could be too big to hold anything useful, but I find the pattern beautiful.

In both cases it is the same algorithm, but with different magnification decays.
Title: Re: Fractal Orbit
Post by: ranch vermin on February 24, 2018, 12:49:39 am
beautiful piece there,  maybe it could be a basis for a game.   when I do my 3d fractals I could use them as a terrain for a wargame.
Title: Re: Fractal Orbit
Post by: ivan.moony on July 28, 2018, 11:55:01 am
Here is a source code for static part of the project. It renders the orbit inside browser. I didn't catch a time to finish dynamic rotation stuff, but if anyone wants to build up upon the static part, they are very welcome.

orbital.html:
Code
<!DOCTYPE html>
<!--?xml version="1.0"?-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Orbital</title>
    <style type="text/css" media="screen">
        html, body, div, svg
        {
          overflow: hidden;
          height: 100%;
          width: 100%;
          margin-top:0px;
          margin-left:0px;
    }
    </style>
    <body>
        <div id="intro">
        <svg><!-- viewBox="0 0 400 400" transform='scale(1, 1)'-->
        </svg>
        </div>
        <script src="orbital.js"></script>
        <script>
            orbital(document.getElementsByTagName('svg')[0]);
        </script>
    </body>
</html>

orbital.js:
Code
function orbital (svg) {
    "use strict";

    var ratio = 0.5;//575;
    var minRadius = 0.5;
    var branchCount = 42;
    var pixelPrecision = 1 / 32;
    var fill1 = "rgb(255, 255, 150)";//"lightgray";
    var stroke1 = "gray";
    var fill2 = stroke1;
    var stroke2 = fill1;
    var svgns = "http://www.w3.org/2000/svg";

    function insertGroup () {
        var g;
        g = document.createElementNS(svgns, "g");
        g.setAttribute('id', 'group');
        g.setAttribute('shape-rendering', 'inherit');
        g.setAttribute('pointer-events', 'all');
        return g;
    }
   
    function insertCircle (x, y, r, fill, stroke) {
        var el = document.createElementNS(svgns, 'ellipse');
        el.setAttribute('cx', x * squashX);
        el.setAttribute('cy', y * squashY);
        el.setAttribute('rx', r * squashX);
        el.setAttribute('ry', r * squashY);
        el.setAttribute('fill', fill);
        el.setAttribute('stroke-width',  1);
        el.setAttribute('stroke', stroke);
        return el;
    }
   
    function insertRect (x, y, width, height, fill, stroke) {
        var rect = document.createElementNS(svgns, 'rect');
        rect.setAttribute('x', x);
        rect.setAttribute('y', y);
        rect.setAttribute('height', height);
        rect.setAttribute('width', width);
        rect.setAttribute('fill', fill);
        rect.setAttribute('stroke-width',  1);
        rect.setAttribute('stroke', stroke);
        return rect;
    }
   
    function node() {
        var children = (function () {
            return {
               alphaOffset: Math.PI,
               itemOffset: 0,
               items: (function (itemCount) {
                    var i, items;
                   
                    items = [];
                    for (i = 0; i < itemCount; i++)
                        items.push (i);
                   
                    return items;
               })(branchCount),
               
               getX: function (index) {
                   return (rLarge + rSmall) * Math.cos (-Math.PI / 2 - index * alpha);
               },

               getY: function (index) {
                   return (rLarge + rSmall) * Math.sin (-Math.PI / 2 - index * alpha);
               }
           };
        })();
           
        var render = function (minRadius, x1, y1, r1, alpha0, rec) {
            function getCircle (alpha) {
                var beta = alpha0 + alpha - Math.PI / 2;
               
                var ra = 0;
                var xa = x0 + r0 * Math.cos (beta);
                var ya = y0 + r0 * Math.sin (beta);
               
                var rb = 2 * r1;
                var xb = x0 + (r0 + rb) * Math.cos (beta);
                var yb = y0 + (r0 + rb) * Math.sin (beta);

                var dr = (rb - ra) / 2;
                var dx = (xb - xa) / 2;
                var dy = (yb - ya) / 2;
               
                ra += dr;
                xa += dx;
                ya += dy;

                var j;
                do {
                    dx /= 2;
                    dy /= 2;
                    dr /= 2;
                    var d = Math.sqrt (Math.pow ((xa - x1), 2) + Math.pow ((ya - y1), 2));
                    if (Math.abs (ra - r1) <= d) {
                        xa -= dx;
                        ya -= dy;
                        ra -= dr;
                    } else {
                        xa += dx;
                        ya += dy;
                        ra += dr;
                    }
                } while (dr > pixelPrecision);

                return {
                    x: (r0 + ra) * Math.cos (beta),
                    y: (r0 + ra) * Math.sin (beta),
                    r: ra,
                    alpha: alpha
                };
            }
           
            function getNeighbor (c1) {
                var alpha = c1.alpha / 2;
                var dalpha = alpha;
                var j;
                var datmp = 2 * Math.pow (2 * r1, 2);
                var da = Math.acos ((datmp - Math.pow (pixelPrecision, 2)) / datmp);
                do {
                    var c2 = getCircle (alpha);
                    dalpha /= 2;
                    var d = Math.sqrt (Math.pow ((c1.x - c2.x), 2) + Math.pow ((c1.y - c2.y), 2));
                    if ((c1.r + c2.r) >= d) {
                        alpha -= dalpha;
                    } else {
                        alpha += dalpha;
                    }
                } while (dalpha > da);

                return c2;
            }

            var r0 = r1 * ratio;
            var x0 = x1 + (r1 - r0) * Math.cos (alpha0 - Math.PI / 2);
            var y0 = y1 + (r1 - r0) * Math.sin (alpha0 - Math.PI / 2);

            if (r0 > minRadius) {
                var g = svg;
                g.appendChild (insertCircle (x0, y0, r0, fill1, stroke1));

                var i;
                var alpha = 4 * Math.PI / 2 - 0.3941;
   
                var c1 = getCircle (alpha);
                for (i = 0; i < branchCount; i++) {
                    if (c1.r > minRadius)
                        render (minRadius, x0 + c1.x, y0 + c1.y, c1.r, alpha0 + alpha - Math.PI, rec);
                   
                    c1 = getNeighbor (c1);
                    alpha = c1.alpha;
                }
            }
        };
       
        return {
            children: children,
            render: render
        };
    }
   
    var ww = window.innerWidth;
    var hh = window.innerHeight;
    var rr, squashX, squashY;
   
    if (ww > hh) {
        rr = hh / 2;
        squashX = ww / hh;
        squashY = 1;
       
    } else {
        rr = ww / 2;
        squashX = 1;
        squashY = hh / ww;
       
    }

    var r1 = rr;
    var x1 = ww / squashX - rr;
    var y1 = hh / squashY - rr;

    var n = node();

    var i = 8;
    var repeat = function () {
        if (i >= minRadius) {
            var s = svg.cloneNode(false);
            svg.parentNode.replaceChild(s, svg);
            svg = s;
            svg.appendChild(insertRect (0, 0, ww, hh, fill2, stroke2));
            n.render (i, x1, y1, r1, 0, 1);
            setTimeout (repeat, 0);
        }
        i/=2;
    };
    repeat();
}
Title: Re: Fractal Orbit
Post by: ivan.moony on October 08, 2018, 05:48:02 pm
Just added some dynamics. The project is now on Github, but it's still in highly experimental stage. You can test it here (https://ivanvodisek.github.io/orbiteque/index.html), though you'll need some electro-muscle to run it in a browser. Click around and drag around. Please report bugs if stumbled upon.
Title: Re: Fractal Orbit
Post by: ivan.moony on July 03, 2019, 12:54:26 pm
In the last three days (and a change) I worked out a bit the interaction with fractal orbit. I eliminated clicking and implemented navigation using only mouse dragging. Maybe it's an overkill to drag items to and from the third level and deeper, so it might be a good idea to restrict the interaction just to first and second level items, but I'm still not sure about this.

Anyway, you can test the new version here (https://ivanvodisek.github.io/Orbiteque/). Maybe you'll like it. If not, I'm open for suggestions, of course.
Title: Re: Fractal Orbit
Post by: Zero on July 03, 2019, 01:02:34 pm
I like it, well done!

I suggest adding mousewheel support :)
Title: Re: Fractal Orbit
Post by: Freddy on July 03, 2019, 01:06:25 pm
Nice  8)
Title: Re: Fractal Orbit
Post by: ivan.moony on July 04, 2019, 04:30:04 pm
I suggest adding mousewheel support :)

Maybe, I'm not sure... Something is going to be hosted inside those circles, and maybe that something should accept mouse wheel events. Maybe it should depend on the content, leaving the wheel rotating option on explicit demand when populating the UI.
Title: Re: Fractal Orbit
Post by: ivan.moony on July 09, 2019, 07:58:00 pm
just thinking at loud...
(https://i.ibb.co/5F7JLgL/table-3.png)
Title: Re: Fractal Orbit
Post by: ivan.moony on September 12, 2019, 11:09:38 am
Ever been wondering how good the Javascript internal optimization can be?

I've been playing with fish eye effect to eliminate the need for scrollbars in visualizing image panes.

Fish eye pattern is precalculated to map on pixels of actual image. Each pixel magnification is also stored in fish eye map. The further the pixel is from center, the more pixels it covers on original bitmap.

The actual bitmap is halfed with antialiasing. Then it's halfed again. And again... until it's one pixel width and height. These maps are alo cached in advance.

Then, when rendering fish eye, regarding the pixel magnification, the correct halfed bitmap is referred. This way it should be guaranteed not to lose a single pixel when rendering on screen.

I wasn't counting on Javascript speed, I thought it would be necessary to go Asm.js or Webassembly, but it turned out that pure Javascript may be fast enough.

Test it here (https://e-teoria.github.io/Orbiteque/). Drag ovals around to navigate the tree, or drag the topmost oval pane to scroll the content. Note that it is pure HTML + Javascript, no Webassembly, no Asm.js. The bitmap size is 3000 × 3000 pixels.

Can I ask a question if anyone cares? Does anyone have a tablet around here? I'd like to hear how fast the orbit performs on those devices. On my Intel Celeron it is sometimes at snappy pace, but bearable in average. Anyway, this is the worst case scenario, to have an infinite amount of ovals. I suppose, in a real use, the visible oval amount would be halfed.
Title: Re: Fractal Orbit
Post by: Korrelan on September 12, 2019, 05:09:41 pm
Celeron? WTF... Cool.

Its all looking very cool, have you considered an application? Perhaps a demo using a file directory structure?

 :)
Title: Re: Fractal Orbit
Post by: ivan.moony on September 12, 2019, 06:27:09 pm
I like slow computers to be forced to optimize things when programming. Therefore, Celeron.

Application would be personal knowledge base (https://en.wikipedia.org/wiki/Personal_knowledge_base) for a start (maybe even content management system, but it's a drifting away from the original idea). Then I plan to mix in a theorem prover. And at last, online interface for uploading formal knowledge content, unifying scientific fields in my case.

I tested it on Firefox and it's cool. But I just tested it on Chromium too, and it's sluggish. I have to optimize it for that platform too. It is about freshly introduced `getImageData` function into browsers. I have to think about how to avoid it.
Title: Re: Fractal Orbit
Post by: ivan.moony on September 12, 2019, 11:08:56 pm
Ok, I did some changes to speed up appearance on Chromium. I replaced `getImageData` with `createImageData` where I could, and things got a bit nearer to Firefox. But even Celeron + Linux 64bit + Firefox is still faster than i3 + Windows7 32bit + Chromium. I guess that intensive array access is better handled in Firefox. This is the power of optimization I'm talking about. The slower the computer is, the more I care about clean and fast code. But I'm still impressed for overall speed of Javascript, even on Chromium. Good job, browser developer guys.

During the search for a faster method I accidentally improved the rendering algorithm a bit and now orbiting animation appearance looks a bit cleaner than initially. The link for testing (https://e-teoria.github.io/Orbiteque/) is the same.
Title: Re: Fractal Orbit
Post by: ivan.moony on September 13, 2019, 03:54:39 pm
After the last touch... these are the moments worth of all the trouble... now it's faster in Chromium than in Firefox, and in Firefox it is a bit faster than before.  :weee:

I'm telling you, things would work out even on ten times slower computers. Just, after some point, it makes no sense to optimize it any further because computers are really fast today.

The link (https://e-teoria.github.io/Orbiteque/) is the same.
Title: Re: Fractal Orbit
Post by: Korrelan on September 13, 2019, 04:44:53 pm
Might just be my setup but it seems to be slower, and I can't rotate at all, lol.

It's also allocating 450MB of RAM in the chrome browser... ouch!

Some point of reference would be cool, either a node number or perhaps colour the nodes.

 :)

ED.. Ignore me it's working, I wasn't scribing the correct path, there is a delay before the node highlighting and the rotation begins though lol.

 ;D
Title: Re: Fractal Orbit
Post by: ivan.moony on September 13, 2019, 08:18:06 pm
Korr, thanks for the valuable feedback.

Memory allocating on Chromium takes about 300KB in my case. On Firefox it is about 1MB in the cloud, and about 120MB when running from local disk. I can't explain this.

But this delay was a bug. Algorithm renders whole screen with high quality on mouse move, and mouse has to pass 3 pixels with mouse button before detecting a rotation. So there was a few (at most three) slow extra high-quality frame renders before stepping into fast low-quality rotation, which caused the delay. I believe this should be fixed now. If not, please tell.

The link (https://e-teoria.github.io/Orbiteque/) is the same.
Title: Re: Fractal Orbit
Post by: Freddy on September 13, 2019, 08:38:09 pm
It's working very smoothly here in Chrome for me :)
Title: Re: Fractal Orbit
Post by: Hopefully Something on September 13, 2019, 10:52:28 pm
Flipin Fantastic!!!  :D
Title: Re: Fractal Orbit
Post by: Korrelan on September 14, 2019, 09:41:27 am
It's alot smoother, even works nicely on my android phone now.

 :)
Title: Re: Fractal Orbit
Post by: ivan.moony on September 14, 2019, 04:13:07 pm
Guys, thanks for feedback. You helped a lot  :D
Title: Re: Fractal Orbit
Post by: ivan.moony on September 25, 2019, 02:31:22 pm
Did someone say i9? I'm sure someone said i9! How about dragging and animating contents with no scale down for speed? A bit of common sense optimization and it is fast enough even on my Celeron or mom's mid-speed android phone. Notice that there is still no Webassembly, nor asm.js. Only pure javascript, and I'm still surprised how fast it is:

https://e-teoria.github.io/Orbiteque/ (https://e-teoria.github.io/Orbiteque/)

I'd still like to hear what's happening on iPhones and tablets.

What's up next? Now I've got some work to do on the parser (https://aidreams.co.uk/forum/index.php?topic=12348.msg59969#msg59969) (I'm trying to implement logic operators), then to integrate it to Orbiteque to form a decent content management system (T-Lang as a Turing complete lisp-ish replacement for HTML, CSS and XSLT, all in one). This will make a space for a personal knowledge base usage (integrating a wisiwig editor then, I think I'm going commercial with this phase, if not before), which in turn will make a space for describing logic proofs and formal theories (Logos language (https://aidreams.co.uk/forum/index.php?topic=14096.0)), which will then make a space for crowdsourced site for sharing scientific materia with the world. A lot of things to do for a little me. I hope I'm sticking with this plan because somehow it sounds fine.
Title: Re: Fractal Orbit
Post by: ivan.moony on March 20, 2020, 07:00:01 pm
Some programming adventures



TL; DR;
Overall, only bilinear interpolation and variable fish eye curvature succeeded, but those alone are a big improvement from previous nearest neighbor scaling and fixed curvature of 1. The whole thing is even faster than the previous version without interpolation (where I used some weird tricks to increase readability), and it should be again fast enough even on mid-level smartphones (Chrome is notably faster than Firefox on desktops). Texts should now finally look perfectly antialiased without any visible pixelization, although with mostly insignificant pixel loss, with conveniently large oval area of visibility. From my experience, text sizes down to 10-12 points are still perfectly readable in a large area of central oval. For comparison, font shown in the below example is 18 points. I also noted some bugs with live resizing, fixing is pending.

Check it out on the same link as before: https://e-teoria.github.io/Orbiteque/ (https://e-teoria.github.io/Orbiteque/).
Title: Re: Fractal Orbit
Post by: ivan.moony on April 11, 2020, 07:21:44 pm
Wanna see something weird? The only thing I did was setting curvature variable from positive to negative `-0.25` value, and the code accepted it without any problems. It looks like a raytrace algorithm where bounding rays are bounced twice against the mirror.

(https://aidreams.co.uk/forum/index.php?action=dlattach;topic=12849.0;attach=10066;image)
Title: Re: Fractal Orbit
Post by: krayvonk on April 11, 2020, 09:50:48 pm
Tripped out dudez!   :D
Title: Re: Fractal Orbit
Post by: frankinstien on May 07, 2020, 09:00:02 pm
What you're describing is an ontological framework. I did work with Roget's Thesaurus where each class has satellites who have satellites, who have satellites, who have satellites. While you can only drill down so deep with Roget's framework you can extend to more subclasses that can relate to just about any kind of data. Which I did as well and am continuing to do work with. Here are some images:

(http://wraithbots.com/wp-content/uploads/2020/05/Roget1-1024x555.png)
here another example:
(http://wraithbots.com/wp-content/uploads/2020/05/Roget2-1024x555.png)

There are six main classes that drill down to 5 levels, but there is also an ability to describe words in various contexts that can build composite structures that relate to any kind of data inclusive of emotional signatures.

There is a more modern and complex ontological framework I work with now but Roget's Thesaurus was a proof concept and is used to give a machine an impression, similar to the image below:

(http://wraithbots.com/wp-content/uploads/2020/05/FreeAssociation-1-1024x555.png)
The image depicts the first and second levels of Roget's classification scheme.

(http://wraithbots.com/wp-content/uploads/2020/05/ShowThridLevel-1024x555.png)
This image depicts the second and third levels of Roget's classification scheme.

Note the paragraph on the lower left-hand side of the UI. The radar maps on the right are the impressions or the span of ideas and concepts the machine can relate to from the paragraph.
Title: Re: Fractal Orbit
Post by: ivan.moony on July 10, 2020, 06:05:15 pm
E-Fun project announcement

Finally been busy last week or two about this one. This is the most recent preview screenshot of a project based on fractal orbit.

(https://i.imgur.com/uB9Ux70.png)

It will be a content management system (CMS) with flat file support (no databases or server side scripting). It's based on bitmaps or vector graphic images uploaded from third-party source and configured in a JSON file for a hierarchy. It is still in a pre-alpha status, but you can visit a live demo here: https://contrast-zone.github.io/e-fun/ (https://contrast-zone.github.io/e-fun/). The demo is consisted of short instructions of how to use the system. Can already be used as a static documenting platform, but without hyperlink support.

Hyperlink support is still missing, but I'm on it. Probably going to be a JSON array of rectangle coordinates paired with web addresses, but I'm still considering options.

Mobile phones are of a questionable use in this case, aren't they? Anyone has a tablet to test it?
Title: Re: Fractal Orbit
Post by: Hopefully Something on July 10, 2020, 07:01:43 pm
I tested with a tablet. Dragging/sliding things is definitely easier with a mouse, touch screens are better for tasks requiring the accurate fast selections of distinct targets. So your current orbital mechanics seem best for use on desktop computers. Still usable (and fun) with both.  O0
Title: Re: Fractal Orbit
Post by: WriterOfMinds on July 11, 2020, 03:49:35 pm
This is super neat. I tried it out on my laptop (which has two mouse keys and a touchpad).

I had a little trouble figuring out the navigation directions. Click-and-drag to pan around the central sphere was intuitive, but it wasn't obvious to me at first that I also had to drag in order to move to different spheres. Once I figured that out though, navigation was pretty easy.

And it all runs smoothly with no obvious performance issues, even though my laptop is old and sometimes struggles with over-complicated websites.
Title: Re: Fractal Orbit
Post by: ivan.moony on July 11, 2020, 05:36:32 pm
Tx for feedback. :)

Yes, smaller sites load relatively fast. I develop it on my Celleron, so I take a care of performance as much as I can. Bigger sites perform as much fast, but initial browser loading chokes on them because of all pre-caching necessary for later usage speed. For this reason I have to cross off bigger sites on mobile phones that, for example, may be loading the demo for 8 seconds or more (about 1 second per page). Bigger number of pages extend the loading speed linearly proportional. Celeron loading speed is about 0.2 seconds per page, so desktops should be ok.
Title: Re: Fractal Orbit
Post by: ivan.moony on July 22, 2020, 06:13:51 pm
The latest change (among others) in e-fun is improving loading speed at the expense of bound antialiasing. The most of the central oval area is still antialiased, only bounding regions are crispy now. By this, I hope I reduced loading speed on mobiles to a reasonable range (it's about 0.3 seconds per page now on my test phone).

I hope all this is enough to release the first beta version, so I did it here (https://github.com/contrast-zone/e-fun).

Is anyone interested in beta testing? You'd have to build and setup a small site of your own choice, and report possible bugs. You'd earn a free lifetime subscription to new versions of e-fun. Well, plans are to make the project free for trusty members of Ai-Dreams anyway, but I could make a use from some feedback on an actual use cases.