示例#1
0
文件: XYTest.cs 项目: leisn/D3Sharp
        public void ForceXFixedPosions()
        {
            var collide = new ForceCollide <Node>();
            var nodes   = new List <Node>
            {
                new Node {
                    Fx = 0, Fy = 0
                },
                new Node(),
                new Node(),
            };

            var f = new Simulation <Node>().AddForce("x", new ForceX <Node>(200));

            f.Nodes = nodes;
            f.Tick();

            Assert.IsTrue(NodeEquals.Equals(nodes[0], new Node
            {
                X     = 0,
                Y     = 0,
                Index = 0,
                Vx    = 0,
                Vy    = 0,
                Fx    = 0,
                Fy    = 0
            }));
        }
示例#2
0
        private Node ParseEqualsNotEquals()
        {
            Node lhs = ParseLessThanGreaterThan();

            while (true)
            {
                switch (Tokens.CurrentToken)
                {
                case TokenType.Equals:
                {
                    Tokens.ReadNext();
                    Node rhs = ParseLessThanGreaterThan();
                    lhs = new NodeEquals(lhs, rhs);
                    continue;
                }

                case TokenType.NotEquals:
                {
                    Tokens.ReadNext();
                    Node rhs = ParseLessThanGreaterThan();
                    lhs = new NodeNotEquals(lhs, rhs);
                    continue;
                }

                default:
                    return(lhs);
                }
            }
        }
示例#3
0
文件: LinkTest.cs 项目: leisn/D3Sharp
        public void LinkNodes()
        {
            var mb    = new ForceManyBody <Node>();
            var nodes = new List <Node>
            {
                new Node(),
                new Node(),
                new Node(),
            };
            var links = new List <Link> {
                new Link {
                    Source = 0, Target = 1
                },
                new Link {
                    Source = 0, Target = 2
                },
                new Link {
                    Source = 2, Target = 1
                }
            };
            var f = new Simulation <Node>(nodes)
                    .AddForce("charge", new ForceLink <Node, Link>(links));

            f.Tick(10);

            Assert.IsTrue(NodeEquals.Equals(nodes[0], new Node
            {
                Index = 0,
                X     = 16.09041099433763,
                Y     = 3.5566118665783737,
                Vy    = -0.0054287493843713204,
                Vx    = -0.008594012984423784
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[1], new Node
            {
                Index = 1,
                X     = -13.530127801425026,
                Y     = 8.528827598527032,
                Vy    = -0.0029644135266946848,
                Vx    = 0.007059721513094188
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[2], new Node
            {
                Index = 2,
                X     = -3.13778081756669,
                Y     = -19.56325387055707,
                Vy    = 0.008393162911065991,
                Vx    = 0.00153429147132959
            }));
        }
示例#4
0
        public void InitializesWidthIndicesAndPhyllotaxisPositions()
        {
            var collide = new ForceCollide <Node>();
            var nodes   = new List <Node>
            {
                new Node(),
                new Node(),
                new Node(),
            };

            var f = new Simulation <Node>();

            f.Nodes = nodes;

            Assert.IsTrue(NodeEquals.Equals(nodes[0], new Node
            {
                X     = 7.0710678118654755,
                Y     = 0,
                Index = 0,
                Vx    = 0,
                Vy    = 0
            }));

            Assert.IsTrue(NodeEquals.Equals(nodes[1], new Node
            {
                X     = -9.03088751750192,
                Y     = 8.27303273571596,
                Index = 1,
                Vx    = 0,
                Vy    = 0
            }));

            Assert.IsTrue(NodeEquals.Equals(nodes[2], new Node
            {
                X     = 1.3823220809823638,
                Y     = -15.750847141167634,
                Index = 2,
                Vx    = 0,
                Vy    = 0
            }));
        }
示例#5
0
        public void RepositionNodesWithStrength()
        {
            var mb    = new ForceManyBody <Node>();
            var nodes = new List <Node>
            {
                new Node(),
                new Node(),
                new Node(),
            };
            var f = new Simulation <Node>(nodes)
                    .AddForce("charge", new ForceManyBody <Node>().SetStrength(110));

            f.Tick(10);

            Assert.IsTrue(NodeEquals.Equals(nodes[0], new Node
            {
                Index = 0,
                X     = -18.09293034190703,
                Y     = -61.85522398527266,
                Vy    = -3.253143684829417,
                Vx    = -1.7572575345196322
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[1], new Node
            {
                Index = 1,
                X     = 1.4163070367881587,
                Y     = -1.422811550994962,
                Vy    = -0.5737847675719954,
                Vx    = 1.7868953325697519
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[2], new Node
            {
                Index = 2,
                X     = 14.213419687223059,
                Y     = 53.52135594511722,
                Vy    = 3.9532863174478163,
                Vx    = 0.12091965478188131
            }));
        }
示例#6
0
        public void RepositionNodes()
        {
            var mb    = new ForceManyBody <Node>();
            var nodes = new List <Node>
            {
                new Node(),
                new Node(),
                new Node(),
            };
            var f = new Simulation <Node>(null)
                    .AddForce("charge", mb).Stop();

            f.Nodes = nodes;
            f.Tick(10);

            Assert.IsTrue(NodeEquals.Equals(nodes[0], new Node
            {
                Index = 0,
                X     = 23.543801233055913,
                Y     = 7.000581643076774,
                Vy    = 0.517906401931719,
                Vx    = 1.2544752274469713
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[1], new Node
            {
                Index = 1,
                X     = -23.850904378439182,
                Y     = 21.28389725298747,
                Vy    = 0.914257118557985,
                Vx    = -1.1020909771461325
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[2], new Node
            {
                Index = 2,
                X     = -0.27039447927081395,
                Y     = -35.76229330151591,
                Vy    = -1.432163520489704,
                Vx    = -0.15238425030083882
            }));

            mb.SetStrength(-300);
            f.Tick(10);

            Assert.IsTrue(NodeEquals.Equals(nodes[0], new Node
            {
                Index = 0,
                X     = 75.51481478403578,
                Y     = 28.27281541254175,
                Vy    = 1.4774660259027388,
                Vx    = 3.6177951664030035
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[1], new Node
            {
                Index = 1,
                X     = -68.77261279544413,
                Y     = 57.176314237578026,
                Vy    = 2.438763218070549,
                Vx    = -3.1042619113625594
            }));
            Assert.IsTrue(NodeEquals.Equals(nodes[2], new Node
            {
                Index = 2,
                X     = -7.319699613245737,
                Y     = -92.92694405557147,
                Vy    = -3.916229243973288,
                Vx    = -0.5135332550404446
            }));
        }