[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.javascript

Untangle node positions "logic problem"

JT

3/9/2016 7:15:00 PM

My new idea to untangle the links is simply to swap theiry positions.
But there muste be something wrong with my logic.

The circle function will attempt draw out the *nodes* in circle from lowest node to higest.

0 NODE Links-> 2,3
1 NODE Links-> 3,4
2 NODE Links-> 0,4
3 NODE Links-> 0,1
4 NODE Links-> 1,2

As you may guess the links come out criss crossed.
But i was thinking if node 0 draw it first link to node 2.
Then i can interchange the cordinates of node 2 and node 0+1 "that is i+1" to move node segment 2 next to i.

So now i have the tempnode in memory and that will have one link point back j=0;
And one link point forward. That link should be exchanged with i+1. Because we are in next round of loop. I think the logic is straightforward so i can't see why it is not working. Swap cordinates of random with i+1 it should work.

function untangle_links(){

j=0;
tempnode=0;
for(var i=0;i<nodes.length-1;i++){
tempnode=arr[tempnode].nodelinks[j];
tempX=arr[tempnode].rposX;
tempY=arr[tempnode].rposY;
arr[tempnode].rposX=arr[i+1].rposX;
arr[tempnode].rposY=arr[i+1].rposY;
arr[i+1].rposX=tempX;
arr[i+1].rposY=tempY;
j=1;
}
}
20 Answers

JT

3/9/2016 8:00:00 PM

0

Den onsdag 9 mars 2016 kl. 20:15:22 UTC+1 skrev jonas.t...@gmail.com:
> My new idea to untangle the links is simply to swap theiry positions.
> But there muste be something wrong with my logic.
>
> The circle function will attempt draw out the *nodes* in circle from lowest node to higest.
>
> 0 NODE Links-> 2,3
> 1 NODE Links-> 3,4
> 2 NODE Links-> 0,4
> 3 NODE Links-> 0,1
> 4 NODE Links-> 1,2
>
> As you may guess the links come out criss crossed.
> But i was thinking if node 0 draw it first link to node 2.
> Then i can interchange the cordinates of node 2 and node 0+1 "that is i+1" to move node segment 2 next to i.
>
> So now i have the tempnode in memory and that will have one link point back j=0;
> And one link point forward. That link should be exchanged with i+1. Because we are in next round of loop. I think the logic is straightforward so i can't see why it is not working. Swap cordinates of random with i+1 it should work.
>
> function untangle_links(){
>
> j=0;
> tempnode=0;
> for(var i=0;i<nodes.length-1;i++){
> tempnode=arr[tempnode].nodelinks[j];
> tempX=arr[tempnode].rposX;
> tempY=arr[tempnode].rposY;
> arr[tempnode].rposX=arr[i+1].rposX;
> arr[tempnode].rposY=arr[i+1].rposY;
> arr[i+1].rposX=tempX;
> arr[i+1].rposY=tempY;
> j=1;
> }
> }

The principle seem sound but i think i need to make a list for what nodes that have been drawn to, that sure will be beneficial when there is more links than two at each node.

JT

3/9/2016 8:41:00 PM

0

Den onsdag 9 mars 2016 kl. 21:00:16 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 20:15:22 UTC+1 skrev jonas.t...@gmail.com:
> > My new idea to untangle the links is simply to swap theiry positions.
> > But there muste be something wrong with my logic.
> >
> > The circle function will attempt draw out the *nodes* in circle from lowest node to higest.
> >
> > 0 NODE Links-> 2,3
> > 1 NODE Links-> 3,4
> > 2 NODE Links-> 0,4
> > 3 NODE Links-> 0,1
> > 4 NODE Links-> 1,2
> >
> > As you may guess the links come out criss crossed.
> > But i was thinking if node 0 draw it first link to node 2.
> > Then i can interchange the cordinates of node 2 and node 0+1 "that is i+1" to move node segment 2 next to i.
> >
> > So now i have the tempnode in memory and that will have one link point back j=0;
> > And one link point forward. That link should be exchanged with i+1. Because we are in next round of loop. I think the logic is straightforward so i can't see why it is not working. Swap cordinates of random with i+1 it should work.
> >
> > function untangle_links(){
> >
> > j=0;
> > tempnode=0;
> > for(var i=0;i<nodes.length-1;i++){
> > tempnode=arr[tempnode].nodelinks[j];
> > tempX=arr[tempnode].rposX;
> > tempY=arr[tempnode].rposY;
> > arr[tempnode].rposX=arr[i+1].rposX;
> > arr[tempnode].rposY=arr[i+1].rposY;
> > arr[i+1].rposX=tempX;
> > arr[i+1].rposY=tempY;
> > j=1;
> > }
> > }
>
> The principle seem sound but i think i need to make a list for what nodes that have been drawn to, that sure will be beneficial when there is more links than two at each node.

This is hairy todo

function untangle_links(){
var j=0;
var tempnodes=new Array();
tempnodes[k]=0;
tempnode=0;
for(var i=0;i<nodes.length-1;i++){
for(var k=0;k<tempnodes.length;k++){
if (arr[tempnode].nodelinks[j]==tempnodes[k]) {j++;}
}
tempnodes[tempnodes.length+1]=arr[tempnode].nodelinks[j];
tempnode=arr[tempnode].nodelinks[j];
j=0;
tempX=arr[tempnode].rposX;
tempY=arr[tempnode].rposY;
arr[tempnode].rposX=arr[i+1].rposX;
arr[tempnode].rposY=arr[i+1].rposY;
arr[i+1].rposX=tempX;
arr[i+1].rposY=tempY;
}
}

JT

3/9/2016 8:54:00 PM

0

Den onsdag 9 mars 2016 kl. 21:40:53 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 21:00:16 UTC+1 skrev jonas.t...@gmail.com:
> > Den onsdag 9 mars 2016 kl. 20:15:22 UTC+1 skrev jonas.t...@gmail.com:
> > > My new idea to untangle the links is simply to swap theiry positions.
> > > But there muste be something wrong with my logic.
> > >
> > > The circle function will attempt draw out the *nodes* in circle from lowest node to higest.
> > >
> > > 0 NODE Links-> 2,3
> > > 1 NODE Links-> 3,4
> > > 2 NODE Links-> 0,4
> > > 3 NODE Links-> 0,1
> > > 4 NODE Links-> 1,2
> > >
> > > As you may guess the links come out criss crossed.
> > > But i was thinking if node 0 draw it first link to node 2.
> > > Then i can interchange the cordinates of node 2 and node 0+1 "that is i+1" to move node segment 2 next to i.
> > >
> > > So now i have the tempnode in memory and that will have one link point back j=0;
> > > And one link point forward. That link should be exchanged with i+1. Because we are in next round of loop. I think the logic is straightforward so i can't see why it is not working. Swap cordinates of random with i+1 it should work.
> > >
> > > function untangle_links(){
> > >
> > > j=0;
> > > tempnode=0;
> > > for(var i=0;i<nodes.length-1;i++){
> > > tempnode=arr[tempnode].nodelinks[j];
> > > tempX=arr[tempnode].rposX;
> > > tempY=arr[tempnode].rposY;
> > > arr[tempnode].rposX=arr[i+1].rposX;
> > > arr[tempnode].rposY=arr[i+1].rposY;
> > > arr[i+1].rposX=tempX;
> > > arr[i+1].rposY=tempY;
> > > j=1;
> > > }
> > > }
> >
> > The principle seem sound but i think i need to make a list for what nodes that have been drawn to, that sure will be beneficial when there is more links than two at each node.
>
> This is hairy todo
>
> function untangle_links(){
> var j=0;
> var tempnodes=new Array();
> tempnodes[k]=0;
> tempnode=0;
> for(var i=0;i<nodes.length-1;i++){
> for(var k=0;k<tempnodes.length;k++){
> if (arr[tempnode].nodelinks[j]==tempnodes[k]) {j++;}
> }
> tempnodes[tempnodes.length+1]=arr[tempnode].nodelinks[j];
> tempnode=arr[tempnode].nodelinks[j];
> j=0;
> tempX=arr[tempnode].rposX;
> tempY=arr[tempnode].rposY;
> arr[tempnode].rposX=arr[i+1].rposX;
> arr[tempnode].rposY=arr[i+1].rposY;
> arr[i+1].rposX=tempX;
> arr[i+1].rposY=tempY;
> }
> }

A bit confusing tempnode ->tempnodes[] changed to tnode

function untangle_links(){
var j=0;var tempnode=0;
var tnode=new Array();
tnode[k]=0;

for(var i=0;i<nodes.length-1;i++){
for(var k=0;k<tnode.length;k++){
if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
}
tempnode=arr[tempnode].nodelinks[j];
tnode[tnode.length+1]=arr[tempnode].nodelinks[j];
j=0;
tempX=arr[tempnode].rposX;
tempY=arr[tempnode].rposY;
arr[tempnode].rposX=arr[i+1].rposX;
arr[tempnode].rposY=arr[i+1].rposY;
arr[i+1].rposX=tempX;
arr[i+1].rposY=tempY;
}
}

JT

3/9/2016 8:57:00 PM

0

function untangle_links(){
var j=0;var tempnode=0;
var tnode=new Array();
tnode[k]=0;

for(var i=0;i<nodes.length-1;i++){
for(var k=0;k<tnode.length;k++){
if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
}
tempnode=arr[tempnode].nodelinks[j];
tnode[tnode.length+1]=tempnode;
j=0;
tempX=arr[tempnode].rposX;
tempY=arr[tempnode].rposY;
arr[tempnode].rposX=arr[i+1].rposX;
arr[tempnode].rposY=arr[i+1].rposY;
arr[i+1].rposX=tempX;
arr[i+1].rposY=tempY;
}
}

JT

3/9/2016 9:00:00 PM

0

Den onsdag 9 mars 2016 kl. 21:57:32 UTC+1 skrev jonas.t...@gmail.com:
> function untangle_links(){
> var j=0;var tempnode=0;
> var tnode=new Array();
> tnode[k]=0;
>
> for(var i=0;i<nodes.length-1;i++){
> for(var k=0;k<tnode.length;k++){
> if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
> }
> tempnode=arr[tempnode].nodelinks[j];
> tnode[tnode.length+1]=tempnode;
> j=0;
> tempX=arr[tempnode].rposX;
> tempY=arr[tempnode].rposY;
> arr[tempnode].rposX=arr[i+1].rposX;
> arr[tempnode].rposY=arr[i+1].rposY;
> arr[i+1].rposX=tempX;
> arr[i+1].rposY=tempY;
> }
> }

This is an example where a stepwise turbo pascal debugger would do miracles.
Because i would be able to find first link that goes wrong.

JT

3/9/2016 9:29:00 PM

0

Den onsdag 9 mars 2016 kl. 22:00:13 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 21:57:32 UTC+1 skrev jonas.t...@gmail.com:
> > function untangle_links(){
> > var j=0;var tempnode=0;
> > var tnode=new Array();
> > tnode[k]=0;
> >
> > for(var i=0;i<nodes.length-1;i++){
> > for(var k=0;k<tnode.length;k++){
> > if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
> > }
> > tempnode=arr[tempnode].nodelinks[j];
> > tnode[tnode.length+1]=tempnode;
> > j=0;
> > tempX=arr[tempnode].rposX;
> > tempY=arr[tempnode].rposY;
> > arr[tempnode].rposX=arr[i+1].rposX;
> > arr[tempnode].rposY=arr[i+1].rposY;
> > arr[i+1].rposX=tempX;
> > arr[i+1].rposY=tempY;
> > }
> > }
>
> This is an example where a stepwise turbo pascal debugger would do miracles.
> Because i would be able to find first link that goes wrong.

http://jt.node365.se/no...

JT

3/9/2016 9:41:00 PM

0

Den onsdag 9 mars 2016 kl. 22:00:13 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 21:57:32 UTC+1 skrev jonas.t...@gmail.com:
> > function untangle_links(){
> > var j=0;var tempnode=0;
> > var tnode=new Array();
> > tnode[k]=0;
> >
> > for(var i=0;i<nodes.length-1;i++){
> > for(var k=0;k<tnode.length;k++){
> > if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
> > }
> > tempnode=arr[tempnode].nodelinks[j];
> > tnode[tnode.length+1]=tempnode;
> > j=0;
> > tempX=arr[tempnode].rposX;
> > tempY=arr[tempnode].rposY;
> > arr[tempnode].rposX=arr[i+1].rposX;
> > arr[tempnode].rposY=arr[i+1].rposY;
> > arr[i+1].rposX=tempX;
> > arr[i+1].rposY=tempY;
> > }
> > }
>
> This is an example where a stepwise turbo pascal debugger would do miracles.
> Because i would be able to find first link that goes wrong.

Or maybe i just missunderstood the draw circle function, well i should probably do one myself, but i thought it moved in degree steps for each node+

JT

3/10/2016 1:16:00 AM

0

Den onsdag 9 mars 2016 kl. 22:41:33 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 22:00:13 UTC+1 skrev jonas.t...@gmail.com:
> > Den onsdag 9 mars 2016 kl. 21:57:32 UTC+1 skrev jonas.t...@gmail.com:
> > > function untangle_links(){
> > > var j=0;var tempnode=0;
> > > var tnode=new Array();
> > > tnode[k]=0;
> > >
> > > for(var i=0;i<nodes.length-1;i++){
> > > for(var k=0;k<tnode.length;k++){
> > > if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
> > > }
> > > tempnode=arr[tempnode].nodelinks[j];
> > > tnode[tnode.length+1]=tempnode;
> > > j=0;
> > > tempX=arr[tempnode].rposX;
> > > tempY=arr[tempnode].rposY;
> > > arr[tempnode].rposX=arr[i+1].rposX;
> > > arr[tempnode].rposY=arr[i+1].rposY;
> > > arr[i+1].rposX=tempX;
> > > arr[i+1].rposY=tempY;
> > > }
> > > }
> >
> > This is an example where a stepwise turbo pascal debugger would do miracles.
> > Because i would be able to find first link that goes wrong.
>
> Or maybe i just missunderstood the draw circle function, well i should probably do one myself, but i thought it moved in degree steps for each node+

Something wrong with approach have to start over, it swap back and forth.

JT

3/10/2016 1:22:00 AM

0

Den onsdag 9 mars 2016 kl. 22:41:33 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 22:00:13 UTC+1 skrev jonas.t...@gmail.com:
> > Den onsdag 9 mars 2016 kl. 21:57:32 UTC+1 skrev jonas.t...@gmail.com:
> > > function untangle_links(){
> > > var j=0;var tempnode=0;
> > > var tnode=new Array();
> > > tnode[k]=0;
> > >
> > > for(var i=0;i<nodes.length-1;i++){
> > > for(var k=0;k<tnode.length;k++){
> > > if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
> > > }
> > > tempnode=arr[tempnode].nodelinks[j];
> > > tnode[tnode.length+1]=tempnode;
> > > j=0;
> > > tempX=arr[tempnode].rposX;
> > > tempY=arr[tempnode].rposY;
> > > arr[tempnode].rposX=arr[i+1].rposX;
> > > arr[tempnode].rposY=arr[i+1].rposY;
> > > arr[i+1].rposX=tempX;
> > > arr[i+1].rposY=tempY;
> > > }
> > > }
> >
> > This is an example where a stepwise turbo pascal debugger would do miracles.
> > Because i would be able to find first link that goes wrong.
>
> Or maybe i just missunderstood the draw circle function, well i should probably do one myself, but i thought it moved in degree steps for each node+

Welll there is certainly something wrong with the approach it swap back and forth. instead I will do a pure node sequense, store it in an array and fit the drawing program to follow it.

JT

3/10/2016 6:52:00 AM

0

Den torsdag 10 mars 2016 kl. 02:21:54 UTC+1 skrev jonas.t...@gmail.com:
> Den onsdag 9 mars 2016 kl. 22:41:33 UTC+1 skrev jonas.t...@gmail.com:
> > Den onsdag 9 mars 2016 kl. 22:00:13 UTC+1 skrev jonas.t...@gmail.com:
> > > Den onsdag 9 mars 2016 kl. 21:57:32 UTC+1 skrev jonas.t...@gmail.com:
> > > > function untangle_links(){
> > > > var j=0;var tempnode=0;
> > > > var tnode=new Array();
> > > > tnode[k]=0;
> > > >
> > > > for(var i=0;i<nodes.length-1;i++){
> > > > for(var k=0;k<tnode.length;k++){
> > > > if (arr[tempnode].nodelinks[j]==tnode[k]) {j++;}
> > > > }
> > > > tempnode=arr[tempnode].nodelinks[j];
> > > > tnode[tnode.length+1]=tempnode;
> > > > j=0;
> > > > tempX=arr[tempnode].rposX;
> > > > tempY=arr[tempnode].rposY;
> > > > arr[tempnode].rposX=arr[i+1].rposX;
> > > > arr[tempnode].rposY=arr[i+1].rposY;
> > > > arr[i+1].rposX=tempX;
> > > > arr[i+1].rposY=tempY;
> > > > }
> > > > }
> > >
> > > This is an example where a stepwise turbo pascal debugger would do miracles.
> > > Because i would be able to find first link that goes wrong.
> >
> > Or maybe i just missunderstood the draw circle function, well i should probably do one myself, but i thought it moved in degree steps for each node+
>
> Welll there is certainly something wrong with the approach it swap back and forth. instead I will do a pure node sequense, store it in an array and fit the drawing program to follow it.

New approach work sometimes ;)
http://jt.node365.se/no...