public RobotDynamics(string name = DEFNAME) : base(name) { l = 0.2; //z h = 0.05; //y w = 0.1; //x Body.Mass.Value = 0.5; Body.Name = "Body"; AddChild(Body); Body.SynchMeAfter += SynchWheelsToBodyPos; FloorForce = new ForceCenter(1, new Position3D(0, 1, 0), null); Body.AddForce(FloorForce); SynchMassGeometry(); for (int i = 0; i < 4; i++) { wheels.Add(RbWheel.GetStandart()); } wheels[0].localPos = new Vector3D(w / 2, 0, l / 2); wheels[1].localPos = new Vector3D(w / 2, 0, -l / 2); wheels[2].localPos = new Vector3D(-w / 2, 0, l / 2); wheels[3].localPos = new Vector3D(-w / 2, 0, -l / 2); //double moment = 0.1; //foreach(var w in wheels) { // Body.AddChild(w); // w.Mx = moment; // moment += moment; //} }
public void RespectFixedPositions() { var center = new ForceCenter <Node>(); var nodes = new List <Node> { new Node { Fx = 0, Fy = 0 }, new Node(), new Node(), }; var s = new Simulation <Node>(null) .AddForce("center", center).Stop(); s.Nodes = nodes; s.Tick(); Assert.AreEqual(0, nodes[0].X); Assert.AreEqual(0, nodes[0].Y); Assert.AreEqual(0, nodes[0].Fx); Assert.AreEqual(0, nodes[0].Fy); Assert.AreEqual(0, nodes[0].Vx); Assert.AreEqual(0, nodes[0].Vy); }
public void RepositionNodes() { var center = new ForceCenter <Node>(0, 0); var nodes = new List <Node> { new Node { X = 100, Y = 0 }, new Node { X = 200, Y = 0 }, new Node { X = 300, Y = 0 }, }; var s = new Simulation <Node>(null) .AddForce("center", center).Stop(); s.Nodes = nodes; s.Tick(); Assert.AreEqual(-100, nodes[0].X); Assert.AreEqual(0, nodes[1].X); Assert.AreEqual(100, nodes[2].X); }