예제 #1
0
        public void Cumulated_x3()
        {
            var m = new AtomContainer();

            m.Atoms.Add(Atom("C", 3));
            m.Atoms.Add(Atom("C", 1));
            m.Atoms.Add(Atom("C", 0));
            m.Atoms.Add(Atom("C", 0));
            m.Atoms.Add(Atom("C", 1));
            m.Atoms.Add(Atom("C", 3));
            m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single);
            m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Double);
            m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double);
            m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Double);
            m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Single);
            m.Atoms[0].Point2D  = Vector2.Zero;
            m.Atoms[0].IsPlaced = true;

            AtomPlacer atomPlacer = new AtomPlacer {
                Molecule = m
            };
            var v = new Vector2(0, 1.5);

            atomPlacer.PlaceLinearChain(m, ref v, 1.5);

            Vector2 p1 = m.Atoms[1].Point2D.Value;
            Vector2 p2 = m.Atoms[2].Point2D.Value;
            Vector2 p3 = m.Atoms[3].Point2D.Value;
            Vector2 p4 = m.Atoms[4].Point2D.Value;

            Vector2 p2p1 = new Vector2(p1.X - p2.X, p1.Y - p2.Y);
            Vector2 p2p3 = new Vector2(p3.X - p2.X, p3.Y - p2.Y);
            Vector2 p3p2 = new Vector2(p2.X - p3.X, p2.Y - p3.Y);
            Vector2 p3p4 = new Vector2(p4.X - p3.X, p4.Y - p3.Y);

            p2p1 = Vector2.Normalize(p2p1);
            p2p3 = Vector2.Normalize(p2p3);
            p3p2 = Vector2.Normalize(p3p2);
            p3p4 = Vector2.Normalize(p3p4);

            //Assert.AreEqual(Math.PI, Math.Acos(p2p1.X * p2p3.X + p2p1.Y * p2p3.Y), 0.05);
            //Assert.AreEqual(Math.PI, Math.Acos(p3p2.X * p3p4.X + p3p2.Y * p3p4.Y), 0.05);
            Assert.AreEqual(-1, p2p1.X * p2p3.X + p2p1.Y * p2p3.Y, 0.001);
            Assert.AreEqual(-1, p3p2.X * p3p4.X + p3p2.Y * p3p4.Y, 0.001);
        }
예제 #2
0
        public void Cumulated_x2()
        {
            var m = new AtomContainer();

            m.Atoms.Add(Atom("C", 3));
            m.Atoms.Add(Atom("C", 1));
            m.Atoms.Add(Atom("C", 0));
            m.Atoms.Add(Atom("C", 1));
            m.Atoms.Add(Atom("C", 3));
            m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single);
            m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Double);
            m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double);
            m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single);
            m.Atoms[0].Point2D  = Vector2.Zero;
            m.Atoms[0].IsPlaced = true;

            AtomPlacer atomPlacer = new AtomPlacer {
                Molecule = m
            };
            var v = new Vector2(0, 1.5);

            atomPlacer.PlaceLinearChain(m, ref v, 1.5);

            Vector2 p1 = m.Atoms[1].Point2D.Value;
            Vector2 p2 = m.Atoms[2].Point2D.Value;
            Vector2 p3 = m.Atoms[3].Point2D.Value;

            Vector2 p2p1 = new Vector2(p1.X - p2.X, p1.Y - p2.Y);
            Vector2 p2p3 = new Vector2(p3.X - p2.X, p3.Y - p2.Y);

            p2p1 = Vector2.Normalize(p2p1);
            p2p3 = Vector2.Normalize(p2p3);

            double round = (float)(p2p1.X * p2p3.X + p2p1.Y * p2p3.Y); // rounding the value to avoid over 1 value.
            double theta = Math.Acos(round);

            Assert.AreEqual(Math.PI, theta, 0.05);
        }